Ë
    EêñiÍ  ã                  óÀ  — U d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZmZmZmZmZ d dl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$ d dl%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;  ee<«      Z=de>d<   erd dl?m@Z@ dZAde>d<   eA› d�ZBde>d<   ddœ	 	 	 	 	 	 	 	 	 d/d„ZC ed¬«       G d„ d«      «       ZD ed¬«       G d „ d!«      «       ZEeEeDz  ZFd"e>d#<   e G d$„ d%eeGef   «      «       ZHd0d&„ZIe G d'„ d(«      «       ZJe G d)„ d*«      «       ZKd1d+„ZL	 	 	 	 	 	 	 	 d2d,„ZMe G d-„ d.e:«      «       ZNy)3é    )ÚannotationsN)ÚIteratorÚKeysViewÚMappingÚMutableMappingÚSequence)Údeepcopy)Ú	dataclassÚfieldÚreplace)ÚTYPE_CHECKINGÚAnyÚFinalÚ	TypeAliasÚcast)ÚconfigÚutil)Úget_dg_singleton_instance)ÚStreamlitAPIExceptionÚUnserializableSessionStateError)Ú
get_logger)ÚWidgetState)ÚWidgetStates)Úget_script_run_ctx)	ÚRegisterWidgetResultÚTÚValueFieldNameÚ
WidgetArgsÚWidgetCallbackÚWidgetMetadataÚis_array_value_field_nameÚis_element_idÚis_keyed_element_id)Úapply_presenter)ÚQueryParamsÚis_empty_url_valueÚparse_url_param)ÚCACHE_MEMORY_FAMILYÚ	CacheStatÚStatsProviderÚgroup_cache_statsr   Ú_LOGGER)ÚSessionManagerz$$STREAMLIT_INTERNAL_KEYÚSTREAMLIT_INTERNAL_KEY_PREFIXÚ_SCRIPT_RUN_WITHOUT_ERRORSÚSCRIPT_RUN_WITHOUT_ERRORS_KEYF)Úallow_duplicatesc               ó,  — | }|�|D �cg c]	  }||v sŒ|‘Œ }}|sSt        «       }g }|D ])  }||vsŒ|j                  |«       |j                  |«       Œ+ t        |«      t        |«      k  r|}|�|dkD  rt        |«      |kD  r|d| }|| k7  r|S dS c c}w )zõSanitize a URL-parsed string array by filtering invalid values,
    optionally removing duplicates, and enforcing a maximum length.

    Returns the sanitized list if any changes were made, or None if the
    input required no sanitization.
    Nr   )ÚsetÚaddÚappendÚlen)ÚparsedÚvalid_optionsÚ
max_lengthr1   ÚresultÚvÚseenÚdedupeds           úg/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/streamlit/runtime/state/session_state.pyÚ_sanitize_url_arrayr?   I   s¼   € ð €Fð Ð Ø#Ö:˜ q¨MÒ'9’!Ð:ˆÐ:ñ
 Ü›ˆØˆØò 	"ˆAØ˜Š}Ø—‘˜”Ø—‘˜qÕ!ð	"ô ˆw‹<œ#˜f›+Ò%ØˆFð Ð *¨q¢.´S¸³[À:Ò5MØ˜˜Ð$ˆà˜vÒ%ˆ6Ð/¨4Ð/ùò' ;s
   ‰	B“BT)Úfrozenc                  ó   — e Zd ZU dZded<   y)Ú
Serializedz:A widget value that's serialized to a protobuf. Immutable.ÚWidgetStateProtoÚvalueN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    r>   rB   rB   p   s   … áDàÔrL   rB   c                  ó   — e Zd ZU dZded<   y)ÚValuez0A widget value that's not serialized. Immutable.r   rD   NrE   rK   rL   r>   rN   rN   w   s
   … á:à„JrL   rN   r   ÚWStatec                  óÞ   — e Zd ZU dZ ee¬«      Zded<    ee¬«      Zded<   dd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zd d„Zd!d„Zd"d„Zd#d„Zd$d„Zd%d„Z	 	 	 	 	 	 d&d„Zd'd„Zd(d„Zd)d„Zy)*ÚWStatesz¿A mapping of widget IDs to values. Widget values can be stored in
    serialized or deserialized form, but when values are retrieved from the
    mapping, they'll always be deserialized.
    ©Údefault_factoryzdict[str, WState]Ústateszdict[str, WidgetMetadata[Any]]Úwidget_metadatac                ó,   — t        j                  | «      S ©N©r   Úrepr_©Úselfs    r>   Ú__repr__zWStates.__repr__‹   ó   € Ü�z‰z˜$ÓÐrL   c                ó´  — | j                   j                  |«      }|€t        |«      ‚t        |t        «      r|j
                  S | j                  j                  |«      }|€t        |«      ‚t        d|j
                  j                  d«      «      }|r|j
                  j                  |«      nd}t        |«      rt        d|«      j                  }n@|dk(  r t        j                  t        d|«      «      }n|dk(  rt        d|«      j                  }|j                  |«      }| j                  t!        ||¬«      «       t	        |«      | j                   |<   |S )	z¨Return the value of the widget with the given key.
        If the widget's value is currently stored in serialized form, it
        will be deserialized first.
        Nr   rD   r   Ú
json_valueÚstrÚstring_trigger_value)Ú
value_type)rT   ÚgetÚKeyErrorÚ
isinstancerN   rD   rU   r   Ú
WhichOneofÚ__getattribute__r!   ÚdataÚjsonÚloadsÚdeserializerÚset_widget_metadatar   )r[   ÚkÚwstateÚmetadataÚvalue_field_namerD   Údeserializeds          r>   Ú__getitem__zWStates.__getitem__Ž   sB  € ð
 —‘—‘ Ó#ˆØˆ>Ü˜1“+Ðä�fœeÔ$à—<‘<Ðð
 ×'Ñ'×+Ñ+¨AÓ.ˆØÐô ˜1“+ÐÜØØ�L‰L×#Ñ# GÓ,ó
Ðñ  ð �L‰L×)Ñ)Ð*:Ô;àð 	ô %Ð%5Ô6ä˜ Ó&×+Ñ+‰EØ Ò-Ü—J‘Jœt E¨5Ó1Ó2‰EØÐ!7Ò7ä˜ Ó&×+Ñ+ˆEà×,Ñ,¨UÓ3ˆð 	× Ñ ÜØØ+ôô	
ô ˜|Ó,ˆ�‰�A‰ØÐrL   c                ó"   — || j                   |<   y rW   ©rT   ©r[   rm   r;   s      r>   Ú__setitem__zWStates.__setitem__Ä   s   € Øˆ�‰�AŠrL   c                ó   — | j                   |= y rW   rt   ©r[   rm   s     r>   Ú__delitem__zWStates.__delitem__Ç   s   € Ø�K‰K˜‰NrL   c                ó,   — t        | j                  «      S rW   )r6   rT   rZ   s    r>   Ú__len__zWStates.__len__Ê   s   € Ü�4—;‘;ÓÐrL   c              #  ó8   K  — | j                   E d {  –—†  y 7 Œ­wrW   rt   rZ   s    r>   Ú__iter__zWStates.__iter__Í   s   è ø€ ð —;‘;×Òús   ‚’“c                ó,   — t        | j                  «      S rW   )r   rT   rZ   s    r>   ÚkeyszWStates.keysÓ   s   € Ü˜Ÿ™Ó$Ð$rL   c                ó6   — | D �ch c]	  }|| |   f’Œ c}S c c}w rW   rK   rx   s     r>   ÚitemszWStates.itemsÖ   s   € Ø&*Ö+ ��D˜‘G’Ò+Ð+ùÒ+s   …c                ó2   — | D �ch c]  }| |   ’Œ	 c}S c c}w rW   rK   )r[   Úwids     r>   ÚvalueszWStates.valuesÙ   s   € Ø%)Ö*˜c��S“	Ò*Ð*ùÒ*s   …c                ó˜   — | j                   j                  |j                   «       | j                  j                  |j                  «       y)z™Copy all widget values and metadata from 'other' into this mapping,
        overwriting any data in this mapping that's also present in 'other'.
        N)rT   ÚupdaterU   ©r[   Úothers     r>   r†   zWStates.updateÜ   s4   € ð 	�‰×Ñ˜5Ÿ<™<Ô(Ø×Ñ×#Ñ# E×$9Ñ$9Õ:rL   c                ó4   — t        |«      | |j                  <   y)zGSet a widget's serialized value, overwriting any existing value it has.N)rB   Úid)r[   Úwidget_states     r>   Úset_widget_from_protozWStates.set_widget_from_protoã   s   € ä *¨<Ó 8ˆˆ\�_‰_ÒrL   c                ó    — t        |«      | |<   y)zISet a widget's deserialized value, overwriting any existing value it has.N)rN   ru   s      r>   Úset_from_valuezWStates.set_from_valueç   s   € ä˜“(ˆˆQŠrL   c                ó6   — || j                   |j                  <   y)zBSet a widget's metadata, overwriting any existing metadata it has.N)rU   rŠ   )r[   Úwidget_metas     r>   rl   zWStates.set_widget_metadataë   s   € à/:ˆ×Ñ˜[Ÿ^™^Ò,rL   c           	     óÂ   — | j                   j                  «       D ��ci c].  \  }}t        | j                  j	                  |«      ||«      s||“Œ0 c}}| _         yc c}}w )z&Remove widget state for stale widgets.N)rT   r�   Ú_is_stale_widgetrU   rc   )r[   Úactive_widget_idsÚfragment_ids_this_runrm   r;   s        r>   Úremove_stale_widgetszWStates.remove_stale_widgetsï   sZ   € ð Ÿ™×)Ñ)Ó+÷
á��1Ü#Ø×$Ñ$×(Ñ(¨Ó+Ø!Ø%ôð ˆq‰Dó
ˆ�ùó 
s   ž3Ac                óÈ  — | j                   j                  |«      }|€yt        |t        «      r|j                  S | j
                  j                  |«      }|€yt        «       }||_        |j                  }|j                  |j                  «      }t        |«      r)t        ||«      }|j                  j                  |«       |S |dv r"t        ||t        j                   |«      «       |S |dk(  r|j"                  j%                  |«       |S |dk(  r|j&                  j%                  |«       |S |dk(  r|j(                  j%                  |«       |S |�|�t        |||«       |S )zÎGet the serialized value of the widget with the given id.

        If the widget doesn't exist, return None. If the widget exists but
        is not in serialized form, it will be serialized first.
        N>   r_   Újson_trigger_valueÚfile_uploader_state_valuera   Úchat_input_value)rT   rc   re   rB   rD   rU   rC   rŠ   rb   Ú
serializerr!   Úgetattrrh   ÚextendÚsetattrri   Údumpsr˜   ÚCopyFromra   r™   )r[   rm   Úitemro   Úwidgetr   Ú
serializedÚarrs           r>   Úget_serializedzWStates.get_serializedÿ   se  € ð �{‰{�‰˜qÓ!ˆØˆ<àä�dœJÔ'à—:‘:Ðð ×'Ñ'×+Ñ+¨AÓ.ˆØÐàä!Ó#ˆØˆŒ	à×#Ñ#ˆØ×(Ñ(¨¯©Ó4ˆ
ä$ UÔ+Ü˜& %Ó(ˆCØ�H‰H�O‰O˜JÔ'ð  ˆð Ð:Ñ:Ü�F˜E¤4§:¡:¨jÓ#9Ô:ð ˆð Ð1Ò1Ø×,Ñ,×5Ñ5°jÔAð ˆð Ð,Ò,Ø×'Ñ'×0Ñ0°Ô<ð ˆð Ð(Ò(Ø×#Ñ#×,Ñ,¨ZÔ8ð ˆð Ð :Ð#9ô
 �F˜E :Ô.àˆrL   c                óf   — | j                   D �cg c]  }| j                  |«      x}�|‘Œ c}S c c}w ©zGReturn a list of serialized widget values for each widget with a value.)rT   r¤   )r[   Ú	widget_idÚss      r>   Úas_widget_stateszWStates.as_widget_states/  s>   € ð "Ÿ[™[ö
àØ×(Ñ(¨Ó3Ð3�Ð@ò ò
ð 	
ùò 
s   �.c                ó(  — | j                   j                  |«      }|€t        d|› d�«      ‚|j                  }|€y|j                  xs d}|j
                  xs i }t        «       }|r#|j                  �d|_         ||i |¤Ž d|_        y ||i |¤Ž y)z¿Call the given widget's callback and return the callback's
        return value. If the widget has no callback, return None.

        If the widget doesn't exist, raise an Exception.
        NzWidget z not found.rK   TF)	rU   rc   ÚRuntimeErrorÚcallbackÚcallback_argsÚcallback_kwargsr   Úfragment_idÚin_fragment_callback)r[   r§   ro   r¬   ÚargsÚkwargsÚctxs          r>   Úcall_callbackzWStates.call_callback7  s¨   € ð ×'Ñ'×+Ñ+¨IÓ6ˆàÐÜ ¨¨°;Ð?Ó@Ð@à×$Ñ$ˆØÐØà×%Ñ%Ò+¨ˆØ×)Ñ)Ò/¨Rˆä Ó"ˆÙ�8×'Ñ'Ð3Ø'+ˆCÔ$Ù�dÐ%˜fÒ%Ø',ˆCÕ$á�dÐ%˜fÓ%rL   N©Úreturnr`   )rm   r`   r¶   r   )rm   r`   r;   rO   r¶   ÚNone)rm   r`   r¶   r·   ©r¶   Úint)r¶   zIterator[str])r¶   zKeysView[str])r¶   zset[tuple[str, Any]])r¶   zset[Any])rˆ   rQ   r¶   r·   )r‹   rC   r¶   r·   )rm   r`   r;   r   r¶   r·   )r�   úWidgetMetadata[Any]r¶   r·   )r“   úset[str]r”   úlist[str] | Noner¶   r·   )rm   r`   r¶   zWidgetStateProto | None©r¶   zlist[WidgetStateProto])r§   r`   r¶   r·   )rF   rG   rH   rI   r   ÚdictrT   rJ   rU   r\   rr   rv   ry   r{   r}   r   r�   r„   r†   rŒ   rŽ   rl   r•   r¤   r©   r´   rK   rL   r>   rQ   rQ   �   sœ   … ññ
 !&°dÔ ;€FÐÓ;Ù6;ÈDÔ6Q€OÐ3ÓQó ó4ólóó óó%ó,ó+ó;ó9óó;ð
à#ð
ð  0ð
ð 
ó	
ó .ó`
ô&rL   rQ   c                ó   — d| › d�S )Nzst.session_state has no key "zƒ". Did you forget to initialize it? More info: https://docs.streamlit.io/develop/concepts/architecture/session-state#initializationrK   ©Úkeys    r>   Ú_missing_key_error_messagerÂ   R  s   € à
'¨ uð -jð 	kðrL   c                  ó¦   — e Zd ZU dZ ee¬«      Zded<    ee¬«      Zded<   dd„Z	dd„Z
dd„Zedd	„«       Zdd
„Zddd„Zdd„Zdd„Zdd„Zdd„Zy)ÚKeyIdMappera#  A mapping of user-provided keys to element IDs.
    It also maps element IDs to user-provided keys so that this reverse mapping
    does not have to be computed ad-hoc.
    All built-in dict-operations such as setting and deleting expect the key as the
    argument, not the element ID.
    rR   údict[str, str]Ú_key_id_mappingÚ_id_key_mappingc                ó   — || j                   v S rW   )rÆ   ©r[   rÁ   s     r>   Ú__contains__zKeyIdMapper.__contains__e  s   € Ø�d×*Ñ*Ð*Ð*rL   c                ó@   — || j                   |<   || j                  |<   y rW   ©rÆ   rÇ   ©r[   rÁ   r§   s      r>   rv   zKeyIdMapper.__setitem__h  s"   € Ø$-ˆ×Ñ˜SÑ!Ø*-ˆ×Ñ˜YÒ'rL   c                ó&   — | j                  |«       y rW   )ÚdeleterÉ   s     r>   ry   zKeyIdMapper.__delitem__l  s   € Ø�‰�CÕrL   c                ó   — | j                   S rW   ©rÇ   rZ   s    r>   Úid_key_mappingzKeyIdMapper.id_key_mappingo  s   € à×#Ñ#Ð#rL   c                óp   — || _         |j                  «       D ��ci c]  \  }}||“Œ
 c}}| _        y c c}}w rW   )rÆ   r�   rÇ   )r[   Úkey_id_mappingrm   r;   s       r>   Úset_key_id_mappingzKeyIdMapper.set_key_id_mappings  s1   € Ø-ˆÔØ1?×1EÑ1EÓ1G×H©¨¨A  1¡ÓHˆÕùÓHs   ›2Nc                ó:   — | j                   j                  ||«      S rW   )rÆ   rc   )r[   rÁ   Údefaults      r>   Úget_id_from_keyzKeyIdMapper.get_id_from_keyw  s   € Ø×#Ñ#×'Ñ'¨¨WÓ5Ð5rL   c                ó    — | j                   |   S rW   rÑ   ©r[   r§   s     r>   Úget_key_from_idzKeyIdMapper.get_key_from_idz  s   € Ø×#Ñ# IÑ.Ð.rL   c                ó˜   — | j                   j                  |j                   «       | j                  j                  |j                  «       y rW   )rÆ   r†   rÇ   r‡   s     r>   r†   zKeyIdMapper.update}  s6   € Ø×Ñ×#Ñ# E×$9Ñ$9Ô:Ø×Ñ×#Ñ# E×$9Ñ$9Õ:rL   c                ól   — | j                   j                  «        | j                  j                  «        y rW   )rÆ   ÚclearrÇ   rZ   s    r>   rÞ   zKeyIdMapper.clear�  s&   € Ø×Ñ×"Ñ"Ô$Ø×Ñ×"Ñ"Õ$rL   c                óV   — | j                   |   }| j                   |= | j                  |= y rW   rÌ   rÍ   s      r>   rÏ   zKeyIdMapper.delete…  s.   € Ø×(Ñ(¨Ñ-ˆ	Ø× Ñ  Ð%Ø× Ñ  Ñ+rL   ©rÁ   r`   r¶   Úbool)rÁ   r`   r§   r   r¶   r·   ©rÁ   r`   r¶   r·   )r¶   rÅ   )rÔ   rÅ   r¶   r·   rW   )rÁ   r`   r×   ú
str | Noner¶   rã   )r§   r`   r¶   r`   )rˆ   rÄ   r¶   r·   ©r¶   r·   )rF   rG   rH   rI   r   r¾   rÆ   rJ   rÇ   rÊ   rv   ry   ÚpropertyrÒ   rÕ   rØ   rÛ   r†   rÞ   rÏ   rK   rL   r>   rÄ   rÄ   Y  si   … ññ ',¸DÔ&A€O�^ÓAÙ&+¸DÔ&A€O�^ÓAó+ó.óð ò$ó ð$óIô6ó/ó;ó%ô,rL   rÄ   c                  óv  — e Zd ZU dZ ee¬«      Zded<    ee¬«      Zded<    ee	¬«      Z
ded<    ee¬«      Zded	<    ee¬«      Zd
ed<    ee¬«      Zded<   d4d„Zd5d„Zd5d„Zed6d„«       Zd7d„Zd8d„Zd9d„Zd:d„Zd;d„Zd<d„Zd=d„Zd>d„Zd?d„Zd@d„ZdAd„Z d5d„Z!	 	 	 	 	 	 	 	 	 	 dBd„Z"	 	 	 	 	 	 	 	 	 	 dCd„Z#	 	 	 	 	 	 	 	 	 	 dCd „Z$dDd!„Z%dEd"„Z&d5d#„Z'dFd$„Z(dGd%„Z)dHd&„Z*dId'„Z+dJd(„Z,dKd)„Z-	 	 	 	 	 	 dLd*„Z.	 	 	 	 	 	 	 	 dMd+„Z/	 	 	 	 	 	 	 	 	 	 dNd,„Z0dOd-„Z1	 	 	 	 	 	 	 	 	 	 dPd.„Z2dQd/„Z3	 dR	 	 	 dSd1„Z4d5d2„Z5d5d3„Z6y0)TÚSessionStatea  SessionState allows users to store values that persist between app
    reruns.

    Example
    -------
    >>> if "num_script_runs" not in st.session_state:
    ...     st.session_state.num_script_runs = 0
    >>> st.session_state.num_script_runs += 1
    >>> st.write(st.session_state.num_script_runs)  # writes 1

    The next time your script runs, the value of
    st.session_state.num_script_runs will be preserved.
    >>> st.session_state.num_script_runs += 1
    >>> st.write(st.session_state.num_script_runs)  # writes 2
    rR   údict[str, Any]Ú
_old_stateÚ_new_session_staterQ   Ú_new_widget_staterÄ   Ú_key_id_mapperr%   Úquery_paramsr»   Ú_query_param_bound_widget_idsc                ó,   — t        j                  | «      S rW   rX   rZ   s    r>   r\   zSessionState.__repr__´  r]   rL   c                ó¾   — | D ]  }	 | |   | j                   |<   Œ | j                  j                  «        | j                  j                  «        y# t        $ r Y ŒXw xY w)z¤Copy all current session_state and widget_state values into our
        _old_state dict, and then clear our current session_state and
        widget_state.
        N)ré   rd   rê   rÞ   rë   )r[   Ú
key_or_wids     r>   Ú_compact_statezSessionState._compact_state¸  sg   € ð
 ò 	ˆJðØ.2°:Ñ.>�—‘ 
Ò+ð	ð 	×Ñ×%Ñ%Ô'Ø×Ñ×$Ñ$Õ&øô ò ñ ðús   ‡AÁ	AÁAc                ó  — | j                   j                  «        | j                  j                  «        | j                  j                  «        | j                  j                  «        | j
                  j                  «        y)z;Reset self completely, clearing all current and old values.N)ré   rÞ   rê   rë   rì   rî   rZ   s    r>   rÞ   zSessionState.clearÇ  sZ   € à�‰×ÑÔØ×Ñ×%Ñ%Ô'Ø×Ñ×$Ñ$Ô&Ø×Ñ×!Ñ!Ô#Ø×*Ñ*×0Ñ0Õ2rL   c                ó  — | j                   j                  }i }| j                  «       D ]G  }t        |«      st	        |«      s	| |   ||<   Œ"t        |«      sŒ.t	        |«      rŒ:	 ||   }| |   ||<   ŒI |S # t        $ r Y ŒWw xY w)zVThe combined session and widget state, excluding keyless widgets and internal widgets.)rì   rÒ   Ú_keysr"   Ú_is_internal_keyr#   rd   )r[   Úwid_key_mapÚstaterm   rÁ   s        r>   Úfiltered_statezSessionState.filtered_stateÏ  s–   € ð ×)Ñ)×8Ñ8ˆà "ˆð —‘“ò 	ˆAÜ  Ô#Ô,<¸QÔ,?Ø ™7��a’Ü$ QÕ'Ô0@ÀÕ0CðØ% a™.�Cà!% a¡�E˜#’Jð	ð ˆøô  ò ñ ðús   Á$A5Á5	BÂ Bc                ó  — | j                   D �ch c]  }| j                  |«      ’Œ }}t        | j                  j	                  «       «      }| j
                  D �ch c]  }| j                  |«      ’Œ }}||z  |z  S c c}w c c}w )z÷All keys active in Session State, with widget keys converted
        to widget ids when one is known. (This includes autogenerated keys
        for widgets that don't have user_keys defined, and which aren't
        exposed to user code).
        )ré   Ú_get_widget_idr3   rë   r   rê   )r[   rm   Úold_keysÚnew_widget_keysÚnew_session_state_keyss        r>   rõ   zSessionState._keysê  s‰   € ð 59·O±OÖD¨q�D×'Ñ'¨Õ*ÐDˆÐDÜ˜d×4Ñ4×9Ñ9Ó;Ó<ˆà,0×,CÑ,Cö"
Ø'(ˆD×Ñ Õ"ð"
Ðð "
ð ˜/Ñ)Ð,BÑBÐBùò Eùò"
s   �A<ÁBc                ó   — || j                   v S )zCTrue if a value with the given key is in the current session state.©rê   ©r[   Úuser_keys     r>   Úis_new_state_valuezSessionState.is_new_state_value÷  s   € à˜4×2Ñ2Ð2Ð2rL   c                ó"   — || j                   |<   y)z€Reset a new session state value to a given value
        without triggering the "state value cannot be modified" error.
        Nr   )r[   r  rD   s      r>   Úreset_state_valuezSessionState.reset_state_valueû  s   € ð -2ˆ×Ñ Ò)rL   c                ó4   — t        | j                  «       «      S )zrReturn an iterator over the keys of the SessionState.
        This is a shortcut for `iter(self.keys())`.
        )Úiterrõ   rZ   s    r>   r}   zSessionState.__iter__  s   € ô �D—J‘J“LÓ!Ð!rL   c                ó4   — t        | j                  «       «      S )z+Return the number of items in SessionState.)r6   rõ   rZ   s    r>   r{   zSessionState.__len__  s   € ä�4—:‘:“<Ó Ð rL   c                óö   — | j                   j                  }| j                  |«      }||v r
||k(  r||   }	 | j                  ||«      }|�t	        | ||«      S |S # t
        $ r t        t        |«      «      ‚w xY wrW   )rì   rÒ   rû   Ú_getitemr$   rd   rÂ   )r[   rÁ   r÷   r§   Ú
base_values        r>   rr   zSessionState.__getitem__  s˜   € Ø×)Ñ)×8Ñ8ˆØ×'Ñ'¨Ó,ˆ	à˜Ñ#¨	°SÒ(8à˜iÑ(ˆCð	<ØŸ™ y°#Ó6ˆJð Ð(ô    i°Ó<ðð  ðøô
 ò 	<ÜÔ5°cÓ:Ó;Ð;ð	<ús   · A ÁA ÁA8c                ó>  — |€|€t        d«      ‚|�	 | j                  |   S |�	 | j                  |   S |�	 | j                  |   S |�	 | j                  |   S t        ‚# t        $ r Y ŒGw xY w# t        $ r Y ŒDw xY w# t        $ r Y ŒAw xY w# t        $ r Y t        ‚w xY w)zåGet the value of an entry in Session State, using either the
        user-provided key or a widget id as appropriate for the internal dict
        being accessed.

        At least one of the arguments must have a value.
        zEuser_key and widget_id cannot both be None. This should never happen.)Ú
ValueErrorrê   rd   rë   ré   ©r[   r§   r  s      r>   r
  zSessionState._getitem  sî   € ð Ð 	Ð 1ÜØWóð ð ÐðØ×.Ñ.¨xÑ8Ð8ð Ð ðØ×-Ñ-¨iÑ8Ð8ð Ð ðØ—‘ yÑ1Ð1ð ÐðØ—‘ xÑ0Ð0ô
 ˆøô; ò Ùðûô ò Ùðûô ò Ùðûô ò Øô ˆð	úsE   “A ¥A- ·A< Á	B Á	A*Á)A*Á-	A9Á8A9Á<	BÂBÂ	BÂBc                óÖ   — t        «       }|�N| j                  j                  |d«      }|j                  }|j                  }||v s||v rt        d|› d|› d�«      ‚|| j                  |<   y)zåSet the value of the session_state entry with the given user_key.

        If the key corresponds to a widget or form that's been instantiated
        during the current script run, raise a StreamlitAPIException instead.
        Nz`st.session_state.z0` cannot be modified after the widget with key `z` is instantiated.)r   rì   rØ   Úwidget_ids_this_runÚform_ids_this_runr   rê   )r[   r  rD   r³   r§   Ú
widget_idsÚform_idss          r>   rv   zSessionState.__setitem__J  s†   € ô !Ó"ˆàˆ?Ø×+Ñ+×;Ñ;¸HÀdÓKˆIØ×0Ñ0ˆJØ×,Ñ,ˆHà˜JÑ&¨(°hÑ*>Ü+Ø(¨¨
ð 3"Ø"* Ð+=ð?óð ð
 -2ˆ×Ñ Ò)rL   c                óŠ  — | j                  |«      }|| v s|| v st        t        |«      «      ‚|| j                  v r| j                  |= || j                  v r| j                  |= || j
                  v r| j
                  j                  |«       || j                  v r| j                  |= || j                  v r| j                  |= y y rW   )rû   rd   rÂ   rê   ré   rì   rÏ   rë   rÍ   s      r>   ry   zSessionState.__delitem___  sÀ   € Ø×'Ñ'¨Ó,ˆ	à�t‘˜y¨DÑ0ÜÔ5°cÓ:Ó;Ð;à�$×)Ñ)Ñ)Ø×'Ñ'¨Ð,à�$—/‘/Ñ!Ø—‘ Ð$à�$×%Ñ%Ñ%Ø×Ñ×&Ñ& sÔ+à˜×.Ñ.Ñ.Ø×&Ñ& yÐ1à˜Ÿ™Ñ'Ø—‘ 	Ñ*ð (rL   c                ó\   — |j                   D ]  }| j                  j                  |«       Œ y)zHSet the value of all widgets represented in the given WidgetStatesProto.N)Úwidgetsrë   rŒ   )r[   Úwidget_statesrø   s      r>   Úset_widgets_from_protoz#SessionState.set_widgets_from_protot  s-   € à"×*Ñ*ò 	@ˆEØ×"Ñ"×8Ñ8¸Õ?ñ	@rL   c                ó†   — | j                  «        | j                  «        | j                  |«       | j                  «        y)z¾Called by ScriptRunner before its script re-runs.

        Update widget data and call callbacks on widgets whose value changed
        between the previous and current script runs.
        N)Ú_reset_triggersrò   r  Ú_call_callbacks)r[   Úlatest_widget_statess     r>   Úon_script_will_rerunz!SessionState.on_script_will_reruny  s7   € ð 	×ÑÔØ×ÑÔØ×#Ñ#Ð$8Ô9Ø×ÑÕrL   c                óú  — ddl m} | j                  D �cg c]I  }| j                  |«      r6| j                  j                  j                  |«      x}	 �|j                  �|‘ŒK }}|D ]  }	 | j                  j                  |«       Œ  t        | j                  j                  j                  «       «      }|D ]Ž  }| j                  j                  j                  |«      }|r|j                  €Œ7|j                  xs d}|j                   xs i }| j#                  ||||«       |j$                  dk(  sŒ{| j'                  ||||«       Œ� yc c}w # |$ r' t        «       j                  j                  d«       Y �Œw xY w)zFCall callbacks for widgets whose value changed or whose trigger fired.r   ©ÚRerunExceptionNú0Calling st.rerun() within a callback is a no-op.rK   r_   )Ústreamlit.runtime.scriptrunnerr   rë   Ú_widget_changedrU   rc   r¬   r´   r   Úmain_dgÚwarningÚlistrT   r   Ú	callbacksr­   r®   Ú_dispatch_trigger_callbacksrb   Ú_dispatch_json_change_callbacks)r[   r   rƒ   ro   Ú&changed_widget_ids_for_single_callbackÚwidget_ids_to_processr±   r²   s           r>   r  zSessionState._call_callbacks…  s€  € åAð
 ×-Ñ-ö2
àØ×#Ñ# CÔ(Ø!×3Ñ3×CÑC×GÑGÈÓLÐL�Øðà×!Ñ!Ð-ò ð2
Ð.ð 2
ð :ò 	ˆCðØ×&Ñ&×4Ñ4°SÕ9ð	ô !% T×%;Ñ%;×%BÑ%B×%GÑ%GÓ%IÓ JÐà(ò 	RˆCØ×-Ñ-×=Ñ=×AÑAÀ#ÓFˆHÙ˜x×1Ñ1Ð9Øà×)Ñ)Ò/¨RˆDØ×-Ñ-Ò3°ˆFð ×,Ñ,¨S°(¸DÀ&ÔIð ×"Ñ" lÓ2Ø×4Ñ4°S¸(ÀDÈ&ÕQñ	Rùò)2
øð "ò Ü)Ó+×3Ñ3×;Ñ;ØF÷ðús   •AE	Á+EÅ(E:Å9E:c                óR  — ddl m} t        «       }|r$|j                  �d|_        	  ||i |¤Ž d|_        y	  ||i |¤Ž y# |$ r& t        «       j                  j                  d«       Y Œ<w xY w# d|_        w xY w# |$ r& t        «       j                  j                  d«       Y yw xY w)a  Execute a widget callback with fragment-aware context.

        If the widget belongs to a fragment, temporarily marks the current
        script context as being inside a fragment callback to adapt rerun
        semantics. Attempts to call ``st.rerun()`` inside a widget callback are
        converted to a user-visible warning and treated as a no-op.

        Parameters
        ----------
        callback_fn : WidgetCallback
            The user-provided callback to execute.
        cb_metadata : WidgetMetadata[Any]
            Metadata of the widget associated with the callback.
        cb_args : WidgetArgs
            Positional arguments passed to the callback.
        cb_kwargs : dict[str, Any]
            Keyword arguments passed to the callback.
        r   r  NTr!  F)r"  r   r   r¯   r°   r   r$  r%  )r[   Úcallback_fnÚcb_metadataÚcb_argsÚ	cb_kwargsr   r³   s          r>   Ú_execute_widget_callbackz%SessionState._execute_widget_callback­  s´   € õ2 	Bä Ó"ˆÙ�;×*Ñ*Ð6Ø'+ˆCÔ$ð1Ù˜WÐ2¨	Ò2ð ,1�Õ(ðÙ˜WÐ2¨	Ó2øð "ò Ü)Ó+×3Ñ3×;Ñ;ØFöðûð
 ,1�Õ(ûð "ò Ü)Ó+×3Ñ3×;Ñ;ØFöðús4   §A ¸A; Á(A,Á)A/ Á+A,Á,A/ Á/	A8Á;(B&Â%B&c                óÎ  — | j                   j                  |«      }|sy|j                  rª	 | j                   |   }t	        |t
        «      r|}n|g}|D ]~  }t	        |t        «      sŒt        d|«      j                  d«      }	t	        |	t        «      sŒ@|j                  sŒM|j                  j                  |	«      }
|
€Œk| j                  |
|||«       Œ€ yy# t        $ r d}Y Œ¨w xY w)a  Dispatch trigger-style callbacks for a widget.

        Handles the JSON trigger aggregator. The JSON payload may be a single
        event dict or a list of event dicts; each event must contain an
        ``"event"`` field that maps to the corresponding callback name in
        ``metadata.callbacks``.

        Parameters
        ----------
        wid : str
            The widget ID.
        metadata : WidgetMetadata[Any]
            Metadata for the widget, including registered callbacks.
        args : WidgetArgs
            Positional arguments forwarded to the callback.
        kwargs : dict[str, Any]
            Keyword arguments forwarded to the callback.

        Examples
        --------
        A component with a "submit" callback:

        >>> metadata.callbacks = {"submit": on_submit}

        The frontend can send a single event payload:

        >>> {"event": "submit", "value": "payload"}

        Or a list of event payloads to be processed in order:

        >>> [{"event": "edit", ...}, {"event": "submit", ...}]
        NzMapping[str, object]Úevent)rë   r¤   r—   rd   re   r&  r¾   r   rc   r`   r'  r1  )r[   rƒ   ro   r±   r²   Úwidget_proto_staterq   ÚpayloadsÚpayloadÚ
event_nameÚcbs              r>   r(  z(SessionState._dispatch_trigger_callbacksÛ  sé   € ðN "×3Ñ3×BÑBÀ3ÓGÐÙ!Øð ×0Ò0ð$Ø#×5Ñ5°cÑ:�ô
 ˜,¬Ô-Ø'‘à(˜>�à#ò V�Ü˜g¤tÕ,Ü!%Ð&<¸gÓ!F×!JÑ!JÈ7Ó!S�JÜ! *¬cÕ2°x×7IÓ7IØ%×/Ñ/×3Ñ3°JÓ?˜Ø™>Ø ×9Ñ9¸"¸hÈÈfÕUñVð 1øô ò $Ø#’ð$ús   ¬C ÃC$Ã#C$c                ó  — |j                   sy	 | j                  j                  |«      }| j                  j                  |«      }dd„} ||«      } ||«      }	|s|	rŽ|j                  «       |	j                  «       z  }
|
D �ch c](  }|	j                  |«      |j                  |«      k7  sŒ'|’Œ* }}|D ]4  }|j                   j                  |«      }|€Œ!| j                  ||||«       Œ6 yy# t        $ r d}Y ŒÏw xY wc c}w )a8  Dispatch change callbacks for JSON-valued widgets.

        Computes a shallow diff between the new and old JSON maps and invokes
        callbacks for keys that changed or were added/removed.

        Parameters
        ----------
        wid : str
            The widget ID.
        metadata : WidgetMetadata[Any]
            Metadata for the widget, including registered callbacks.
        args : WidgetArgs
            Positional arguments forwarded to the callback.
        kwargs : dict[str, Any]
            Keyword arguments forwarded to the callback.
        Nc                óæ   — t        | t        «      si S t        d| «      } t        | j	                  «       «      dhk(  r,| j                  d«      }t        |t        «      rt        |«      S t        | «      S )Nrè   rD   )re   r¾   r   r3   r   rc   )ÚobjrD   s     r>   Úunwrapz<SessionState._dispatch_json_change_callbacks.<locals>.unwrap;  s^   € Ü˜c¤4Ô(Ø�	äÐ'¨Ó-ˆCÜ�3—8‘8“:‹ 7 )Ò+ØŸ™ Ó(�Ü˜e¤TÔ*Ü ›;Ð&ä˜“9ÐrL   )r;  Úobjectr¶   zdict[str, object])r'  rë   rc   rd   ré   r   r1  )r[   rƒ   ro   r±   r²   Únew_valÚold_valr<  Únew_mapÚold_mapÚall_keysrm   Úchanged_keysrÁ   r8  s                  r>   r)  z,SessionState._dispatch_json_change_callbacks  s   € ð. ×!Ò!Øð	Ø×,Ñ,×0Ñ0°Ó5ˆGð —/‘/×%Ñ% cÓ*ˆó
	ñ ˜“/ˆÙ˜“/ˆá‘gØ—|‘|“~¨¯©«Ñ6ˆHØ'/ÖT !°7·;±;¸q³>ÀWÇ[Á[ÐQRÃ^Ó3SšAÐTˆLÐTà#ò N�Ø×'Ñ'×+Ñ+¨CÓ0�Ø‘>Ø×1Ñ1°"°hÀÀfÕMñNð	 øô' ò 	ØŠGð	üò* Us   �C, Â(C=Â+C=Ã,C:Ã9C:c                ó|   — | j                   j                  |«      }| j                  j                  |«      }||k7  }|S )zuTrue if the given widget's value changed between the previous
        script run and the current script run.
        )rë   rc   ré   )r[   r§   Ú	new_valueÚ	old_valueÚchangeds        r>   r#  zSessionState._widget_changedS  s=   € ð ×*Ñ*×.Ñ.¨yÓ9ˆ	Ø—O‘O×'Ñ'¨	Ó2ˆ	Ø! YÑ.ˆØˆrL   c                óF   — | j                  «        | j                  |«       y)a”  Called by ScriptRunner after its script finishes running.
         Updates widgets to prepare for the next script run.

        Parameters
        ----------
        widget_ids_this_run: set[str]
            The IDs of the widgets that were accessed during the script
            run. Any widget state whose ID does *not* appear in this set
            is considered "stale" and will be removed.
        N)r  Ú_remove_stale_widgets)r[   r  s     r>   Úon_script_finishedzSessionState.on_script_finished\  s   € ð 	×ÑÔØ×"Ñ"Ð#6Õ7rL   c                ó   — | j                   D ]y  }| j                   j                  j                  |«      }|€Œ+|j                  dk(  rt	        d«      | j                   |<   ŒS|j                  dv sŒbt	        d«      | j                   |<   Œ{ | j
                  D ]g  }| j                   j                  j                  |«      }|€Œ+|j                  dk(  rd| j
                  |<   ŒJ|j                  dv sŒYd| j
                  |<   Œi y)z8Set all trigger values in our state dictionary to False.NÚtrigger_valueF>   r™   r—   ra   )rë   rU   rc   rb   rN   ré   )r[   Ústate_idro   s      r>   r  zSessionState._reset_triggersj  sü   € à×.Ñ.ò 
	CˆHØ×-Ñ-×=Ñ=×AÑAÀ(ÓKˆHØÑ#Ø×&Ñ&¨/Ò9Ü7<¸U³|�D×*Ñ*¨8Ò4Ø×(Ñ(ð -ò ô
 8=¸T³{�D×*Ñ*¨8Ò4ð
	Cð Ÿ™ò 
	5ˆHØ×-Ñ-×=Ñ=×AÑAÀ(ÓKˆHØÑ#Ø×&Ñ&¨/Ò9Ø05�D—O‘O HÒ-Ø×(Ñ(ð -ò ð
 15�D—O‘O HÒ-ñ
	5rL   c           	     óæ  — t        «       }|€y| j                  j                  }i }| j                  D ]x  }t	        |«      sŒ|| j
                  v sŒ||v sŒ#t        | j                  j                  j                  |«      ||j                  «      sŒ^||   }	 | j                  ||«      ||<   Œz | j                  j                  ||j                  «       | j                  j                  «       D ��ci c]M  \  }}t	        |«      r:t        | j                  j                  j                  |«      ||j                  «      s||“ŒO c}}| _        | j                  j                  |«       | j                   j#                  ||j                  | j                  j                  «       | j
                  j%                  |j'                  «       «       y# t        $ r | j                  |   ||<   Y �Œ·w xY wc c}}w )zHRemove widget state for widgets whose ids aren't in `active_widget_ids`.N)r   rì   rÒ   ré   r"   rî   r’   rë   rU   rc   r”   r
  rd   r•   r�   r†   rí   Úremove_stale_bindingsÚintersection_updater   )	r[   r“   r³   r÷   Úbound_preservedrÁ   r  rm   r;   s	            r>   rI  z"SessionState._remove_stale_widgets„  sÊ  € ä Ó"ˆØˆ;Øð ×)Ñ)×8Ñ8ˆØ*,ˆØ—?‘?ò 	EˆCä˜cÕ"Ø˜4×=Ñ=Ò=Ø˜;Ò&Ü$Ø×*Ñ*×:Ñ:×>Ñ>¸sÓCØ%Ø×-Ñ-õð ' sÑ+�ðEØ04·±¸cÀ8Ó0L�O HÒ-ð	Eð" 	×Ñ×3Ñ3ØØ×%Ñ%ô	
ð Ÿ™×-Ñ-Ó/÷
á��1ä! !Ô$Ü'Ø×*Ñ*×:Ñ:×>Ñ>¸qÓAØ%Ø×-Ñ-ôð	 ˆq‰Dó
ˆŒð 	�‰×Ñ˜Ô/ð 	×Ñ×/Ñ/ØØ×%Ñ%Ø×"Ñ"×2Ñ2ô	
ð 	×*Ñ*×>Ñ>¸{×?OÑ?OÓ?QÕRøôO  ò EØ04·±ÀÑ0D�O HÔ-ðEüó
s   ÂGÃ0AG-ÇG*Ç)G*c                óL   — | j                   j                  j                  |«      S )zBReturn the metadata for a widget id from the current widget state.)rë   rU   rc   rÚ   s     r>   Ú_get_widget_metadataz!SessionState._get_widget_metadataÈ  s   € à×%Ñ%×5Ñ5×9Ñ9¸)ÓDÐDrL   c                óN   — |j                   }|| j                  j                  |<   y)zSet a widget's metadata.N)rŠ   rë   rU   )r[   rU   r§   s      r>   Ú_set_widget_metadataz!SessionState._set_widget_metadataÌ  s#   € à#×&Ñ&ˆ	Ø<Kˆ×Ñ×.Ñ.¨yÒ9rL   c                ó6   — | j                   j                  «       S r¦   )rë   r©   rZ   s    r>   Úget_widget_stateszSessionState.get_widget_statesÑ  s   € à×%Ñ%×6Ñ6Ó8Ð8rL   c                óN   — t        d| j                  j                  ||«      «      S )znTurns a value that might be a widget id or a user provided key into
        an appropriate widget id.
        r`   )r   rì   rØ   rx   s     r>   rû   zSessionState._get_widget_idÕ  s$   € ô �E˜4×.Ñ.×>Ñ>¸qÀ!ÓDÓEÐErL   c                ó"   — || j                   |<   y rW   )rì   r  s      r>   Ú_set_key_widget_mappingz$SessionState._set_key_widget_mappingÝ  s   € Ø(1ˆ×Ñ˜HÒ%rL   c                óò  — |j                   }| j                  |«       |�| j                  ||«       d}|j                  dk(  r1|�/| j                  j                  |«       | j                  |||«      }nD|j                  €8|�6| j                  j                  |«       | j                  j                  |«       || vrA|�|| vr;|s9|j                  }t         |d«      «      }| j                  j                  ||«       t        d| |   «      }t        |«      }d}|j                  dk(  rª|�¨|j                  d«      }	||	k7  rr|| j                  v rd| j                  j!                  |«      sI|| j"                  vr;|j%                  |«      }
| j                  j'                  ||
|j(                  «       d}n ||	k(  r| j                  j+                  |«       |duxr | j-                  |«      xs |}t/        ||«      S )a  Register a widget with the SessionState.

        Returns
        -------
        RegisterWidgetResult[T]
            Contains the widget's current value, and a bool that will be True
            if the frontend needs to be updated with the current value.
        NFzquery-paramsr   T)rŠ   rU  rZ  Úbindrî   r4   Ú_handle_query_param_bindingÚdiscardrí   Úunbind_and_clear_paramrk   r	   rë   rŽ   r   ré   Ú	has_paramrê   rš   Úset_corrected_valuerb   Údiscard_param_no_forward_msgr  r   )r[   ro   r  r§   Úurl_value_seededrk   Úinitial_widget_valueÚwidget_valueÚrestored_bound_valueÚdefault_valuer¢   Úwidget_value_changeds               r>   Úregister_widgetzSessionState.register_widgetà  s  € ð —K‘Kˆ	à×!Ñ! (Ô+ØÐà×(Ñ(¨°HÔ=ð !ÐØ�=‰=˜NÒ*¨xÐ/CØ×.Ñ.×2Ñ2°9Ô=Ø#×?Ñ?Ø˜( Ió Ñð �]‰]Ð" xÐ';à×.Ñ.×6Ñ6°yÔAØ×Ñ×4Ñ4°YÔ?ð ˜TÑ!ØÐ! X°TÑ%9Ù$ð $×0Ñ0ˆLÜ#+©L¸Ó,>Ó#?Ð Ø×"Ñ"×1Ñ1°)Ð=QÔRô
 ˜C  i¡Ó1ˆÜ Ó-ˆð  %ÐØ�=‰=˜NÒ*¨xÐ/CØ$×1Ñ1°$Ó7ˆMà Ò-Ø §¡Ñ/Ø×)Ñ)×3Ñ3°HÔ=Ø D×$;Ñ$;Ñ;à%×0Ñ0°Ó>�
Ø×!Ñ!×5Ñ5Ø˜j¨(×*=Ñ*=ôð (,Ñ$Ø Ò.Ø×!Ñ!×>Ñ>¸xÔHð ˜DÐ ÒF T×%<Ñ%<¸XÓ%Fò "à!ð 	ô $ LÐ2FÓGÐGrL   c                óH  — t        «       }|�|j                  nd}| j                  j                  |||j                  |¬«       || j
                  v ry|| j                  v}|s|| j                  v ry| j                  j                  |«      }|€y| j                  ||||«      S )a¥  Handle query param binding for a widget.

        Registers the binding, then attempts to seed the widget's value from URL
        based on priority rules:

        - On initial load, URL wins (enables shareable URLs)
        - On subsequent reruns, session_state values win
        - User interaction (frontend value) always wins

        Returns True if the widget's value was seeded from URL, False otherwise.
        Ú )Ú	param_keyr§   rb   Úscript_hashF)
r   Úactive_script_hashrí   Úbind_widgetrb   rë   ré   rê   Úget_initial_valueÚ_seed_widget_from_url)r[   ro   r  r§   r³   rm  Úis_initial_loadÚ	url_values           r>   r]  z(SessionState._handle_query_param_binding8  s²   € ô !Ó"ˆØ03°�c×,Ò,ÀRˆØ×Ñ×%Ñ%ØØØ×*Ñ*Ø#ð	 	&ô 	
ð ˜×.Ñ.Ñ.ØØ#¨4¯?©?Ð:ˆÙ 8¨t×/FÑ/FÑ#FØà×%Ñ%×7Ñ7¸ÓAˆ	ØÐØà×)Ñ)¨(°H¸iÈÓSÐSrL   c                ó  — t        |«      r|j                  s| j                  |«       y	 t        ||j                  «      }|j                  |«      }|j                  d«      }||k(  r| j                  |«       yt        |t        «      r"t        |«      dk(  r|r| j                  |«       y|j                  �?|j                  dk(  r0t        |t        «      r ||j                  vr| j                  |«       y|j                  dk(  r{t        |t        «      rkt        ||j                  |j                  |j                  ¬«      }|�<|s| j                  |«       y|j                  |«      }||k(  r| j                  |«       y| j                  j                  ||«       || j                   |<   | j#                  ||||«       y# t$        t&        t(        f$ r2}	t*        j-                  d||	«       | j                  |«       Y d}	~	yd}	~	ww xY w)	aI  Parse URL value, seed widget state, and auto-correct URL if needed.

        This method:
        1. Checks if the URL value is empty and handles based on clearable
        2. Parses the raw URL string using the widget's value_type
        3. Deserializes to the widget's native value format
        4. Handles invalid values (clears URL param, returns False)
        5. Stores valid values in both widget state and session state
        6. Auto-corrects the URL if the value was clamped/filtered

        Returns True if seeding succeeded, False if the URL value was invalid.
        FNr   Ústring_valueÚstring_array_value)r8   r9   r1   Tz;Invalid URL value for bound widget '%s', clearing param: %s)r&   Ú	clearableÚ_clear_url_paramr'   rb   rk   re   r&  r6   Úformatted_optionsr`   r?   Úmax_array_lengthÚallow_url_duplicatesrë   rŽ   rê   Ú_auto_correct_url_if_neededr  Ú	TypeErrorÚ
IndexErrorr,   Údebug)
r[   ro   r  r§   rs  Úparsed_valueÚdeserialized_valuerg  Ú	sanitizedÚes
             r>   rq  z"SessionState._seed_widget_from_url]  s  € ô( ˜iÔ(°×1CÒ1Cà×!Ñ! (Ô+ØðN	Ü*¨9°h×6IÑ6IÓJˆLØ!)×!6Ñ!6°|Ó!DÐØ$×1Ñ1°$Ó7ˆMð " ]Ò2Ø×%Ñ% hÔ/Øô Ð-¬tÔ4ÜÐ*Ó+¨qÒ0Ù à×%Ñ% hÔ/Øð ×*Ñ*Ð6Ø×'Ñ'¨>Ò9Ü˜|¬SÔ1Ø ¨×(BÑ(BÑBà×%Ñ% hÔ/Øð
 ×"Ñ"Ð&:Ò:¼zØœdô@ô 0Ø Ø"*×"<Ñ"<Ø'×8Ñ8Ø%-×%BÑ%Bô	�	ð Ð(Ù$Ø×-Ñ-¨hÔ7Ø$Ø)1×)>Ñ)>¸yÓ)IÐ&Ø)¨]Ò:Ø×-Ñ-¨hÔ7Ø$ð ×"Ñ"×1Ñ1°)Ð=OÔPØ0BˆD×#Ñ# HÑ-ð ×,Ñ,Ø˜( LÐ2Dôð øäœI¤zÐ2ò 	Ü�M‰MØMØØôð
 ×!Ñ! (Ô+Üûð	ús8   «AG Á:1G Â,A
G Ã7A!G Å'G Æ?G ÇHÇ(HÈHc                ó:   — | j                   j                  |«       y)z3Clear an invalid URL parameter and notify frontend.N)rí   Úremove_paramr  s     r>   rx  zSessionState._clear_url_paramÆ  s   € à×Ñ×&Ñ& xÕ0rL   c                ó€   — |j                  |«      }||k(  ry| j                  j                  |||j                  «       y)z6Auto-correct URL if the value was clamped or filtered.N)rš   rí   ra  rb   )r[   ro   r  r€  r�  Úserialized_values         r>   r|  z(SessionState._auto_correct_url_if_neededÊ  sC   € ð $×.Ñ.Ð/AÓBÐØ˜|Ò+Øà×Ñ×-Ñ-ØÐ&¨×(;Ñ(;õ	
rL   c                ó.   — 	 | |    y# t         $ r Y yw xY w)NTF)rd   rÉ   s     r>   rÊ   zSessionState.__contains__Ú  s'   € ð	Ø�ŠIð øô ò 	Ùð	ús   ‚ ˆ	“Nc                óF   — ddl m} t        dd || «      «      }t        |giS )Nr   )ÚasizeofÚst_session_staterk  )Ú streamlit.vendor.pympler.asizeofrŠ  r)   r(   )r[   Ú_family_namesrŠ  Ústats       r>   Ú	get_statszSessionState.get_statsâ  s)   € õ 	=äÐ+¨R±¸³Ó?ˆô $ d VÐ,Ð,rL   c                ó¨   — | D ]  }	 t        j                  | |   «       Œ y# t        $ r&}dt        | |   «      › d|› d�}t	        |«      |‚d}~ww xY w)z¿Verify that everything added to session state can be serialized.
        We use pickleability as the metric for serializability, and test for
        pickleability by just trying it.
        z%Cannot serialize the value (of type `z`) of 'aV  ' in st.session_state. Streamlit has been configured to use [pickle](https://docs.python.org/3/library/pickle.html) to serialize session_state values. Please convert the value to a pickle-serializable type. To learn more about this behavior, see [our docs](https://docs.streamlit.io/knowledge-base/using-streamlit/serializable-session-state).N)Úpicklerž   Ú	ExceptionÚtyper   )r[   rm   rƒ  Úerr_msgs       r>   Ú_check_serializablez SessionState._check_serializableî  sw   € ð
 ò 	FˆAðFÜ—‘˜T !™WÕ%ñ	Føô ò 	Fà;¼DÀÀaÁ»M¸?È'ÐRSÐQTð U{ð {ð ô 6°gÓ>ÀAÐEûð	Fús   ‡"¢	A«!AÁAc                óP   — t        j                  d«      r| j                  «        yy)z“Verify that session state can be serialized, if the relevant config
        option is set.

        See `_check_serializable` for details.
        z&runner.enforceSerializableSessionStateN)r   Ú
get_optionr•  rZ   s    r>   Úmaybe_check_serializablez%SessionState.maybe_check_serializable  s%   € ô ×ÑÐEÔFØ×$Ñ$Õ&ð GrL   rµ   rä   )r¶   rè   )r¶   r»   )r  r`   r¶   rá   )r  r`   rD   z
Any | Noner¶   r·   )r¶   zIterator[Any]r¸   )rÁ   r`   r¶   r   )r§   rã   r  rã   r¶   r   )r  r`   rD   r   r¶   r·   râ   )r  ÚWidgetStatesProtor¶   r·   )r  r™  r¶   r·   )
r-  r   r.  rº   r/  r   r0  rè   r¶   r·   )
rƒ   r`   ro   rº   r±   r   r²   rè   r¶   r·   )r§   r`   r¶   rá   )r  r»   r¶   r·   )r“   r»   r¶   r·   )r§   r`   r¶   úWidgetMetadata[Any] | None)rU   rº   r¶   r·   r½   )rm   r`   r¶   r`   )r§   r`   r  r`   r¶   r·   )ro   úWidgetMetadata[T]r  rã   r¶   zRegisterWidgetResult[T])ro   r›  r  r`   r§   r`   r¶   rá   )
ro   r›  r  r`   r§   r`   rs  zstr | list[str]r¶   rá   )r  r`   r¶   r·   )
ro   r›  r  r`   r€  r   r�  r   r¶   r·   rà   rW   ©r�  zSequence[str] | Noner¶   zdict[str, list[CacheStat]])7rF   rG   rH   rI   r   r¾   ré   rJ   rê   rQ   rë   rÄ   rì   r%   rí   r3   rî   r\   rò   rÞ   rå   rù   rõ   r  r  r}   r{   rr   r
  rv   ry   r  r  r  r1  r(  r)  r#  rJ  r  rI  rS  rU  rW  rû   rZ  ri  r]  rq  rx  r|  rÊ   r�  r•  r˜  rK   rL   r>   rç   rç   ‹  s¦  … ññ" "'°tÔ!<€J�Ó<ñ */¸tÔ)DÐ˜ÓDñ "'°wÔ!?Ð�wÓ?ñ #(¸Ô"D€N�KÓDñ !&°kÔ B€L�+ÓBñ /4ÀCÔ.HÐ! 8ÓHó ó'ó3ð òó ðó4Có3ó2ó"ó!ó<ó",ó\2ó*+ó*@ó

ó&RðP,à#ð,ð )ð,ð ð	,ð
 "ð,ð 
ó,ð\>Vàð>Vð &ð>Vð ð	>Vð
 ð>Vð 
ó>Vð@6Nàð6Nð &ð6Nð ð	6Nð
 ð6Nð 
ó6Nópó8ó5ó4BSóHEóLó
9óFó2ðVHØ)ðVHØ5?ðVHà	 óVHðp#TØ)ð#TØ58ð#TØEHð#Tà	ó#TðJgà#ðgð ðgð ð	gð
 #ðgð 
ógóR1ð
à#ð
ð ð
ð ð	
ð
  ð
ð 
ó
ó ð 59ð
-Ø1ð
-à	#ó
-óFô&'rL   rç   c                ó,   — | j                  t        «      S rW   )Ú
startswithr.   rÀ   s    r>   rö   rö     s   € Ø�>‰>Ô7Ó8Ð8rL   c                óN   — | sy| j                   |v xs |xr | j                  |v S )NT)rŠ   r¯   )ro   r“   r”   s      r>   r’   r’     s=   € ñ
 Øð 	�‰Ð(Ð(ò 	YØ!ÒW h×&:Ñ&:ÐBWÐ&Wðð rL   c                  ó<   — e Zd ZU ded<   edd„«       Z	 d	 	 	 dd„Zy)	ÚSessionStateStatProviderr-   Ú_session_mgrc                ó   — t         fS rW   )r(   rZ   s    r>   Ústats_familiesz'SessionStateStatProvider.stats_families$  s   € ä#Ð%Ð%rL   Nc                ó  — g }| j                   j                  «       D ]N  }|j                  j                  }|j	                  «       }|j                  «       D ]  }|j                  |«       Œ ŒP |si S t        t        |«      iS rW   )	r¢  Úlist_active_sessionsÚsessionÚsession_stater�  r„   rœ   r(   r+   )r[   r�  ÚstatsÚsession_infor¨  Úsession_statsÚfamily_statss          r>   r�  z"SessionStateStatProvider.get_stats(  s‡   € ð "$ˆØ ×-Ñ-×BÑBÓDò 	+ˆLØ(×0Ñ0×>Ñ>ˆMØ)×3Ñ3Ó5ˆMØ -× 4Ñ 4Ó 6ò +�Ø—‘˜\Õ*ñ+ð	+ñ
 ØˆIô $Ô%6°uÓ%=Ð>Ð>rL   )r¶   zSequence[str]rW   rœ  )rF   rG   rH   rJ   rå   r¤  r�  rK   rL   r>   r¡  r¡     s4   … à Ó àò&ó ð&ð 59ð?Ø1ð?à	#ô?rL   r¡  )
r7   z	list[str]r8   r¼   r9   z
int | Noner1   rá   r¶   r¼   )rÁ   r`   r¶   r`   rà   )ro   rš  r“   r»   r”   r¼   r¶   rá   )OÚ
__future__r   ri   r‘  Úcollections.abcr   r   r   r   r   Úcopyr	   Údataclassesr
   r   r   Útypingr   r   r   r   r   Ú	streamlitr   r   Ú$streamlit.delta_generator_singletonsr   Ústreamlit.errorsr   r   Ústreamlit.loggerr   Ú streamlit.proto.WidgetStates_pb2r   rC   r   r™  Ú7streamlit.runtime.scriptrunner_utils.script_run_contextr   Ústreamlit.runtime.state.commonr   r   r   r   r   r    r!   r"   r#   Ú$streamlit.runtime.state.presentationr$   Ú$streamlit.runtime.state.query_paramsr%   r&   r'   Ústreamlit.runtime.statsr(   r)   r*   r+   rF   r,   rJ   Ú!streamlit.runtime.session_managerr-   r.   r0   r?   rB   rN   rO   r`   rQ   rÂ   rÄ   rç   rö   r’   r¡  rK   rL   r>   ú<module>r½     sÛ  ðö #ã Û ß QÕ QÝ ß 1Ñ 1÷õ ÷ #Ý Jß SÝ 'Ý LÝ NÝ V÷
÷ 
õ 
õ A÷ñ ÷
ó ñ ˜HÓ%€ˆÓ %áÝ@ð (BÐ ˜uÓ Aà$Ð%Ð%?Ð@ð ˜uó ð #ñ$0Øð$0ð $ð$0ð ð	$0ð
 ð$0ð ó$0ñN �$Ô÷ð ó ðñ �$Ô÷ð ó ðð ˜JÑ&€ˆ	Ó &ð ôM&ˆn˜S #˜XÑ&ó M&ó ðM&ó`ð ÷.,ð .,ó ð.,ðb ÷|'ð |'ó ð|'ó~9ðØ(ðàðð ,ðð 
ó	ð" ô?˜}ó ?ó ñ?rL   