L i&ddlmZddlZddlZddlZddlZddlmZddlm Z m Z ddl m Z ddl mZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSddlTmUZUddlVmWZWddlXmYZYe rddlZm[Z[m\Z\m]Z]ddl^m_Z_ejZaGddZby)) annotationsN)Path) TYPE_CHECKINGAny) MagicMock)parse)Runtime)MemoryCacheStorageManager)MediaFileManager)MemoryMediaFileStorage) PagesManager) ScriptCache)Secrets) TESTING_KEY)SafeSessionState) SessionState)page_icon_and_name).BlockButton ButtonGroupCaption ChatInput ChatMessageCheckboxCode ColorPickerColumn Dataframe DateInputDivider ElementList ElementTreeError ExceptionExpanderHeaderInfoJsonLatexMarkdownMetric MultiselectNode NumberInputRadio Selectbox SelectSliderSliderStatus SubheaderSuccessTabTableTextTextArea TextInput TimeInputTitleToastToggleWarning WidgetListrepr_)LocalScriptRunner)patch_config_options)calc_md5)CallableIteratorSequence) WidgetStatesceZdZdZddd d?dZeddd@dZedddd dAd Zedddd dBd Zedd dCd Z dD dEd Z dd dFdZ dGdZ e dHdZe dHdZe dIdZe dJdZe dKdZe dLdZe dMdZe dNdZe dOdZe dPdZe dQdZe dRdZe dSdZe dTdZe dUdZe dVdZe dWd Ze dXd!Ze dYd"Z e dZd#Z!e d[d$Z"e d\d%Z#e d]d&Z$e d^d'Z%e d_d(Z&e d`d)Z'e dad*Z(e dbd+Z)e dcd,Z*e ddd-Z+e ded.Z,e dfd/Z-e dgd0Z.e dhd1Z/e did2Z0e djd3Z1e dkd4Z2e dld5Z3e dmd6Z4e dnd7Z5e dod8Z6e dpd9Z7dqd:Z8drd;Z9dsd<Z:dtd=Z;dud>Zz"AppTest.__init__..srR)str _script_pathdefault_timeoutrrr session_state query_paramssecretsrLrM _page_hashr"_runner_tree)self script_pathrXrLrMrYtrees rS__init__zAppTest.__init__sr ,.$ %' k"-m\J,.')   }  rRrXc(|j||S)a3 Create an instance of ``AppTest`` to simulate an app page defined within a string. This is useful for testing short scripts that fit comfortably as an inline string in the test itself, without having to create a separate file for it. The script must be executable on its own and so must contain all necessary imports. Parameters ---------- script: str The string contents of the script to be run. default_timeout: float Default time in seconds before a script run is timed out. Can be overridden for individual ``.run()`` calls. Returns ------- AppTest A simulated Streamlit app for testing. The simulated app can be executed via ``.run()``. rd) _from_string)clsscriptrXs rS from_stringzAppTest.from_strings6HHrRrXrLrMctt|d}ttj|}t j |}|j|tt||||S)Nzutf-8rj) rDbytesrTMP_DIRnametextwrapdedent write_textrJrV)rgrhrXrLrM script_namepathaligned_scripts rSrfzAppTest._from_stringsYuVW56 GLL+.!0 ' IT&  rRctj|\}}tjdj |}|dt |dr |j nddz}|j||||S)a  Create an instance of ``AppTest`` to simulate an app page defined within a function. This is similar to ``AppTest.from_string()``, but more convenient to write with IDE assistance. The script must be executable on its own and so must contain all necessary imports. Parameters ---------- script: Callable A function whose body will be used as a script. Must be runnable in isolation, so it must include any necessary imports. default_timeout: float Default time in seconds before a script run is timed out. Can be overridden for individual ``.run()`` calls. args: tuple An optional tuple of args to pass to the script function. kwargs: dict An optional dict of kwargs to pass to the script function. Returns ------- AppTest A simulated Streamlit app for testing. The simulated app can be executed via ``.run()``. rU __name__rhz(*__args, **__kwargs)rj)inspectgetsourcelinesrorpjoinhasattrrwrf) rgrhrXrLrM source_lines_sourcemodules rS from_functionzAppTest.from_functions~P"008 a!67 gfj&A6??xPPef g  O$v   rRc t|}|jr|}nYtjj tj d}t|dj }|j|z }t||S)a. Create an instance of ``AppTest`` to simulate an app page defined within a file. This option is most convenient for CI workflows and testing of published apps. The script must be executable on its own and so must contain all necessary imports. Parameters ---------- script_path: str | Path Path to a script file. The path should be absolute or relative to the file calling ``.from_file``. default_timeout: float Default time in seconds before a script run is timed out. Can be overridden for individual ``.run()`` calls. Returns ------- AppTest A simulated Streamlit app for testing. The simulated app can be executed via ``.run()``. Nrd) ris_file traceback StackSummaryextract walk_stackfilenameparentrJ)rgr`rXrsstackfilepaths rS from_filezAppTest.from_filesq8;'    D **2293G3G3MNEE!H--.H??[0Dt_==rRcddl}| |j}tt}t t d|_t|_|t_ t}t|j|d}|j}|jr"t}|j|_||_ t!|j|j"||j$|j&} t)dd i5| j+||j,||j.|_||j0_ddd| j4d d j6} t9j:| |_|jrA|jj$t=|jj|_ ||_ dt_ |S#1swYxYw) zRun the script, and parse the output messages for querying and interaction. Timeout is in seconds, or None to use the default timeout of the runner. rN)specz /mock/mediaF) setup_watcherrKzglobal.appTestT client_state) streamlitrXrr r r media_file_mgrr cache_storage_manager _instancerr rWr[r_secretsrBrYrLrMrCrunrZr\r^r] event_data query_stringrparse_qsdict) r_ widget_statetimeoutst mock_runtime script_cache pages_manager saved_secrets new_secrets script_runnerrs rS_runz AppTest._run;s  ?**G!g. &6 "= 1' #.G-H *("} $   |5 "$ <<!)K#'< 9"9- rRc.|jjS)aPSequence of elements within the main body of the app. Returns ------- Block A container of elements. Block can be queried for elements in the same manner as ``AppTest``. For example, ``Block.checkbox`` will return all ``st.checkbox`` within the associated container. )r^mainr_s rSrz AppTest.mainszzrRc.|jjS)aJSequence of all elements within ``st.sidebar``. Returns ------- Block A container of elements. Block can be queried for elements in the same manner as ``AppTest``. For example, ``Block.checkbox`` will return all ``st.checkbox`` within the associated container. )r^sidebarrs rSrzAppTest.sidebarszz!!!rRc.|jjS)aSequence of all ``st.button`` and ``st.form_submit_button`` widgets. Returns ------- WidgetList of Button Sequence of all ``st.button`` and ``st.form_submit_button`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.button[0]`` for the first widget or ``at.button(key="my_key")`` for a widget with a given key. )r^buttonrs rSrzAppTest.buttonszz   rRc.|jjS)aSequence of all ``st.feedback`` widgets. Returns ------- WidgetList of ButtonGroup Sequence of all ``st.feedback`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.button_group[0]`` for the first widget or ``at.button_group(key="my_key")`` for a widget with a given key. )r^ button_grouprs rSrzAppTest.button_groupzz&&&rRc.|jjS)aSequence of all ``st.caption`` elements. Returns ------- ElementList of Caption Sequence of all ``st.caption`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.caption[0]`` for the first element. Caption is an extension of the Element class. )r^captionrs rSrzAppTest.captionzz!!!rRc.|jjS)aSequence of all ``st.chat_input`` widgets. Returns ------- WidgetList of ChatInput Sequence of all ``st.chat_input`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.chat_input[0]`` for the first widget or ``at.chat_input(key="my_key")`` for a widget with a given key. )r^ chat_inputrs rSrzAppTest.chat_inputzz$$$rRc.|jjS)aSequence of all ``st.chat_message`` elements. Returns ------- Sequence of ChatMessage Sequence of all ``st.chat_message`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.chat_message[0]`` for the first element. ChatMessage is an extension of the Block class. )r^ chat_messagers rSrzAppTest.chat_messagerrRc.|jjS)aSequence of all ``st.checkbox`` widgets. Returns ------- WidgetList of Checkbox Sequence of all ``st.checkbox`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.checkbox[0]`` for the first widget or ``at.checkbox(key="my_key")`` for a widget with a given key. )r^checkboxrs rSrzAppTest.checkbox zz"""rRc.|jjS)auSequence of all ``st.code`` elements. Returns ------- ElementList of Code Sequence of all ``st.code`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.code[0]`` for the first element. Code is an extension of the Element class. )r^coders rSrz AppTest.codezzrRc.|jjS)aSequence of all ``st.color_picker`` widgets. Returns ------- WidgetList of ColorPicker Sequence of all ``st.color_picker`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.color_picker[0]`` for the first widget or ``at.color_picker(key="my_key")`` for a widget with a given key. )r^ color_pickerrs rSrzAppTest.color_picker(rrRc.|jjS)a Sequence of all columns within ``st.columns`` elements. Each column within a single ``st.columns`` will be returned as a separate Column in the Sequence. Returns ------- Sequence of Column Sequence of all columns within ``st.columns`` elements. Individual columns can be accessed from an ElementList by index (order on the page). For example, ``at.columns[0]`` for the first column. Column is an extension of the Block class. )r^columnsrs rSrzAppTest.columns6szz!!!rRc.|jjS)aSequence of all ``st.dataframe`` elements. Returns ------- ElementList of Dataframe Sequence of all ``st.dataframe`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.dataframe[0]`` for the first element. Dataframe is an extension of the Element class. )r^ dataframers rSrzAppTest.dataframeGzz###rRc.|jjS)aSequence of all ``st.date_input`` widgets. Returns ------- WidgetList of DateInput Sequence of all ``st.date_input`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.date_input[0]`` for the first widget or ``at.date_input(key="my_key")`` for a widget with a given key. )r^ date_inputrs rSrzAppTest.date_inputUrrRc.|jjS)aSequence of all ``st.divider`` elements. Returns ------- ElementList of Divider Sequence of all ``st.divider`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.divider[0]`` for the first element. Divider is an extension of the Element class. )r^dividerrs rSrzAppTest.dividercrrRc.|jjS)azSequence of all ``st.error`` elements. Returns ------- ElementList of Error Sequence of all ``st.error`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.error[0]`` for the first element. Error is an extension of the Element class. )r^errorrs rSrz AppTest.errorqzzrRc.|jjS)aSequence of all ``st.exception`` elements. Returns ------- ElementList of Exception Sequence of all ``st.exception`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.exception[0]`` for the first element. Exception is an extension of the Element class. )r^ exceptionrs rSrzAppTest.exceptionrrRc.|jjS)aSequence of all ``st.expander`` elements. Returns ------- Sequence of Expandable Sequence of all ``st.expander`` elements. Individual elements can be accessed from a Sequence by index (order on the page). For example, ``at.expander[0]`` for the first element. Expandable is an extension of the Block class. )r^expanderrs rSrzAppTest.expanderrrRc.|jjS)aSequence of all ``st.header`` elements. Returns ------- ElementList of Header Sequence of all ``st.header`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.header[0]`` for the first element. Header is an extension of the Element class. )r^headerrs rSrzAppTest.headerzz   rRc.|jjS)auSequence of all ``st.info`` elements. Returns ------- ElementList of Info Sequence of all ``st.info`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.info[0]`` for the first element. Info is an extension of the Element class. )r^infors rSrz AppTest.inforrRc.|jjS)auSequence of all ``st.json`` elements. Returns ------- ElementList of Json Sequence of all ``st.json`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.json[0]`` for the first element. Json is an extension of the Element class. )r^jsonrs rSrz AppTest.jsonrrRc.|jjS)azSequence of all ``st.latex`` elements. Returns ------- ElementList of Latex Sequence of all ``st.latex`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.latex[0]`` for the first element. Latex is an extension of the Element class. )r^latexrs rSrz AppTest.latexrrRc.|jjS)aSequence of all ``st.markdown`` elements. Returns ------- ElementList of Markdown Sequence of all ``st.markdown`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.markdown[0]`` for the first element. Markdown is an extension of the Element class. )r^markdownrs rSrzAppTest.markdownrrRc.|jjS)aSequence of all ``st.metric`` elements. Returns ------- ElementList of Metric Sequence of all ``st.metric`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.metric[0]`` for the first element. Metric is an extension of the Element class. )r^metricrs rSrzAppTest.metricrrRc.|jjS)aSequence of all ``st.multiselect`` widgets. Returns ------- WidgetList of Multiselect Sequence of all ``st.multiselect`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.multiselect[0]`` for the first widget or ``at.multiselect(key="my_key")`` for a widget with a given key. )r^ multiselectrs rSrzAppTest.multiselectszz%%%rRc.|jjS)aSequence of all ``st.number_input`` widgets. Returns ------- WidgetList of NumberInput Sequence of all ``st.number_input`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.number_input[0]`` for the first widget or ``at.number_input(key="my_key")`` for a widget with a given key. )r^ number_inputrs rSrzAppTest.number_inputrrRc.|jjS)aSequence of all ``st.radio`` widgets. Returns ------- WidgetList of Radio Sequence of all ``st.radio`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.radio[0]`` for the first widget or ``at.radio(key="my_key")`` for a widget with a given key. )r^radiors rSrz AppTest.radio rrRc.|jjS)aSequence of all ``st.select_slider`` widgets. Returns ------- WidgetList of SelectSlider Sequence of all ``st.select_slider`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.select_slider[0]`` for the first widget or ``at.select_slider(key="my_key")`` for a widget with a given key. )r^ select_sliderrs rSrzAppTest.select_sliderszz'''rRc.|jjS)aSequence of all ``st.selectbox`` widgets. Returns ------- WidgetList of Selectbox Sequence of all ``st.selectbox`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.selectbox[0]`` for the first widget or ``at.selectbox(key="my_key")`` for a widget with a given key. )r^ selectboxrs rSrzAppTest.selectbox'rrRc.|jjS)aSequence of all ``st.slider`` widgets. Returns ------- WidgetList of Slider Sequence of all ``st.slider`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.slider[0]`` for the first widget or ``at.slider(key="my_key")`` for a widget with a given key. )r^sliderrs rSrzAppTest.slider5rrRc.|jjS)aSequence of all ``st.subheader`` elements. Returns ------- ElementList of Subheader Sequence of all ``st.subheader`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.subheader[0]`` for the first element. Subheader is an extension of the Element class. )r^ subheaderrs rSrzAppTest.subheaderCrrRc.|jjS)aSequence of all ``st.success`` elements. Returns ------- ElementList of Success Sequence of all ``st.success`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.success[0]`` for the first element. Success is an extension of the Element class. )r^successrs rSrzAppTest.successQrrRc.|jjS)avSequence of all ``st.status`` elements. Returns ------- Sequence of Status Sequence of all ``st.status`` elements. Individual elements can be accessed from a Sequence by index (order on the page). For example, ``at.status[0]`` for the first element. Status is an extension of the Block class. )r^statusrs rSrzAppTest.status_rrRc.|jjS)azSequence of all ``st.table`` elements. Returns ------- ElementList of Table Sequence of all ``st.table`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.table[0]`` for the first element. Table is an extension of the Element class. )r^tablers rSrz AppTest.tablemrrRc.|jjS)aSequence of all tabs within ``st.tabs`` elements. Each tab within a single ``st.tabs`` will be returned as a separate Tab in the Sequence. Additionally, the tab labels are forwarded to each Tab element as a property. For example, ``st.tabs("A","B")`` will yield two Tab objects, with ``Tab.label`` returning "A" and "B", respectively. Returns ------- Sequence of Tab Sequence of all tabs within ``st.tabs`` elements. Individual tabs can be accessed from an ElementList by index (order on the page). For example, ``at.tabs[0]`` for the first tab. Tab is an extension of the Block class. )r^tabsrs rSrz AppTest.tabs{s$zzrRc.|jjS)auSequence of all ``st.text`` elements. Returns ------- ElementList of Text Sequence of all ``st.text`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.text[0]`` for the first element. Text is an extension of the Element class. )r^textrs rSrz AppTest.textrrRc.|jjS)aSequence of all ``st.text_area`` widgets. Returns ------- WidgetList of TextArea Sequence of all ``st.text_area`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.text_area[0]`` for the first widget or ``at.text_area(key="my_key")`` for a widget with a given key. )r^ text_arears rSrzAppTest.text_arearrRc.|jjS)aSequence of all ``st.text_input`` widgets. Returns ------- WidgetList of TextInput Sequence of all ``st.text_input`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.text_input[0]`` for the first widget or ``at.text_input(key="my_key")`` for a widget with a given key. )r^ text_inputrs rSrzAppTest.text_inputrrRc.|jjS)aSequence of all ``st.time_input`` widgets. Returns ------- WidgetList of TimeInput Sequence of all ``st.time_input`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.time_input[0]`` for the first widget or ``at.time_input(key="my_key")`` for a widget with a given key. )r^ time_inputrs rSrzAppTest.time_inputrrRc.|jjS)azSequence of all ``st.title`` elements. Returns ------- ElementList of Title Sequence of all ``st.title`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.title[0]`` for the first element. Title is an extension of the Element class. )r^titlers rSrz AppTest.titlerrRc.|jjS)azSequence of all ``st.toast`` elements. Returns ------- ElementList of Toast Sequence of all ``st.toast`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.toast[0]`` for the first element. Toast is an extension of the Element class. )r^toastrs rSr z AppTest.toastrrRc.|jjS)aSequence of all ``st.toggle`` widgets. Returns ------- WidgetList of Toggle Sequence of all ``st.toggle`` widgets. Individual widgets can be accessed from a WidgetList by index (order on the page) or key. For example, ``at.toggle[0]`` for the first widget or ``at.toggle(key="my_key")`` for a widget with a given key. )r^togglers rSr zAppTest.togglerrRc.|jjS)aSequence of all ``st.warning`` elements. Returns ------- ElementList of Warning Sequence of all ``st.warning`` elements. Individual elements can be accessed from an ElementList by index (order on the page). For example, ``at.warning[0]`` for the first element. Warning is an extension of the Element class. )r^warningrs rSr zAppTest.warningrrRc,t|jSrP)lenr^rs rS__len__zAppTest.__len__s4::rRc#8K|jEd{y7wrPr^rs rS__iter__zAppTest.__iter__s::s c |j|SrPr)r_idxs rS __getitem__zAppTest.__getitem__szz#rRc8|jj|S)aGet elements or widgets of the specified type. This method returns the collection of all elements or widgets of the specified type on the current page. Retrieve a specific element by using its index (order on page) or key lookup. Parameters ---------- element_type: str An element attribute of ``AppTest``. For example, "button", "caption", or "chat_input". Returns ------- Sequence of Elements Sequence of elements of the given type. Individual elements can be accessed from a Sequence by index (order on the page). When getting and ``element_type`` that is a widget, individual widgets can be accessed by key. For example, ``at.get("text")[0]`` for the first ``st.text`` element or ``at.get("slider")(key="my_key")`` for the ``st.slider`` widget with a given key. )r^get)r_ element_types rSrz AppTest.gets.zz~~l++rRct|SrP)rArs rS__repr__zAppTest.__repr__!s T{rR) r` str | PathrXfloatrLtuple[Any, ...] | NonerMdict[str, Any] | NonereturnNone)rhrVrXrr rJ) rhrVrXrrLrrMrr rJ) rhzCallable[..., Any]rXrrLrrMrr rJ)r`rrXrr rJ)NN)rzWidgetStates | Noner float | Noner rJ)rr"r rJ)rrVr rJ)r r)r zWidgetList[Button])r zWidgetList[ButtonGroup[Any]])r zElementList[Caption])r zWidgetList[ChatInput])r zSequence[ChatMessage])r zWidgetList[Checkbox])r zElementList[Code])r zWidgetList[ColorPicker])r zSequence[Column])r zElementList[Dataframe])r zWidgetList[DateInput])r zElementList[Divider])r zElementList[Error])r zElementList[Exception])r zSequence[Expander])r zElementList[Header])r zElementList[Info])r zElementList[Json])r zElementList[Latex])r zElementList[Markdown])r zElementList[Metric])r zWidgetList[Multiselect[Any]])r zWidgetList[NumberInput])r zWidgetList[Radio[Any]])r zWidgetList[SelectSlider[Any]])r zWidgetList[Selectbox[Any]])r zWidgetList[Slider[Any]])r zElementList[Subheader])r zElementList[Success])r zSequence[Status])r zElementList[Table])r z Sequence[Tab])r zElementList[Text])r zWidgetList[TextArea])r zWidgetList[TextInput])r zWidgetList[TimeInput])r zElementList[Title])r zElementList[Toast])r zWidgetList[Toggle])r zElementList[Warning])r int)r zIterator[Node])rr#r r-)rrVr zSequence[Node])r rV)=rw __module__ __qualname____doc__rb classmethodrirfrrrrrpropertyrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r r rrrrrrQrRrSrJrJbs6z(,(,   %  &  .BCII8 "#'+(,     %  &     " "#'+(, / "/  / % / & /  / / bBC%>$%>:?%> %>%>R-1 $:)::  :x.2/.:   " " ! ! ' ' " " % % ' ' # #   ' '""  $ $ % % " "     $ $ # # ! !         # # ! ! & & ' '     ( ( $ $ ! ! $ $ " " ! !    &   $ $ % % % %         ! ! " ",2rRrJ)c __future__rrxtempfilerorpathlibrtypingrr unittest.mockrurllibrstreamlit.runtimer 5streamlit.runtime.caching.storage.dummy_cache_storager $streamlit.runtime.media_file_managerr +streamlit.runtime.memory_media_file_storager streamlit.runtime.pages_managerr +streamlit.runtime.scriptrunner.script_cacherstreamlit.runtime.secretsrstreamlit.runtime.state.commonr*streamlit.runtime.state.safe_session_stater%streamlit.runtime.state.session_staterstreamlit.source_utilr!streamlit.testing.v1.element_treerrrrrrrrrrrrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rA(streamlit.testing.v1.local_script_runnerrBstreamlit.testing.v1.utilrCstreamlit.utilrDcollections.abcrErFrG streamlit.proto.WidgetStates_pb2rHTemporaryDirectoryrmrJrQrRrSrAs#%#%BN8C-6G>4////////////`G:#<<= %( % % '@@rR