streamlit-nightly 1.43.2.dev20250307__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- streamlit/__init__.py +306 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +218 -0
- streamlit/cli_util.py +105 -0
- streamlit/column_config.py +56 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +126 -0
- streamlit/commands/execution_control.py +238 -0
- streamlit/commands/experimental_query_params.py +169 -0
- streamlit/commands/logo.py +189 -0
- streamlit/commands/navigation.py +385 -0
- streamlit/commands/page_config.py +311 -0
- streamlit/components/__init__.py +13 -0
- streamlit/components/lib/__init__.py +13 -0
- streamlit/components/lib/local_component_registry.py +84 -0
- streamlit/components/types/__init__.py +13 -0
- streamlit/components/types/base_component_registry.py +99 -0
- streamlit/components/types/base_custom_component.py +150 -0
- streamlit/components/v1/__init__.py +31 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +130 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +243 -0
- streamlit/config.py +1513 -0
- streamlit/config_option.py +311 -0
- streamlit/config_util.py +177 -0
- streamlit/connections/__init__.py +28 -0
- streamlit/connections/base_connection.py +174 -0
- streamlit/connections/snowflake_connection.py +562 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +425 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +210 -0
- streamlit/dataframe_util.py +1416 -0
- streamlit/delta_generator.py +602 -0
- streamlit/delta_generator_singletons.py +204 -0
- streamlit/deprecation_util.py +209 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +234 -0
- streamlit/elements/arrow.py +962 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +133 -0
- streamlit/elements/code.py +114 -0
- streamlit/elements/deck_gl_json_chart.py +546 -0
- streamlit/elements/dialog_decorator.py +267 -0
- streamlit/elements/doc_string.py +558 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +331 -0
- streamlit/elements/form.py +354 -0
- streamlit/elements/graphviz_chart.py +150 -0
- streamlit/elements/heading.py +302 -0
- streamlit/elements/html.py +105 -0
- streamlit/elements/iframe.py +191 -0
- streamlit/elements/image.py +196 -0
- streamlit/elements/json.py +139 -0
- streamlit/elements/layouts.py +879 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1157 -0
- streamlit/elements/lib/color_util.py +263 -0
- streamlit/elements/lib/column_config_utils.py +542 -0
- streamlit/elements/lib/column_types.py +2188 -0
- streamlit/elements/lib/dialog.py +147 -0
- streamlit/elements/lib/dicttools.py +154 -0
- streamlit/elements/lib/event_utils.py +37 -0
- streamlit/elements/lib/file_uploader_utils.py +66 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +441 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/mutable_status_container.py +183 -0
- streamlit/elements/lib/options_selector_utils.py +250 -0
- streamlit/elements/lib/pandas_styler_utils.py +274 -0
- streamlit/elements/lib/policies.py +194 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
- streamlit/elements/lib/subtitle_utils.py +176 -0
- streamlit/elements/lib/utils.py +250 -0
- streamlit/elements/map.py +508 -0
- streamlit/elements/markdown.py +277 -0
- streamlit/elements/media.py +793 -0
- streamlit/elements/metric.py +301 -0
- streamlit/elements/plotly_chart.py +546 -0
- streamlit/elements/progress.py +156 -0
- streamlit/elements/pyplot.py +194 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/spinner.py +113 -0
- streamlit/elements/text.py +76 -0
- streamlit/elements/toast.py +98 -0
- streamlit/elements/vega_charts.py +1984 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +310 -0
- streamlit/elements/widgets/button.py +1123 -0
- streamlit/elements/widgets/button_group.py +1008 -0
- streamlit/elements/widgets/camera_input.py +263 -0
- streamlit/elements/widgets/chat.py +647 -0
- streamlit/elements/widgets/checkbox.py +352 -0
- streamlit/elements/widgets/color_picker.py +265 -0
- streamlit/elements/widgets/data_editor.py +983 -0
- streamlit/elements/widgets/file_uploader.py +486 -0
- streamlit/elements/widgets/multiselect.py +338 -0
- streamlit/elements/widgets/number_input.py +545 -0
- streamlit/elements/widgets/radio.py +407 -0
- streamlit/elements/widgets/select_slider.py +437 -0
- streamlit/elements/widgets/selectbox.py +366 -0
- streamlit/elements/widgets/slider.py +880 -0
- streamlit/elements/widgets/text_widgets.py +628 -0
- streamlit/elements/widgets/time_widgets.py +970 -0
- streamlit/elements/write.py +574 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +61 -0
- streamlit/error_util.py +105 -0
- streamlit/errors.py +452 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +406 -0
- streamlit/file_util.py +247 -0
- streamlit/git_util.py +173 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +37 -0
- streamlit/hello/mapping_demo.py +114 -0
- streamlit/hello/plotting_demo.py +55 -0
- streamlit/hello/streamlit_app.py +55 -0
- streamlit/hello/utils.py +28 -0
- streamlit/logger.py +130 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +302 -0
- streamlit/net_util.py +125 -0
- streamlit/platform.py +33 -0
- streamlit/proto/Alert_pb2.py +29 -0
- streamlit/proto/Alert_pb2.pyi +90 -0
- streamlit/proto/AppPage_pb2.py +27 -0
- streamlit/proto/AppPage_pb2.pyi +64 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
- streamlit/proto/Arrow_pb2.py +33 -0
- streamlit/proto/Arrow_pb2.pyi +188 -0
- streamlit/proto/AudioInput_pb2.py +28 -0
- streamlit/proto/AudioInput_pb2.pyi +58 -0
- streamlit/proto/Audio_pb2.py +27 -0
- streamlit/proto/Audio_pb2.pyi +58 -0
- streamlit/proto/AuthRedirect_pb2.py +27 -0
- streamlit/proto/AuthRedirect_pb2.pyi +41 -0
- streamlit/proto/AutoRerun_pb2.py +27 -0
- streamlit/proto/AutoRerun_pb2.pyi +45 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +105 -0
- streamlit/proto/Balloons_pb2.py +27 -0
- streamlit/proto/Balloons_pb2.pyi +43 -0
- streamlit/proto/Block_pb2.py +53 -0
- streamlit/proto/Block_pb2.pyi +322 -0
- streamlit/proto/BokehChart_pb2.py +27 -0
- streamlit/proto/BokehChart_pb2.pyi +49 -0
- streamlit/proto/ButtonGroup_pb2.py +36 -0
- streamlit/proto/ButtonGroup_pb2.pyi +169 -0
- streamlit/proto/Button_pb2.py +27 -0
- streamlit/proto/Button_pb2.pyi +71 -0
- streamlit/proto/CameraInput_pb2.py +28 -0
- streamlit/proto/CameraInput_pb2.pyi +58 -0
- streamlit/proto/ChatInput_pb2.py +31 -0
- streamlit/proto/ChatInput_pb2.pyi +111 -0
- streamlit/proto/Checkbox_pb2.py +30 -0
- streamlit/proto/Checkbox_pb2.pyi +90 -0
- streamlit/proto/ClientState_pb2.py +30 -0
- streamlit/proto/ClientState_pb2.pyi +90 -0
- streamlit/proto/Code_pb2.py +27 -0
- streamlit/proto/Code_pb2.pyi +55 -0
- streamlit/proto/ColorPicker_pb2.py +28 -0
- streamlit/proto/ColorPicker_pb2.pyi +67 -0
- streamlit/proto/Common_pb2.py +51 -0
- streamlit/proto/Common_pb2.pyi +293 -0
- streamlit/proto/Components_pb2.py +35 -0
- streamlit/proto/Components_pb2.pyi +172 -0
- streamlit/proto/DataFrame_pb2.py +56 -0
- streamlit/proto/DataFrame_pb2.pyi +397 -0
- streamlit/proto/DateInput_pb2.py +28 -0
- streamlit/proto/DateInput_pb2.pyi +83 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
- streamlit/proto/Delta_pb2.py +31 -0
- streamlit/proto/Delta_pb2.pyi +74 -0
- streamlit/proto/DocString_pb2.py +29 -0
- streamlit/proto/DocString_pb2.pyi +93 -0
- streamlit/proto/DownloadButton_pb2.py +27 -0
- streamlit/proto/DownloadButton_pb2.pyi +70 -0
- streamlit/proto/Element_pb2.py +78 -0
- streamlit/proto/Element_pb2.pyi +312 -0
- streamlit/proto/Empty_pb2.py +27 -0
- streamlit/proto/Empty_pb2.pyi +36 -0
- streamlit/proto/Exception_pb2.py +27 -0
- streamlit/proto/Exception_pb2.pyi +72 -0
- streamlit/proto/Favicon_pb2.py +27 -0
- streamlit/proto/Favicon_pb2.pyi +40 -0
- streamlit/proto/FileUploader_pb2.py +28 -0
- streamlit/proto/FileUploader_pb2.pyi +78 -0
- streamlit/proto/ForwardMsg_pb2.py +53 -0
- streamlit/proto/ForwardMsg_pb2.pyi +293 -0
- streamlit/proto/GitInfo_pb2.py +29 -0
- streamlit/proto/GitInfo_pb2.pyi +83 -0
- streamlit/proto/GraphVizChart_pb2.py +27 -0
- streamlit/proto/GraphVizChart_pb2.pyi +53 -0
- streamlit/proto/Heading_pb2.py +27 -0
- streamlit/proto/Heading_pb2.pyi +56 -0
- streamlit/proto/Html_pb2.py +27 -0
- streamlit/proto/Html_pb2.pyi +42 -0
- streamlit/proto/IFrame_pb2.py +27 -0
- streamlit/proto/IFrame_pb2.pyi +59 -0
- streamlit/proto/Image_pb2.py +29 -0
- streamlit/proto/Image_pb2.pyi +84 -0
- streamlit/proto/Json_pb2.py +27 -0
- streamlit/proto/Json_pb2.pyi +53 -0
- streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
- streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
- streamlit/proto/LinkButton_pb2.py +27 -0
- streamlit/proto/LinkButton_pb2.pyi +58 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +51 -0
- streamlit/proto/Markdown_pb2.py +29 -0
- streamlit/proto/Markdown_pb2.pyi +86 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +101 -0
- streamlit/proto/MetricsEvent_pb2.py +30 -0
- streamlit/proto/MetricsEvent_pb2.pyi +200 -0
- streamlit/proto/MultiSelect_pb2.py +28 -0
- streamlit/proto/MultiSelect_pb2.pyi +81 -0
- streamlit/proto/NamedDataSet_pb2.py +28 -0
- streamlit/proto/NamedDataSet_pb2.pyi +59 -0
- streamlit/proto/Navigation_pb2.py +30 -0
- streamlit/proto/Navigation_pb2.pyi +84 -0
- streamlit/proto/NewSession_pb2.py +51 -0
- streamlit/proto/NewSession_pb2.pyi +481 -0
- streamlit/proto/NumberInput_pb2.py +30 -0
- streamlit/proto/NumberInput_pb2.pyi +121 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +126 -0
- streamlit/proto/PageInfo_pb2.py +27 -0
- streamlit/proto/PageInfo_pb2.pyi +43 -0
- streamlit/proto/PageLink_pb2.py +27 -0
- streamlit/proto/PageLink_pb2.pyi +63 -0
- streamlit/proto/PageNotFound_pb2.py +27 -0
- streamlit/proto/PageNotFound_pb2.pyi +42 -0
- streamlit/proto/PageProfile_pb2.py +31 -0
- streamlit/proto/PageProfile_pb2.pyi +127 -0
- streamlit/proto/PagesChanged_pb2.py +28 -0
- streamlit/proto/PagesChanged_pb2.pyi +48 -0
- streamlit/proto/ParentMessage_pb2.py +27 -0
- streamlit/proto/ParentMessage_pb2.pyi +46 -0
- streamlit/proto/PlotlyChart_pb2.py +31 -0
- streamlit/proto/PlotlyChart_pb2.pyi +131 -0
- streamlit/proto/Progress_pb2.py +27 -0
- streamlit/proto/Progress_pb2.pyi +43 -0
- streamlit/proto/Radio_pb2.py +28 -0
- streamlit/proto/Radio_pb2.pyi +84 -0
- streamlit/proto/RootContainer_pb2.py +27 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +28 -0
- streamlit/proto/Selectbox_pb2.pyi +80 -0
- streamlit/proto/SessionEvent_pb2.py +28 -0
- streamlit/proto/SessionEvent_pb2.pyi +62 -0
- streamlit/proto/SessionStatus_pb2.py +27 -0
- streamlit/proto/SessionStatus_pb2.pyi +57 -0
- streamlit/proto/Skeleton_pb2.py +29 -0
- streamlit/proto/Skeleton_pb2.pyi +71 -0
- streamlit/proto/Slider_pb2.py +32 -0
- streamlit/proto/Slider_pb2.pyi +142 -0
- streamlit/proto/Snow_pb2.py +27 -0
- streamlit/proto/Snow_pb2.pyi +43 -0
- streamlit/proto/Spinner_pb2.py +27 -0
- streamlit/proto/Spinner_pb2.pyi +49 -0
- streamlit/proto/TextArea_pb2.py +28 -0
- streamlit/proto/TextArea_pb2.pyi +80 -0
- streamlit/proto/TextInput_pb2.py +30 -0
- streamlit/proto/TextInput_pb2.pyi +107 -0
- streamlit/proto/Text_pb2.py +27 -0
- streamlit/proto/Text_pb2.pyi +46 -0
- streamlit/proto/TimeInput_pb2.py +28 -0
- streamlit/proto/TimeInput_pb2.pyi +74 -0
- streamlit/proto/Toast_pb2.py +27 -0
- streamlit/proto/Toast_pb2.pyi +45 -0
- streamlit/proto/VegaLiteChart_pb2.py +29 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
- streamlit/proto/Video_pb2.py +31 -0
- streamlit/proto/Video_pb2.pyi +117 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +126 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +60 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +982 -0
- streamlit/runtime/caching/__init__.py +98 -0
- streamlit/runtime/caching/cache_data_api.py +665 -0
- streamlit/runtime/caching/cache_errors.py +142 -0
- streamlit/runtime/caching/cache_resource_api.py +527 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +523 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +637 -0
- streamlit/runtime/caching/legacy_cache_api.py +169 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/connection_factory.py +436 -0
- streamlit/runtime/context.py +280 -0
- streamlit/runtime/credentials.py +364 -0
- streamlit/runtime/forward_msg_cache.py +296 -0
- streamlit/runtime/forward_msg_queue.py +240 -0
- streamlit/runtime/fragment.py +477 -0
- streamlit/runtime/media_file_manager.py +234 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +181 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +138 -0
- streamlit/runtime/metrics_util.py +486 -0
- streamlit/runtime/pages_manager.py +165 -0
- streamlit/runtime/runtime.py +792 -0
- streamlit/runtime/runtime_util.py +106 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +159 -0
- streamlit/runtime/scriptrunner/magic.py +273 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +756 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
- streamlit/runtime/secrets.py +534 -0
- streamlit/runtime/session_manager.py +394 -0
- streamlit/runtime/state/__init__.py +41 -0
- streamlit/runtime/state/common.py +191 -0
- streamlit/runtime/state/query_params.py +205 -0
- streamlit/runtime/state/query_params_proxy.py +218 -0
- streamlit/runtime/state/safe_session_state.py +138 -0
- streamlit/runtime/state/session_state.py +772 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +135 -0
- streamlit/runtime/stats.py +109 -0
- streamlit/runtime/uploaded_file_manager.py +148 -0
- streamlit/runtime/websocket_session_manager.py +167 -0
- streamlit/source_util.py +98 -0
- streamlit/static/favicon.png +0 -0
- streamlit/static/index.html +61 -0
- streamlit/static/static/css/index.Bmkmz40k.css +1 -0
- streamlit/static/static/css/index.DpJG_94W.css +1 -0
- streamlit/static/static/css/index.DzuxGC_t.css +1 -0
- streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
- streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
- streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
- streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
- streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
- streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
- streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
- streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
- streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
- streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
- streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
- streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
- streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
- streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
- streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
- streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
- streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
- streamlit/static/static/js/index.08vcOOvb.js +1 -0
- streamlit/static/static/js/index.0uqKfJUS.js +1 -0
- streamlit/static/static/js/index.B02M5u69.js +203 -0
- streamlit/static/static/js/index.B7mcZKMx.js +1 -0
- streamlit/static/static/js/index.BAQDHFA_.js +1 -0
- streamlit/static/static/js/index.BI60cMVr.js +2 -0
- streamlit/static/static/js/index.BLug2inK.js +1 -0
- streamlit/static/static/js/index.BM6TMY8g.js +2 -0
- streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
- streamlit/static/static/js/index.BZqa87a1.js +2 -0
- streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
- streamlit/static/static/js/index.BgVMiY_P.js +197 -0
- streamlit/static/static/js/index.BtuGy7By.js +6 -0
- streamlit/static/static/js/index.BuDuBmrs.js +1 -0
- streamlit/static/static/js/index.BvXU2oKV.js +1 -0
- streamlit/static/static/js/index.BxcwPacT.js +73 -0
- streamlit/static/static/js/index.CWX8KB81.js +1 -0
- streamlit/static/static/js/index.CXzZTo_q.js +1 -0
- streamlit/static/static/js/index.CcRWp_KL.js +1 -0
- streamlit/static/static/js/index.Cd-_xe55.js +3 -0
- streamlit/static/static/js/index.CdG2PXln.js +4537 -0
- streamlit/static/static/js/index.CjXvXmcP.js +1 -0
- streamlit/static/static/js/index.D1HZENZx.js +776 -0
- streamlit/static/static/js/index.D21Efo64.js +1617 -0
- streamlit/static/static/js/index.D9WgGVBx.js +7 -0
- streamlit/static/static/js/index.DEcsHtvb.js +12 -0
- streamlit/static/static/js/index.DFeMfr_K.js +1 -0
- streamlit/static/static/js/index.DHFBoItz.js +1 -0
- streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
- streamlit/static/static/js/index.DmuRkekN.js +3855 -0
- streamlit/static/static/js/index.Do6eY8sf.js +1 -0
- streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
- streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
- streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
- streamlit/static/static/js/index.H1U1IC_d.js +3 -0
- streamlit/static/static/js/index.g6p_4DPr.js +1 -0
- streamlit/static/static/js/index.g9x_GKss.js +1 -0
- streamlit/static/static/js/index.zo9jm08y.js +1 -0
- streamlit/static/static/js/input.DnaFglHq.js +2 -0
- streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
- streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
- streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
- streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
- streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
- streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
- streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
- streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
- streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
- streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
- streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
- streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
- streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
- streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
- streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
- streamlit/static/static/js/value.CgPGBV_l.js +1 -0
- streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
- streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
- streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
- streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
- streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
- streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
- streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
- streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
- streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
- streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
- streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
- streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
- streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
- streamlit/string_util.py +203 -0
- streamlit/temporary_directory.py +56 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1050 -0
- streamlit/testing/v1/element_tree.py +2083 -0
- streamlit/testing/v1/local_script_runner.py +180 -0
- streamlit/testing/v1/util.py +53 -0
- streamlit/time_util.py +75 -0
- streamlit/type_util.py +460 -0
- streamlit/url_util.py +122 -0
- streamlit/user_info.py +519 -0
- streamlit/util.py +72 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2869 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +406 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +233 -0
- streamlit/watcher/path_watcher.py +185 -0
- streamlit/watcher/polling_path_watcher.py +124 -0
- streamlit/watcher/util.py +207 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +353 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +369 -0
- streamlit/web/server/__init__.py +26 -0
- streamlit/web/server/app_static_file_handler.py +93 -0
- streamlit/web/server/authlib_tornado_integration.py +60 -0
- streamlit/web/server/browser_websocket_handler.py +246 -0
- streamlit/web/server/component_request_handler.py +116 -0
- streamlit/web/server/media_file_handler.py +141 -0
- streamlit/web/server/oauth_authlib_routes.py +176 -0
- streamlit/web/server/oidc_mixin.py +108 -0
- streamlit/web/server/routes.py +295 -0
- streamlit/web/server/server.py +479 -0
- streamlit/web/server/server_util.py +161 -0
- streamlit/web/server/stats_request_handler.py +95 -0
- streamlit/web/server/upload_file_request_handler.py +137 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
@@ -0,0 +1,508 @@
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
"""A wrapper for simple PyDeck scatter charts."""
|
16
|
+
|
17
|
+
from __future__ import annotations
|
18
|
+
|
19
|
+
import copy
|
20
|
+
import json
|
21
|
+
from typing import TYPE_CHECKING, Any, Final, cast
|
22
|
+
|
23
|
+
import streamlit.elements.deck_gl_json_chart as deck_gl_json_chart
|
24
|
+
from streamlit import config, dataframe_util
|
25
|
+
from streamlit.elements.lib.color_util import (
|
26
|
+
Color,
|
27
|
+
IntColorTuple,
|
28
|
+
is_color_like,
|
29
|
+
to_int_color_tuple,
|
30
|
+
)
|
31
|
+
from streamlit.errors import StreamlitAPIException
|
32
|
+
from streamlit.proto.DeckGlJsonChart_pb2 import DeckGlJsonChart as DeckGlJsonChartProto
|
33
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
34
|
+
|
35
|
+
if TYPE_CHECKING:
|
36
|
+
from collections.abc import Collection
|
37
|
+
|
38
|
+
from pandas import DataFrame
|
39
|
+
|
40
|
+
from streamlit.dataframe_util import Data
|
41
|
+
from streamlit.delta_generator import DeltaGenerator
|
42
|
+
|
43
|
+
# Map used as the basis for st.map.
|
44
|
+
_DEFAULT_MAP: Final[dict[str, Any]] = dict(deck_gl_json_chart.EMPTY_MAP)
|
45
|
+
|
46
|
+
# Other default parameters for st.map.
|
47
|
+
_DEFAULT_LAT_COL_NAMES: Final = {"lat", "latitude", "LAT", "LATITUDE"}
|
48
|
+
_DEFAULT_LON_COL_NAMES: Final = {"lon", "longitude", "LON", "LONGITUDE"}
|
49
|
+
_DEFAULT_COLOR: Final = (200, 30, 0, 160)
|
50
|
+
_DEFAULT_SIZE: Final = 100
|
51
|
+
_DEFAULT_ZOOM_LEVEL: Final = 12
|
52
|
+
_ZOOM_LEVELS: Final = [
|
53
|
+
360,
|
54
|
+
180,
|
55
|
+
90,
|
56
|
+
45,
|
57
|
+
22.5,
|
58
|
+
11.25,
|
59
|
+
5.625,
|
60
|
+
2.813,
|
61
|
+
1.406,
|
62
|
+
0.703,
|
63
|
+
0.352,
|
64
|
+
0.176,
|
65
|
+
0.088,
|
66
|
+
0.044,
|
67
|
+
0.022,
|
68
|
+
0.011,
|
69
|
+
0.005,
|
70
|
+
0.003,
|
71
|
+
0.001,
|
72
|
+
0.0005,
|
73
|
+
0.00025,
|
74
|
+
]
|
75
|
+
|
76
|
+
|
77
|
+
class MapMixin:
|
78
|
+
@gather_metrics("map")
|
79
|
+
def map(
|
80
|
+
self,
|
81
|
+
data: Data = None,
|
82
|
+
*,
|
83
|
+
latitude: str | None = None,
|
84
|
+
longitude: str | None = None,
|
85
|
+
color: None | str | Color = None,
|
86
|
+
size: None | str | float = None,
|
87
|
+
zoom: int | None = None,
|
88
|
+
use_container_width: bool = True,
|
89
|
+
width: int | None = None,
|
90
|
+
height: int | None = None,
|
91
|
+
) -> DeltaGenerator:
|
92
|
+
"""Display a map with a scatterplot overlaid onto it.
|
93
|
+
|
94
|
+
This is a wrapper around ``st.pydeck_chart`` to quickly create
|
95
|
+
scatterplot charts on top of a map, with auto-centering and auto-zoom.
|
96
|
+
|
97
|
+
When using this command, Mapbox provides the map tiles to render map
|
98
|
+
content. Note that Mapbox is a third-party product and Streamlit accepts
|
99
|
+
no responsibility or liability of any kind for Mapbox or for any content
|
100
|
+
or information made available by Mapbox.
|
101
|
+
|
102
|
+
Mapbox requires users to register and provide a token before users can
|
103
|
+
request map tiles. Currently, Streamlit provides this token for you, but
|
104
|
+
this could change at any time. We strongly recommend all users create and
|
105
|
+
use their own personal Mapbox token to avoid any disruptions to their
|
106
|
+
experience. You can do this with the ``mapbox.token`` config option. The
|
107
|
+
use of Mapbox is governed by Mapbox's Terms of Use.
|
108
|
+
|
109
|
+
To get a token for yourself, create an account at https://mapbox.com.
|
110
|
+
For more info on how to set config options, see
|
111
|
+
https://docs.streamlit.io/develop/api-reference/configuration/config.toml.
|
112
|
+
|
113
|
+
Parameters
|
114
|
+
----------
|
115
|
+
data : Anything supported by st.dataframe
|
116
|
+
The data to be plotted.
|
117
|
+
|
118
|
+
latitude : str or None
|
119
|
+
The name of the column containing the latitude coordinates of
|
120
|
+
the datapoints in the chart.
|
121
|
+
|
122
|
+
If None, the latitude data will come from any column named 'lat',
|
123
|
+
'latitude', 'LAT', or 'LATITUDE'.
|
124
|
+
|
125
|
+
longitude : str or None
|
126
|
+
The name of the column containing the longitude coordinates of
|
127
|
+
the datapoints in the chart.
|
128
|
+
|
129
|
+
If None, the longitude data will come from any column named 'lon',
|
130
|
+
'longitude', 'LON', or 'LONGITUDE'.
|
131
|
+
|
132
|
+
color : str or tuple or None
|
133
|
+
The color of the circles representing each datapoint.
|
134
|
+
|
135
|
+
Can be:
|
136
|
+
|
137
|
+
- None, to use the default color.
|
138
|
+
- A hex string like "#ffaa00" or "#ffaa0088".
|
139
|
+
- An RGB or RGBA tuple with the red, green, blue, and alpha
|
140
|
+
components specified as ints from 0 to 255 or floats from 0.0 to
|
141
|
+
1.0.
|
142
|
+
- The name of the column to use for the color. Cells in this column
|
143
|
+
should contain colors represented as a hex string or color tuple,
|
144
|
+
as described above.
|
145
|
+
|
146
|
+
size : str or float or None
|
147
|
+
The size of the circles representing each point, in meters.
|
148
|
+
|
149
|
+
This can be:
|
150
|
+
|
151
|
+
- None, to use the default size.
|
152
|
+
- A number like 100, to specify a single size to use for all
|
153
|
+
datapoints.
|
154
|
+
- The name of the column to use for the size. This allows each
|
155
|
+
datapoint to be represented by a circle of a different size.
|
156
|
+
|
157
|
+
zoom : int
|
158
|
+
Zoom level as specified in
|
159
|
+
https://wiki.openstreetmap.org/wiki/Zoom_levels.
|
160
|
+
|
161
|
+
use_container_width : bool
|
162
|
+
Whether to override the map's native width with the width of
|
163
|
+
the parent container. If ``use_container_width`` is ``True``
|
164
|
+
(default), Streamlit sets the width of the map to match the width
|
165
|
+
of the parent container. If ``use_container_width`` is ``False``,
|
166
|
+
Streamlit sets the width of the chart to fit its contents according
|
167
|
+
to the plotting library, up to the width of the parent container.
|
168
|
+
|
169
|
+
width : int or None
|
170
|
+
Desired width of the chart expressed in pixels. If ``width`` is
|
171
|
+
``None`` (default), Streamlit sets the width of the chart to fit
|
172
|
+
its contents according to the plotting library, up to the width of
|
173
|
+
the parent container. If ``width`` is greater than the width of the
|
174
|
+
parent container, Streamlit sets the chart width to match the width
|
175
|
+
of the parent container.
|
176
|
+
|
177
|
+
To use ``width``, you must set ``use_container_width=False``.
|
178
|
+
|
179
|
+
height : int or None
|
180
|
+
Desired height of the chart expressed in pixels. If ``height`` is
|
181
|
+
``None`` (default), Streamlit sets the height of the chart to fit
|
182
|
+
its contents according to the plotting library.
|
183
|
+
|
184
|
+
Examples
|
185
|
+
--------
|
186
|
+
>>> import streamlit as st
|
187
|
+
>>> import pandas as pd
|
188
|
+
>>> import numpy as np
|
189
|
+
>>>
|
190
|
+
>>> df = pd.DataFrame(
|
191
|
+
... np.random.randn(1000, 2) / [50, 50] + [37.76, -122.4],
|
192
|
+
... columns=["lat", "lon"],
|
193
|
+
... )
|
194
|
+
>>> st.map(df)
|
195
|
+
|
196
|
+
.. output::
|
197
|
+
https://doc-map.streamlit.app/
|
198
|
+
height: 600px
|
199
|
+
|
200
|
+
You can also customize the size and color of the datapoints:
|
201
|
+
|
202
|
+
>>> st.map(df, size=20, color="#0044ff")
|
203
|
+
|
204
|
+
And finally, you can choose different columns to use for the latitude
|
205
|
+
and longitude components, as well as set size and color of each
|
206
|
+
datapoint dynamically based on other columns:
|
207
|
+
|
208
|
+
>>> import streamlit as st
|
209
|
+
>>> import pandas as pd
|
210
|
+
>>> import numpy as np
|
211
|
+
>>>
|
212
|
+
>>> df = pd.DataFrame(
|
213
|
+
... {
|
214
|
+
... "col1": np.random.randn(1000) / 50 + 37.76,
|
215
|
+
... "col2": np.random.randn(1000) / 50 + -122.4,
|
216
|
+
... "col3": np.random.randn(1000) * 100,
|
217
|
+
... "col4": np.random.rand(1000, 4).tolist(),
|
218
|
+
... }
|
219
|
+
... )
|
220
|
+
>>>
|
221
|
+
>>> st.map(df, latitude="col1", longitude="col2", size="col3", color="col4")
|
222
|
+
|
223
|
+
.. output::
|
224
|
+
https://doc-map-color.streamlit.app/
|
225
|
+
height: 600px
|
226
|
+
|
227
|
+
"""
|
228
|
+
# This feature was turned off while we investigate why different
|
229
|
+
# map styles cause DeckGL to crash.
|
230
|
+
#
|
231
|
+
# For reference, this was the docstring for map_style:
|
232
|
+
#
|
233
|
+
# map_style : str or None
|
234
|
+
# One of Mapbox's map style URLs. A full list can be found here:
|
235
|
+
# https://docs.mapbox.com/api/maps/styles/#mapbox-styles
|
236
|
+
#
|
237
|
+
# This feature requires a Mapbox token. See the top of these docs
|
238
|
+
# for information on how to get one and set it up in Streamlit.
|
239
|
+
#
|
240
|
+
map_style = None
|
241
|
+
map_proto = DeckGlJsonChartProto()
|
242
|
+
deck_gl_json = to_deckgl_json(
|
243
|
+
data, latitude, longitude, size, color, map_style, zoom
|
244
|
+
)
|
245
|
+
marshall(
|
246
|
+
map_proto, deck_gl_json, use_container_width, width=width, height=height
|
247
|
+
)
|
248
|
+
return self.dg._enqueue("deck_gl_json_chart", map_proto)
|
249
|
+
|
250
|
+
@property
|
251
|
+
def dg(self) -> DeltaGenerator:
|
252
|
+
"""Get our DeltaGenerator."""
|
253
|
+
return cast("DeltaGenerator", self)
|
254
|
+
|
255
|
+
|
256
|
+
def to_deckgl_json(
|
257
|
+
data: Data,
|
258
|
+
lat: str | None,
|
259
|
+
lon: str | None,
|
260
|
+
size: None | str | float,
|
261
|
+
color: None | str | Collection[float],
|
262
|
+
map_style: str | None,
|
263
|
+
zoom: int | None,
|
264
|
+
) -> str:
|
265
|
+
if data is None:
|
266
|
+
return json.dumps(_DEFAULT_MAP)
|
267
|
+
|
268
|
+
# TODO(harahu): iterables don't have the empty attribute. This is either
|
269
|
+
# a bug, or the documented data type is too broad. One or the other
|
270
|
+
# should be addressed
|
271
|
+
if hasattr(data, "empty") and data.empty:
|
272
|
+
return json.dumps(_DEFAULT_MAP)
|
273
|
+
|
274
|
+
df = dataframe_util.convert_anything_to_pandas_df(data)
|
275
|
+
|
276
|
+
lat_col_name = _get_lat_or_lon_col_name(df, "latitude", lat, _DEFAULT_LAT_COL_NAMES)
|
277
|
+
lon_col_name = _get_lat_or_lon_col_name(
|
278
|
+
df, "longitude", lon, _DEFAULT_LON_COL_NAMES
|
279
|
+
)
|
280
|
+
size_arg, size_col_name = _get_value_and_col_name(df, size, _DEFAULT_SIZE)
|
281
|
+
color_arg, color_col_name = _get_value_and_col_name(df, color, _DEFAULT_COLOR)
|
282
|
+
|
283
|
+
# Drop columns we're not using.
|
284
|
+
# (Sort for tests)
|
285
|
+
used_columns = sorted(
|
286
|
+
[
|
287
|
+
c
|
288
|
+
for c in {lat_col_name, lon_col_name, size_col_name, color_col_name}
|
289
|
+
if c is not None
|
290
|
+
]
|
291
|
+
)
|
292
|
+
df = df[used_columns]
|
293
|
+
|
294
|
+
color_arg = _convert_color_arg_or_column(df, color_arg, color_col_name)
|
295
|
+
|
296
|
+
zoom, center_lat, center_lon = _get_viewport_details(
|
297
|
+
df, lat_col_name, lon_col_name, zoom
|
298
|
+
)
|
299
|
+
|
300
|
+
default = copy.deepcopy(_DEFAULT_MAP)
|
301
|
+
default["initialViewState"]["latitude"] = center_lat
|
302
|
+
default["initialViewState"]["longitude"] = center_lon
|
303
|
+
default["initialViewState"]["zoom"] = zoom
|
304
|
+
default["layers"] = [
|
305
|
+
{
|
306
|
+
"@@type": "ScatterplotLayer",
|
307
|
+
"getPosition": f"@@=[{lon_col_name}, {lat_col_name}]",
|
308
|
+
"getRadius": size_arg,
|
309
|
+
"radiusMinPixels": 3,
|
310
|
+
"radiusUnits": "meters",
|
311
|
+
"getFillColor": color_arg,
|
312
|
+
"data": df.to_dict("records"),
|
313
|
+
}
|
314
|
+
]
|
315
|
+
|
316
|
+
if map_style:
|
317
|
+
if not config.get_option("mapbox.token"):
|
318
|
+
raise StreamlitAPIException(
|
319
|
+
"You need a Mapbox token in order to select a map type. "
|
320
|
+
"Refer to the docs for st.map for more information."
|
321
|
+
)
|
322
|
+
default["mapStyle"] = map_style
|
323
|
+
|
324
|
+
return json.dumps(default)
|
325
|
+
|
326
|
+
|
327
|
+
def _get_lat_or_lon_col_name(
|
328
|
+
data: DataFrame,
|
329
|
+
human_readable_name: str,
|
330
|
+
col_name_from_user: str | None,
|
331
|
+
default_col_names: set[str],
|
332
|
+
) -> str:
|
333
|
+
"""Returns the column name to be used for latitude or longitude."""
|
334
|
+
|
335
|
+
if isinstance(col_name_from_user, str) and col_name_from_user in data.columns:
|
336
|
+
col_name = col_name_from_user
|
337
|
+
|
338
|
+
else:
|
339
|
+
# Try one of the default col_names:
|
340
|
+
candidate_col_name = None
|
341
|
+
|
342
|
+
for c in default_col_names:
|
343
|
+
if c in data.columns:
|
344
|
+
candidate_col_name = c
|
345
|
+
break
|
346
|
+
|
347
|
+
if candidate_col_name is None:
|
348
|
+
formatted_allowed_col_name = ", ".join(map(repr, sorted(default_col_names)))
|
349
|
+
formmated_col_names = ", ".join(map(repr, list(data.columns)))
|
350
|
+
|
351
|
+
raise StreamlitAPIException(
|
352
|
+
f"Map data must contain a {human_readable_name} column named: "
|
353
|
+
f"{formatted_allowed_col_name}. Existing columns: {formmated_col_names}"
|
354
|
+
)
|
355
|
+
else:
|
356
|
+
col_name = candidate_col_name
|
357
|
+
|
358
|
+
# Check that the column is well-formed.
|
359
|
+
# IMPLEMENTATION NOTE: We can't use isnull().values.any() because .values can return
|
360
|
+
# ExtensionArrays, which don't have a .any() method.
|
361
|
+
# (Read about ExtensionArrays here: # https://pandas.pydata.org/community/blog/extension-arrays.html)
|
362
|
+
# However, after a performance test I found the solution below runs basically as
|
363
|
+
# fast as .values.any().
|
364
|
+
if any(data[col_name].isna().array):
|
365
|
+
raise StreamlitAPIException(
|
366
|
+
f"Column {col_name} is not allowed to contain null values, such "
|
367
|
+
"as NaN, NaT, or None."
|
368
|
+
)
|
369
|
+
|
370
|
+
return col_name
|
371
|
+
|
372
|
+
|
373
|
+
def _get_value_and_col_name(
|
374
|
+
data: DataFrame,
|
375
|
+
value_or_name: Any,
|
376
|
+
default_value: Any,
|
377
|
+
) -> tuple[Any, str | None]:
|
378
|
+
"""Take a value_or_name passed in by the Streamlit developer and return a PyDeck
|
379
|
+
argument and column name for that property.
|
380
|
+
|
381
|
+
This is used for the size and color properties of the chart.
|
382
|
+
|
383
|
+
Example:
|
384
|
+
- If the user passes size=None, this returns the default size value and no column.
|
385
|
+
- If the user passes size=42, this returns 42 and no column.
|
386
|
+
- If the user passes size="my_col_123", this returns "@@=my_col_123" and "my_col_123".
|
387
|
+
"""
|
388
|
+
|
389
|
+
pydeck_arg: str | float
|
390
|
+
|
391
|
+
if isinstance(value_or_name, str) and value_or_name in data.columns:
|
392
|
+
col_name = value_or_name
|
393
|
+
pydeck_arg = f"@@={col_name}"
|
394
|
+
else:
|
395
|
+
col_name = None
|
396
|
+
|
397
|
+
if value_or_name is None:
|
398
|
+
pydeck_arg = default_value
|
399
|
+
else:
|
400
|
+
pydeck_arg = value_or_name
|
401
|
+
|
402
|
+
return pydeck_arg, col_name
|
403
|
+
|
404
|
+
|
405
|
+
def _convert_color_arg_or_column(
|
406
|
+
data: DataFrame,
|
407
|
+
color_arg: str | Color,
|
408
|
+
color_col_name: str | None,
|
409
|
+
) -> None | str | IntColorTuple:
|
410
|
+
"""Converts color to a format accepted by PyDeck.
|
411
|
+
|
412
|
+
For example:
|
413
|
+
- If color_arg is "#fff", then returns (255, 255, 255, 255).
|
414
|
+
- If color_col_name is "my_col_123", then it converts everything in column my_col_123 to
|
415
|
+
an accepted color format such as (0, 100, 200, 255).
|
416
|
+
|
417
|
+
NOTE: This function mutates the data argument.
|
418
|
+
"""
|
419
|
+
|
420
|
+
color_arg_out: None | str | IntColorTuple = None
|
421
|
+
|
422
|
+
if color_col_name is not None:
|
423
|
+
# Convert color column to the right format.
|
424
|
+
if len(data[color_col_name]) > 0 and is_color_like(
|
425
|
+
data[color_col_name].iloc[0]
|
426
|
+
):
|
427
|
+
# Use .loc[] to avoid a SettingWithCopyWarning in some cases.
|
428
|
+
data.loc[:, color_col_name] = data.loc[:, color_col_name].map(
|
429
|
+
to_int_color_tuple
|
430
|
+
)
|
431
|
+
else:
|
432
|
+
raise StreamlitAPIException(
|
433
|
+
f'Column "{color_col_name}" does not appear to contain valid colors.'
|
434
|
+
)
|
435
|
+
|
436
|
+
# This is guaranteed to be a str because of _get_value_and_col_name
|
437
|
+
assert isinstance(color_arg, str)
|
438
|
+
color_arg_out = color_arg
|
439
|
+
|
440
|
+
elif color_arg is not None:
|
441
|
+
color_arg_out = to_int_color_tuple(color_arg)
|
442
|
+
|
443
|
+
return color_arg_out
|
444
|
+
|
445
|
+
|
446
|
+
def _get_viewport_details(
|
447
|
+
data: DataFrame, lat_col_name: str, lon_col_name: str, zoom: int | None
|
448
|
+
) -> tuple[int, float, float]:
|
449
|
+
"""Auto-set viewport when not fully specified by user."""
|
450
|
+
min_lat = data[lat_col_name].min()
|
451
|
+
max_lat = data[lat_col_name].max()
|
452
|
+
min_lon = data[lon_col_name].min()
|
453
|
+
max_lon = data[lon_col_name].max()
|
454
|
+
center_lat = (max_lat + min_lat) / 2.0
|
455
|
+
center_lon = (max_lon + min_lon) / 2.0
|
456
|
+
range_lon = abs(max_lon - min_lon)
|
457
|
+
range_lat = abs(max_lat - min_lat)
|
458
|
+
|
459
|
+
if zoom is None:
|
460
|
+
if range_lon > range_lat:
|
461
|
+
longitude_distance = range_lon
|
462
|
+
else:
|
463
|
+
longitude_distance = range_lat
|
464
|
+
zoom = _get_zoom_level(longitude_distance)
|
465
|
+
|
466
|
+
return zoom, center_lat, center_lon
|
467
|
+
|
468
|
+
|
469
|
+
def _get_zoom_level(distance: float) -> int:
|
470
|
+
"""Get the zoom level for a given distance in degrees.
|
471
|
+
|
472
|
+
See https://wiki.openstreetmap.org/wiki/Zoom_levels for reference.
|
473
|
+
|
474
|
+
Parameters
|
475
|
+
----------
|
476
|
+
distance : float
|
477
|
+
How many degrees of longitude should fit in the map.
|
478
|
+
|
479
|
+
Returns
|
480
|
+
-------
|
481
|
+
int
|
482
|
+
The zoom level, from 0 to 20.
|
483
|
+
|
484
|
+
"""
|
485
|
+
for i in range(len(_ZOOM_LEVELS) - 1):
|
486
|
+
if _ZOOM_LEVELS[i + 1] < distance <= _ZOOM_LEVELS[i]:
|
487
|
+
return i
|
488
|
+
|
489
|
+
# For small number of points the default zoom level will be used.
|
490
|
+
return _DEFAULT_ZOOM_LEVEL
|
491
|
+
|
492
|
+
|
493
|
+
def marshall(
|
494
|
+
pydeck_proto: DeckGlJsonChartProto,
|
495
|
+
pydeck_json: str,
|
496
|
+
use_container_width: bool,
|
497
|
+
height: int | None = None,
|
498
|
+
width: int | None = None,
|
499
|
+
) -> None:
|
500
|
+
pydeck_proto.json = pydeck_json
|
501
|
+
pydeck_proto.use_container_width = use_container_width
|
502
|
+
|
503
|
+
if width:
|
504
|
+
pydeck_proto.width = width
|
505
|
+
if height:
|
506
|
+
pydeck_proto.height = height
|
507
|
+
|
508
|
+
pydeck_proto.id = ""
|