
    &e17                        U d dl Z d dl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 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mZmZmZ d dlmZ d dlmZmZ d dlmZ d d	lm Z  d d
l!m"Z"m#Z#  ee$          Z%dZ&ee'd<   dZ(ee'd<   ddddddddddd
Z)ee'd<   g dZ*ee'd<   dZ+dZ,de-fd Z. G d! d"          Z/d#e0de-fd$Z1d%ed&ef         de-fd'Z2d(e0dee-         fd)Z3d*ed&ef         d+e-de#fd,Z4d-e5de6fd.Z7 ed/ed&ef         0          Z8ed1e-d%e8de8fd2            Z9e	 d:d1e-d%ddee8ge8f         fd3            Z9d:d1e-d%ee8         deee8ge8f         e8f         fd4Z9	 d:d5ee#         d6e6d7e6d8ee-         de f
d9Z:dS );    N)Sized)wraps)default_timer)	AnyCallableListOptionalSetTypeVarUnioncastoverload)Final)configutil)
get_logger)
ForwardMsg)ArgumentCommand   _MAX_TRACKED_COMMANDS   _MAX_TRACKED_PER_COMMANDDG	DataFramePlotlyFigureBokehFigureMatplotlibFigurePandasStylerPandasIndexPandasSeriesSnowparkConnectionSQLConnection)
z(streamlit.delta_generator.DeltaGeneratorzpandas.core.frame.DataFramez plotly.graph_objs._figure.Figurezbokeh.plotting.figure.Figurezmatplotlib.figure.Figurezpandas.io.formats.style.Stylerzpandas.core.indexes.base.Indexzpandas.core.series.Seriesz<streamlit.connections.snowpark_connection.SnowparkConnectionz2streamlit.connections.sql_connection.SQLConnection_OBJECT_NAME_MAPPING)PpymysqlMySQLdbmysqlpymongoibisboto3psycopg2psycopg3
sqlalchemyelasticsearchpyodbcpymssql	cassandraazureredissqlite3neo4jduckdbopensearchpysupabasepolarsdaskvaexmodinpysparkcudfxarrayrayopenai	langchainllama_index	llama_cpp	anthropic
pyllamacppcoheretransformersnomic	diffuserssemantic_kernel	replicatehuggingface_hubwandbtorch
tensorflowtrubricscomet_mlclarifairekahegelfastchat
assemblyaiopenllm
embedchainhaystackvllmalpajinaaiguidancelitellm	comet_llm
instructorprefectluigiairflowdagsterpgvectorfaissannoypineconechromadbweaviateqdrant_clientpymilvuslancedbdatasets	snowflakestreamlit_extrasstreamlit_pydanticpydanticplost_ATTRIBUTIONS_TO_CHECKz/etc/machine-idz/var/lib/dbus/machine-idreturnc                     t          t          j                              } t          j                            t                    rBt          t          d          5 }|                                } ddd           n# 1 swxY w Y   net          j                            t                    rAt          t          d          5 }|                                } ddd           n# 1 swxY w Y   | S )aN  Get the machine ID

    This is a unique identifier for a user for tracking metrics in Segment,
    that is broken in different ways in some Linux distros and Docker images.
    - at times just a hash of '', which means many machines map to the same ID
    - at times a hash of the same string, when running in a Docker container
    rN)
struuidgetnodeospathisfile_ETC_MACHINE_ID_PATHopenread_DBUS_MACHINE_ID_PATH)
machine_idfs     >lib/python3.11/site-packages/streamlit/runtime/metrics_util.py_get_machine_id_v3r      s0    T\^^$$J	w~~*++ "&,, 	"J	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 
-	.	. "'-- 	"J	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" s$   A;;A?A? C!!C%(C%c                       e Zd ZU  ej                    ZdZed          ed<   e	dd            Z
d ZdefdZed             ZdS )	InstallationN	_instancerv   c                     | j         9| j        5  | j         t                      | _         ddd           n# 1 swxY w Y   | j         S )z"Returns the singleton InstallationN)r   _instance_lockr   )clss    r   instancezInstallation.instance   s     = # 3 3=($0NNCM3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 }s   6::c                     t          t          j        t          j        t	                                          | _        d S N)ry   rz   uuid5NAMESPACE_DNSr   installation_id_v3selfs    r   __init__zInstallation.__init__   s3    "%Jt)+=+?+?@@#
 #
    c                 *    t          j        |           S r   )r   repr_r   s    r   __repr__zInstallation.__repr__   s    z$r   c                     | j         S r   )r   r   s    r   installation_idzInstallation.installation_id   s    &&r   )rv   r   )__name__
__module____qualname__	threadingLockr   r   r	   __annotations__classmethodr   r   ry   r   propertyr    r   r   r   r      s         #Y^%%N*.Ix'...	 	 	 [	
 
 

 #         ' ' X' ' 'r   r   objc                 r   t          j        t                    5  t          j        |           r| nt          |           }d}t          |d          r|j        }nt          |d          r|j        }|j	        dk    r|j	         d| }|t          v rt          |         }|cddd           S # 1 swxY w Y   dS )z7Get a simplified name for the type of the given object.unknownr   r   builtins.Nfailed)
contextlibsuppress	Exceptioninspectisclasstypehasattrr   r   r   r$   )r   obj_type	type_names      r   _get_type_namer      s
   		Y	'	'  !/#..=33DII	8^,, 	* -IIXz** 	* )I*,,#.<<<<I,,,,Y7I                8s   BB,,B03B0func.c                     t          j        |           }||j        sdS |j                            d          d         S )z0Get the top level module for the given function.Nr   r   r   )r   	getmoduler   split)r   modules     r   _get_top_level_moduler      s=    t$$F~V_~y?  %%a((r   argc                    t          j        t                    5  t          | t                    rd|  cddd           S t          | t
                    rdt          |            cddd           S 	 ddd           n# 1 swxY w Y   dS )zBGet metadata information related to the value of the given object.zval:Nzlen:)r   r   r   
isinstanceboolr   len)r   s    r   _get_arg_metadatar      s   		Y	'	' % %cD"" 	 #<<% % % % % % % % c5!! 	%$#c(($$% % % % % % % %	%	% % % % % % % % % % % % % % % 4s   B&BBB_command_func_command_namec                    t          j        |           j        }d}g }t          j        |           }|}t	          |          D ]\  }	}
|	}|r|	dz   }	t          |          |	k    r||	         n|	 }|dk    r|
}5t          |t          |
          |          }t          |
          }|r||_	        |
                    |           |                                D ]P\  }}t          |t          |                    }t          |          }|r||_	        |
                    |           Qt          |           }|dk    rd| d| }|d	k    r#|r!t          |d
          r|j        r
d|j         }t          ||          S )zCGet telemetry information for the given callable and its arguments.N   r   )ktp)r   r   	streamlitz	external::create_instancenamez
component:)r   args)r   getfullargspecr   ismethod	enumerater   r   r   r   mappenditemsr   r   r   r   )r   r   r   kwargsarg_keywordsself_arg	arguments	is_methodr   ir   poskeywordargumentarg_metadatakwargkwarg_valuetop_level_modules                     r   _get_command_telemetryr      s    )-88=L"H "I //IDD// # #3 	AA%(%6%6%:%:,q//1fHg)<)<DDD(-- 	&%HJ""""$llnn # #{e~k'B'BCCC(55 	&%HJ"""",];;;&& 5+44d44 	!!! 	"Hf%% 	" M 	"
 ,HM++9----r   secondsc                 &    t          | dz            S )z"Convert seconds into microseconds.i@B )int)r   s    r   to_microsecondsr   %  s    w"###r   F)boundr   c                     d S r   r   r   r   s     r   gather_metricsr   -  	    
 Cr   c                     d S r   r   r   s     r   r   r   5  r   r   c                      st                               d           d |dt          dt          f fd}|S |t                     fd            }t	          j        t                    5  |j                            j                   t          j
                  |_        ddd           n# 1 swxY w Y   t          t          |          S )a  Function decorator to add telemetry tracking to commands.

    Parameters
    ----------
    func : callable
    The function to track for telemetry.

    name : str or None
    Overwrite the function name with a custom name that is used for telemetry tracking.

    Example
    -------
    >>> @st.gather_metrics
    ... def my_command(url):
    ...     return url

    >>> @st.gather_metrics(name="custom_name")
    ... def my_command(url):
    ...     return url
    zgather_metrics: name is empty	undefinedNr   rv   c                 &    t          |           S )Nr   )r   )r   r   s    r   wrapperzgather_metrics.<locals>.wrapperY  s     !   r   c                  $   t                      }ddlm} ddlm}  |d          }|d uo+|j        o$|j         ot          |j                  t          k     }d }d }|r|r	 t          g| R i |}|j        |j        vs|j        |j                 t          k     r|j                            |           |j                            |j        g           d|_        n3# t           $ r&}	t"                              d|	           Y d }	~	nd }	~	ww xY w	  | i |}
n6# |$ r.}	|r%|r#t'          t                      |z
            |_        |	d }	~	ww xY w	 |rd|_        n# |rd|_        w xY w|r%|r#t'          t                      |z
            |_        |
S )	Nr   )get_script_run_ctx)RerunExceptionT)suppress_warningz#Failed to collect command telemetry)exc_infoF)timerstreamlit.runtime.scriptrunnerr   ,streamlit.runtime.scriptrunner.script_runnerr   gather_usage_statscommand_tracking_deactivatedr   tracked_commandsr   r   r   tracked_commands_counterr   r   updater   _LOGGERdebugr   time)r   r   
exec_startr   r   ctxtracking_activateddeferred_exceptioncommand_telemetryexresultr   non_optional_funcs              r   wrapped_funcz$gather_metrics.<locals>.wrapped_funcd  so   WW
EEEEEEOOOOOO  $777 tO $&$44$ C())#$	 	 8</3 	R% 	RR$:%t%.2% % %6<% %!
 &*#2NNN34E4JK./ / (//0ABBB,335F5K4LMMM3700 R R R CbQQQQQQQQR	9&&777FF 	 	 	 " O&7 O)8:9M)N)N!&H	   9380  93808888 	K"3 	K%4UWWz5I%J%J"sC   !A;C 
D'DDD E E)EEE E&)r   warningr   r   r   r   AttributeError__dict__r   r   	signature__signature__r   )r   r   r   r  r  s   `   @r   r   r   =  sU   ,  7888|	q 	Q 	 	 	 	 	 	  !
7 7 7 7 7 7r 
	^	,	, J J 	$$%6%?@@@%,%67H%I%I"	J J J J J J J J J J J J J J J
 <   s   /9B44B8;B8commands	exec_time	prep_timeuncaught_exceptionc                    t                      }|j        j                            |            ||j        _        ||j        _        t          j        d          |j        _        t                      }t          j
        rit          j
                                        D ]J}t          j        |          st          j
        |         }|j        r| d}|                    |           K|j        j                            |           d t          D             }t!          t"          j                  |j        _        t!          t(          j                  |j        _        |j        j                            |           |r||j        _        |S )z2Create and return the full PageProfile ForwardMsg.zserver.headlessz:defaultc                 .    h | ]}|t           j        v |S r   )sysmodules).0attributions     r   	<setcomp>z.create_page_profile_message.<locals>.<setcomp>  s/       #+%% 	%%%r   )r   page_profiler  extendr  r  r   
get_optionheadlessset_config_optionskeysis_manually_set
is_defaultaddru   ry   r  platformr|   r   tznametimezoneattributionsr  )	r  r  r  r  msgconfig_optionsoption_nameconfig_optionr&  s	            r   create_page_profile_messager+    sr    ,,C$$X...!*C!*C & 12C D DC  #uuN 	,!16688 	, 	,K)+66 "2;?M' 7!,666{++++"">222 1  L cl++C #DK 0 0C!((666 A.@+Jr   r   );r   r   r|   r  r   r   rz   collections.abcr   	functoolsr   timeitr   r   typingr   r   r   r	   r
   r   r   r   r   typing_extensionsr   r   r   r   streamlit.loggerr   streamlit.proto.ForwardMsg_pb2r   streamlit.proto.PageProfile_pb2r   r   r   r   r   r   r   r$   ru   r   r   ry   r   r   objectr   r   r   r   floatr   r   r   r   r+  r   r   r   <module>r6     s=         				 



       ! ! ! ! ! !       ) ) ) ) ) ) U U U U U U U U U U U U U U U U U U U U U U # # # # # # " " " " " " " " ' ' ' ' ' ' 5 5 5 5 5 5 = = = = = = = =
*X

  # u " " " #% % $ $ $ 15#.(6$1 2&4&3!/DX:I  e   W! W! W!  W W Wr ) 2 C    *' ' ' ' ' ' ' ': 3    ()c 2 )s ) ) ) )	6 	hsm 	 	 	 	0.CH%0.690.0. 0. 0. 0.f$U $s $ $ $ $
 GCxS)*** 


    
 
  

 qc1f   
f! f! f!HQK f!51#q&AQSTAT;U f! f! f! f!Z )-	+ +7m++ + !	+
 + + + + + +r   