
    xi1d                       U d Z 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dl
mZmZmZmZmZmZmZmZ ddl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% 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l0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZD ddlEmFZFmGZGmHZHmIZI ddlJmKZK ddlLmMZM ddlNmOZO dd lPmQZQ dd!lRmSZS dd"lTmUZU dd#lVmWZW dd$lXmYZY dd%lZm[Z[ dd&l\m]Z] dd'l^m_Z_ dd(l`maZa dd)lbmcZc dd*ldmeZe dd+lfmgZg dd,lhmiZi dd-ljmkZk dd.llmmZm dd/lnmoZo dd0lpmqZq dd1lrmsZs dd2ltmuZu dd3lvmwZw dd4lxmyZy dd5lzm{Z{ dd6l|m}Z} dd7l~mZ dd8lmZ dd9lmZ dd:lmZ dd;lmZ dd<lmZ dd=lmZmZ dd>lmZ dd?lmZ dd@lmZ ddAlmZ ddBlmZ ddClmZ er$ddDlmZ ddElmZ ddFlmZ ddGlmZ ddHlEmZ ddIlmZ dJZdKedL<    edM      ZeZdNedO<   ee   ZdNedP<   eg ef   ZdNedQ<   dRadSedT<   dZdUZdZdVZ G dW dXge!ege%e'eiekemeoeqe)ese/e1ewe3e5e7e-e9e;e=eAeMeKeOeQeye{eSeUeWe+eYe}eeee[e]e_e?eaeeecee#eeeue Zd[dYZy)\z@Allows us to create and absorb changes (aka Deltas) to elements.    )annotationsN)CallableIterable)deepcopy)TYPE_CHECKINGAnyFinalLiteralNoReturn	TypeAliasTypeVarcast)cli_utilconfigcursorenv_utilloggerruntimeutil)BidiComponentMixin)context_dg_stack"get_last_dg_added_to_context_stack)
AlertMixin)
ArrowMixin)BalloonsMixin)
BokehMixin)	CodeMixin)PydeckMixin)	HelpMixin)
EmptyMixin)ExceptionMixin)	FormMixin)GraphvizMixin)HeadingMixin)	HtmlMixin)IframeMixin)
ImageMixin)	JsonMixin)LayoutsMixin)FormDatacurrent_form_id)get_height_configget_text_alignment_configget_width_configvalidate_text_alignment)MapMixin)MarkdownMixin)
MediaMixin)MetricMixin)PdfMixin)PlotlyMixin)ProgressMixin)PyplotMixin)	SnowMixin)
SpaceMixin)SpinnerMixin)	TextMixin)
ToastMixin)VegaChartsMixin)AudioInputMixin)ButtonMixin)ButtonGroupMixin)CameraInputMixin)	ChatMixin)CheckboxMixin)ColorPickerMixin)DataEditorMixin)FileUploaderMixin)MultiSelectMixin)NumberInputMixin)
RadioMixin)SelectSliderMixin)SelectboxMixin)SliderMixin)TextWidgetsMixin)TimeWidgetsMixin)
WriteMixin)NoSessionContextStreamlitAPIException)	Block_pb2)
ForwardMsg)RootContainer)caching)enqueue_message)get_script_run_ctx)TracebackType)Message)Cursor)AddRowsMetadata)LayoutConfig)Elementi   z
Final[int]MAX_DELTA_BYTESValuer   	BlockTypeAncestorBlockTypesForwardMsgCreatorFbool_use_warning_has_been_displayedc                    t         sda t        j                  ddd      } t        j                         r)t        j                  d      j                  d|  d       yt        j                         sUt        j                  d      r?t        j                  d	   }t        j                  d      j                  d|  d
| d       yyyy)zPrint a warning if Streamlit is imported but not being run with `streamlit run`.
    The warning is printed only once, and is printed using the root logger.
    TWarning:yellowboldfgroot
  z to view a Streamlit app on a browser, use Streamlit in a file and
  run it with the following command:

    streamlit run [FILE_NAME] [ARGUMENTS]z#global.showWarningOnDirectExecutionr   zb to view this Streamlit app on a browser, run it with the following
  command:

    streamlit run z [ARGUMENTS]N)rd   r   style_for_clir   is_replr   
get_loggerwarningr   existsr   
get_optionsysargv)rp   script_names     e/var/www/html/chatbot/card-advisor-bot/venv/lib/python3.12/site-packages/streamlit/delta_generator.py_maybe_print_use_warningrw      s     +*.'(($8Lf%--wi  * * !f&7&71'
 ((1+Kf%--wi  BBM O'
! +    c                     t               } | rOt        | dd      rAt        j                  ddd      }t	        j
                  d      j                  d| d	       y
y
y
)zJPrint a warning if elements are being modified during a fragment callback.in_fragment_callbackFrf   Trg   rh   rk   rl   a   A fragment rerun was triggered with a callback that displays one or more elements. During a fragment rerun, within a callback, displaying elements is not officially supported because those elements will replace the existing elements at the top of your app.N)rW   getattrr   rm   r   ro   rp   )ctxrp   s     rv   &_maybe_print_fragment_callback_warningr}      s`    

C
ws2E:(($8L&!))7) X X	
 ;srx   c                  l   e Zd ZdZej
                  dddf	 	 	 	 	 	 	 	 	 ddZddZddZ	 	 	 	 	 	 	 	 ddZ	e
dd       Ze
dd       Zdd	Zdd
Ze
dd       Ze
dd       Z	 	 	 	 ddZe
d d       Ze
d!d       Ze
dd       Zd"dZddZ	 	 d#	 	 	 	 	 	 	 	 	 d$dZ	 	 d#	 	 	 	 	 d%dZ	 d&	 	 	 	 	 d'dZy)(DeltaGeneratoraG  Creator of Delta protobuf messages.

    Parameters
    ----------
    root_container: BlockPath_pb2.BlockPath.ContainerValue or None
      The root container for this DeltaGenerator. If None, this is a null
      DeltaGenerator which doesn't print to the app at all (useful for
      testing).

    cursor: cursor.Cursor or None
      This is either:
      - None: if this is the running DeltaGenerator for a top-level
        container (MAIN or SIDEBAR)
      - RunningCursor: if this is the running DeltaGenerator for a
        non-top-level container (created with dg.container())
      - LockedCursor: if this is a locked DeltaGenerator returned by some
        other DeltaGenerator method. E.g. the dg returned in dg =
        st.text("foo").

    parent: DeltaGenerator
      To support the `with dg` notation, DGs are arranged as a tree. Each DG
      remembers its own parent, and the root of the tree is the main DG.

    block_type: None or "vertical" or "horizontal" or "column" or "expandable"
      If this is a block DG, we track its type to prevent nested columns/expanders

    Nc                4   ||||j                   k7  rt        d      || _        || _        || _        || _        d| _        | j                  j                  D ]>  }|j                  j                         D ]  }t        |      s| j                  |_        ! @ y)am  Inserts or updates elements in Streamlit apps.

        As a user, you should never initialize this object by hand. Instead,
        DeltaGenerator objects are initialized for you in two places:

        1) When you call `dg = st.foo()` for some method "foo", sometimes `dg`
        is a DeltaGenerator object. You can call methods on the `dg` object to
        update the element `foo` that appears in the Streamlit app.

        2) This is an internal detail, but `st.sidebar` itself is a
        DeltaGenerator. That's why you can call `st.sidebar.foo()` to place
        an element `foo` inside the sidebar.

        NzHDeltaGenerator root_container and cursor.root_container must be the same)root_containerRuntimeError_root_container_provided_cursor_parent_block_type
_form_data	__class__	__bases____dict__valuescallable
__module__)selfr   r   parent
block_typemixinfuncs          rv   __init__zDeltaGenerator.__init__  s    0 &"&"7"77Z   . !'% ,0 ^^-- 	6E--/ 6D>&*ooDO6	6rx   c                ,    t        j                  |       S N)r   repr_r   s    rv   __repr__zDeltaGenerator.__repr__:  s    zz$rx   c                \    t        j                  g t        j                         |        y r   r   setgetr   s    rv   	__enter__zDeltaGenerator.__enter__=  s%    </335<t<=rx   c                X    t        j                  t        j                         d d        y)NFr   )r   typexctbs       rv   __exit__zDeltaGenerator.__exit__A  s(     	-113CR89 rx   c                @    | | j                   k(  rt               }||S | S )zReturn the DeltaGenerator that's currently 'active'.
        If we are the main DeltaGenerator, and are inside a `with` block that
        creates a container, our active_dg is that container. Otherwise,
        our active_dg is self.
        )_main_dgr   )r   last_context_stack_dgs     rv   
_active_dgzDeltaGenerator._active_dgN  s/     4==  %G$H!$0,, rx   c                J    | j                   r| j                   j                  S | S )zReturn this DeltaGenerator's root - that is, the top-level ancestor
        DeltaGenerator that we belong to (this generally means the st._main
        DeltaGenerator).
        )r   r   r   s    rv   r   zDeltaGenerator._main_dg`  s     )-t||$$>$>rx   c           	          dd l }t        |      D cg c]  }t        t        ||            s| c}d fd}|S c c}w )Nr   c                     v rEj                   t        j                  k(  rd d d}t        |      d d d}t        |      d d}t        |      )NzMethod `z6()` does not exist for `st.sidebar`. Did you mean `st.z()`?zB()` does not exist for `DeltaGenerator` objects. Did you mean `st.`z%()` is not a valid Streamlit command.)r   rT   SIDEBARrQ   )argskwargsmessagenamer   streamlit_methodss      rv   wrapperz+DeltaGenerator.__getattr__.<locals>.wrappero  s    ((''=+@+@@"4& )::>tE  (00 #4& )#fD*  (00 dV#HI'00rx   )r   r   r   r   returnr   )	streamlitdirr   r{   )r   r   stmethod_namer   r   s   ``   @rv   __getattr__zDeltaGenerator.__getattr__h  sA     ,/r7
'hwr;?W6XK
	1$ -
s
   AAc                    t        | j                  t        | j                        t        | j                        | j
                        }t        | j                        |_        |S )Nr   r   r   r   )r   r   r   _cursorr   r   r   )r   _memodgs      rv   __deepcopy__zDeltaGenerator.__deepcopy__  sM    //DLL)DLL)''	
 !1	rx   c              #  <   K   | }|| |j                   }|y y wr   )r   )r   
current_dgs     rv   
_ancestorszDeltaGenerator._ancestors  s*     ,0
$#++J $s   c              #  d   K   | j                   D ]  }|j                  |j                    yw)znIterate all the block types used by this DeltaGenerator and all
        its ancestor DeltaGenerators.
        N)r   r   )r   as     rv   _ancestor_block_typesz$DeltaGenerator._ancestor_block_types  s/     
  	$A}}(mm#	$s   00c                &    t        d |D              S )Nc              3  ,   K   | ]  }|d k(  s	d  yw)column   N ).0ancestor_blocks     rv   	<genexpr>z>DeltaGenerator._count_num_of_parent_columns.<locals>.<genexpr>  s      
 Nh<VA
s   
)sum)r   ancestor_block_typess     rv   _count_num_of_parent_columnsz+DeltaGenerator._count_num_of_parent_columns  s      
$8
 
 	
rx   c                p    | j                   t        j                  | j                        S | j                   S )zReturn our Cursor. This will be None if we're not running in a
        ScriptThread - e.g., if we're running a "bare" script outside of
        Streamlit.
        )r   r   get_container_cursorr   r   s    rv   r   zDeltaGenerator._cursor  s3       (..t/C/CDD$$$rx   c                    | j                   d u S r   )r   r   s    rv   _is_top_levelzDeltaGenerator._is_top_level  s    $$,,rx   c                *    t        t        |             S r   )stridr   s    rv   r   zDeltaGenerator.id  s    2d8}rx   c                j    | j                   j                  }|t        d       |j                         S )NzCursor is not set)r   r   rP   get_transient_cursor)r   r   s     rv   _get_transient_cursorz$DeltaGenerator._get_transient_cursor  s3    ((>"#677*v**,,rx   c                t    | j                   }|j                  t        |j                  j                        S dS )a  Returns the element's delta path as a string like "[0, 2, 3, 1]".

        This uniquely identifies the element's position in the front-end,
        which allows (among other potential uses) the MediaFileManager to maintain
        session-specific maps of MediaFile objects placed with their "coordinates".

        This way, users can (say) use st.image with a stream of different images,
        and Streamlit will expire the older images and replace them in place.
        z[])r   r   r   
delta_path)r   r   s     rv   _get_delta_path_strz"DeltaGenerator._get_delta_path_str  s0     __-/ZZ-Cs2::(()MMrx   c                   | j                   }t               }|r"|j                  rt        |      rt	        d      t                t                t               }t        |j                  j                  |      }|j                  |       |r|j                  B|j                  j                  j                  j                  t        |j                               |j                  B|j                  j                  j                   j                  t#        |j                               |j$                  Wt'        |j$                         |j                  j                  j(                  j                  t+        |j$                               d}	|j,                  F|j.                  :|j.                  j0                  |j2                  j0                  dd t5        |       d}	|	r]|j.                  |j.                  j7                  ||      nd}
t9        |j,                  |
|      }t;        t=        |            |_        n|}tA        jB                  ||| jD                  |jD                  |jD                  |       |S )a  Create NewElement delta, fill it, and enqueue it.

        Parameters
        ----------
        delta_type : str
            The name of the streamlit method being called
        element_proto : proto
            The actual proto in the NewElement type e.g. Alert/Button/Slider
        add_rows_metadata : AddRowsMetadata or None
            Metadata for the add_rows method

        Returns
        -------
        DeltaGenerator
            Return a DeltaGenerator that can be used to modify the newly-created
            element.
        zCalling `st.sidebar` in a function wrapped with `st.fragment` is not supported. To write elements to the sidebar with a fragment, call your fragment function inside a `with st.sidebar` context manager.NFT)
delta_typeadd_rows_metadata)r   r   r   )invoked_dg_id
used_dg_idreturned_dg_idlayout_config)#r   rW   current_fragment_id_writes_directly_to_sidebarrQ   rw   r}   rS   r{   deltanew_elementCopyFromheightheight_configr,   widthwidth_configr.   text_alignmentr/   text_alignment_configr-   r   r   r   metadata_enqueue_messageget_locked_cursorr   r*   r+   r   rU   save_element_messager   )r   r   element_protor   r   r   r|   msgmsg_el_protomsg_was_enqueued
new_cursor	output_dgs               rv   _enqueuezDeltaGenerator._enqueue  s    2 __ "3**/J2/N'P  	!".0 lsyy44jAm,##/		%%33<<%m&:&:; "".		%%22;;$]%8%89 ++7'(D(DE		%%;;DD-m.J.JK
 !)bjj.D)+)>)>CLL##A&S!# ::) 

,,)=N -    '!11!I $,OB,?#@I  I 	$$''uu$<<'	
 rx   c           	     2   |t        j                         }| j                  }|j                  d      }|j                  |j
                  |S t               }|j
                  j                  |j                  j                  d d  |j                  j                  j                  |       t        j                  |j                  g |j
                  j                  |j
                  j                        }|t         }t#        d ||j                  |||            }t%        t'        |            |_        |j
                  j+                  d        t-        |       t/        j0                  || j2                  |j2                  |j2                         |S )Ntype)r   parent_pathr   r   )r   )r   r   r   )rR   Blockr   
WhichOneofr   r   rS   r   r   r   	add_blockr   r   RunningCursorr   indexr   r   r*   r+   r   r   r   rU   save_block_messager   )r   block_protodg_typer   r   r   block_cursorblock_dgs           rv   _blockzDeltaGenerator._block4  sY   
 #//+K __ !++F3
%);Il%'ZZ%:%:"		$$[1
 ++--C"**00C"**2B2BC
 ?$G!11#%	
 'r':; 	

$$t$<""''uu#;;		
 rx   c                  	 | j                         }|j                  |j                  |j                  |rt|j                  .j
                  j                  t        |j                               |j                  .j                  j                  t        |j                               t        j                         	d	fd}d	fd}||fS )aa  Provides the factory functions for creating and clearing transient elements.
        It preserves the delta path, transient index, and the set of transient elements.

        Returns a tuple of two functions:
        - create_transient_element: Creates the new transient element.
        - clear_transient_element: Clears the transient element.
        c                 |   5  <   t               } | j                  j                  d d  d| j                  _        | j                  j
                  j                          D ]?  }| j                  j
                  j                  j                         j                  |       A 	 d d d        | S # 1 sw Y    S xY wNF
rS   r   r   	cacheabler   new_transientSetInParentelementsaddr   )
create_msger   r   transient_elementstransient_indextransient_locks     rv   create_transient_elementz;DeltaGenerator._transient.<locals>.create_transient_element  s     
N6C"?3'\
4>
##..q105
##-   ..::<+ NA$$22;;??AJJ1MN
N 
N s   B"B11B;c                    5  v r= t               } | j                  j                  d d  d| j                  _        | j                  j
                  j                          D ]?  }| j                  j
                  j                  j                         j                  |       A 	 d d d        | S # 1 sw Y    S xY wr
  r  )	clear_msgr  r   r  r  r  s     rv   clear_transient_elementz:DeltaGenerator._transient.<locals>.clear_transient_element  s     	M"&88*?;&L	3=	""--a0/4	"",--99;+ MAOO11::>>@II!LM	M 	M s   B$B33B=)r   rS   )r   r   r  r  r   r   r   r,   r   r   r.   	threadingLock)
r   r   r   transient_cursorr  r  r   r  r  r  s
    `    @@@@rv   
_transientzDeltaGenerator._transientp  s      557%00
*::-@@##/++44%m&:&:; "".**33$]%8%89 #)	 		 	 ()@@@rx   )
r   z
int | Noner   Cursor | Noner   zDeltaGenerator | Noner   z
str | Noner   None)r   r   r   r  )r   ztype[BaseException] | Noner   zBaseException | Noner   zTracebackType | Noner   zLiteral[False])r   r   )r   r   r   zCallable[..., NoReturn])r   r   r   r   )r   zIterable[DeltaGenerator])r   ra   )r   ra   r   int)r   r  )r   rc   )r   zcursor.Cursor)NN)
r   r   r   rY   r   zAddRowsMetadata | Noner   LayoutConfig | Noner   r   )r  zBlock_pb2.Block | Noner  ztype | Noner   r   r   )r   ElementProtor   r"  r   z+tuple[ForwardMsgCreator, ForwardMsgCreator])__name__r   __qualname____doc__rT   MAINr   r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   rx   rv   r   r      s   hB &3%7%7 $(,!%36"36 36 &	36
 36 
36j >' " !	
 
  " ? ?6 , , $ $
$6
	
 % % - -  -N$ 59-1gg g 2	g
 +g 
gV /3#:+: : 
	:~ .2<A#<A +<A 
5	<Arx   r   c                    t        d | j                  D              }t        t        | j                              }|xr | S )Nc              3  V   K   | ]!  }|j                   t        j                  k(   # y wr   )r   rT   r   )r   r   s     rv   r   z._writes_directly_to_sidebar.<locals>.<genexpr>  s!     WAQ&&-*?*??Ws   '))anyr   rc   listr   )r   
in_sidebarhas_containers      rv   r   r     s9    WWWJb6678M+m++rx   r   )r   r   r   rc   )r&  
__future__r   rs   r  collections.abcr   r   copyr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   &streamlit.components.v2.bidi_componentr   $streamlit.delta_generator_singletonsr   r   streamlit.elements.alertr   streamlit.elements.arrowr   streamlit.elements.balloonsr   streamlit.elements.bokeh_chartr   streamlit.elements.coder   %streamlit.elements.deck_gl_json_chartr   streamlit.elements.doc_stringr   streamlit.elements.emptyr    streamlit.elements.exceptionr!   streamlit.elements.formr"   !streamlit.elements.graphviz_chartr#   streamlit.elements.headingr$   streamlit.elements.htmlr%   streamlit.elements.iframer&   streamlit.elements.imager'   streamlit.elements.jsonr(   streamlit.elements.layoutsr)   !streamlit.elements.lib.form_utilsr*   r+   #streamlit.elements.lib.layout_utilsr,   r-   r.   r/   streamlit.elements.mapr0   streamlit.elements.markdownr1   streamlit.elements.mediar2   streamlit.elements.metricr3   streamlit.elements.pdfr4   streamlit.elements.plotly_chartr5   streamlit.elements.progressr6   streamlit.elements.pyplotr7   streamlit.elements.snowr8   streamlit.elements.spacer9   streamlit.elements.spinnerr:   streamlit.elements.textr;   streamlit.elements.toastr<   streamlit.elements.vega_chartsr=   &streamlit.elements.widgets.audio_inputr>   !streamlit.elements.widgets.buttonr?   'streamlit.elements.widgets.button_groupr@   'streamlit.elements.widgets.camera_inputrA   streamlit.elements.widgets.chatrB   #streamlit.elements.widgets.checkboxrC   'streamlit.elements.widgets.color_pickerrD   &streamlit.elements.widgets.data_editorrE   (streamlit.elements.widgets.file_uploaderrF   &streamlit.elements.widgets.multiselectrG   'streamlit.elements.widgets.number_inputrH    streamlit.elements.widgets.radiorI   (streamlit.elements.widgets.select_sliderrJ   $streamlit.elements.widgets.selectboxrK   !streamlit.elements.widgets.sliderrL   'streamlit.elements.widgets.text_widgetsrM   'streamlit.elements.widgets.time_widgetsrN   streamlit.elements.writerO   streamlit.errorsrP   rQ   streamlit.protorR   streamlit.proto.ForwardMsg_pb2rS   !streamlit.proto.RootContainer_pb2rT   streamlit.runtimerU   streamlit.runtime.scriptrunnerrV   r   rW   typesrX   google.protobuf.messagerY   streamlit.cursorrZ   +streamlit.elements.lib.built_in_chart_utilsr[   r\   streamlit.proto.Element_pb2r]   r#  r^   __annotations__r_   r   r`   ra   rb   rd   rw   r}   r   r   r   rx   rv   <module>rt     s   G " 
  . 	 	 	   F 0 / 5 5 - = 3 / 7 - ; 3 - 1 / - 3 G  , 5 / 1 + 7 5 1 - / 3 - / : B 9 D D 5 = D B F C D 7 F ? 9 D D / D % 5 ; % N =#/'K@C. . 	9  ( 3 I 3'J7 9 7 ).  -<

zAzAzA zA 	zA
 zA zA zA zA zA zA zA zA zA zA zA  !zA" #zA$ %zA& 'zA( )zA* +zA, -zA. /zA0 1zA2 3zA4 5zA6 7zA8 9zA: ;zA< =zA> ?zA@ AzAB CzAD EzAF GzAH IzAJ KzAL MzAN OzAP QzAR SzAT UzAV WzAX YzAZ [zA\ ]zA^ _zA` azAb czAd ezAz,rx   