From 579c5234aae83623a95d6861504bbf0e1d7fb166 Mon Sep 17 00:00:00 2001 From: samlamont Date: Fri, 18 Oct 2024 16:08:13 -0400 Subject: [PATCH] Updates --- .github/workflows/docker_publish.yml | 8 +- Dockerfile | 48 +- images/dashboard_icon1.png | Bin 0 -> 22477 bytes images/dashboard_icon2.png | Bin 0 -> 30189 bytes playground/dashboard_funcs.py | 18 +- playground/jupyter-panel-proxy.yml | 5 + playground/panel_dashboard.ipynb | 212 ------ playground/panel_dashboard.py | 52 +- playground/panel_requirements.txt | 963 --------------------------- playground/start_dashboard.sh | 1 + scripts/dashboard.desktop | 2 +- 11 files changed, 67 insertions(+), 1242 deletions(-) create mode 100755 images/dashboard_icon1.png create mode 100755 images/dashboard_icon2.png create mode 100644 playground/jupyter-panel-proxy.yml delete mode 100644 playground/panel_dashboard.ipynb delete mode 100644 playground/panel_requirements.txt diff --git a/.github/workflows/docker_publish.yml b/.github/workflows/docker_publish.yml index 1eec5fc..0934e96 100644 --- a/.github/workflows/docker_publish.yml +++ b/.github/workflows/docker_publish.yml @@ -122,7 +122,7 @@ jobs: with: images: ${{ env.AWS_REGISTRY }}/${{ github.event.repository.name }} - # Build and push Docker image with Buildx (don't push on PR) + # Build and push Docker image # https://github.com/docker/build-push-action - name: Build and push Docker image id: build-and-push-aws @@ -132,9 +132,9 @@ jobs: push: true tags: ${{ steps.meta-aws.outputs.tags }} labels: ${{ steps.meta-aws.outputs.labels }} - build-args: | - AWS_ACCESS_KEY_ID=${{ secrets.AWS_READ_ONLY_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_READ_ONLY_SECRET_ACCESS_KEY_ID }} + # build-args: | + # AWS_ACCESS_KEY_ID=${{ secrets.AWS_READ_ONLY_ACCESS_KEY_ID }} + # AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_READ_ONLY_SECRET_ACCESS_KEY_ID }} # - name: Build and push # uses: docker/build-push-action@v6 diff --git a/Dockerfile b/Dockerfile index 0a78b96..47ec830 100755 --- a/Dockerfile +++ b/Dockerfile @@ -4,13 +4,15 @@ # https://github.com/2i2c-org/infrastructure/issues/1444#issuecomment-1187405324 FROM pangeo/pangeo-notebook:2024.10.01 +# FROM 935462133478.dkr.ecr.us-east-2.amazonaws.com/teehr:v0.4-beta USER root ENV DEBIAN_FRONTEND=noninteractive ENV PATH ${NB_PYTHON_PREFIX}/bin:$PATH -ARG AWS_ACCESS_KEY_ID -ARG AWS_SECRET_ACCESS_KEY +# # For local testing +# ARG AWS_ACCESS_KEY_ID +# ARG AWS_SECRET_ACCESS_KEY # Needed for apt-key to work RUN apt-get update -qq --yes > /dev/null && \ @@ -46,7 +48,7 @@ RUN wget -q "https://sourceforge.net/projects/turbovnc/files/${TURBOVNC_VERSION} && ln -s /opt/TurboVNC/bin/* /usr/local/bin/ \ && rm -rf /var/lib/apt/lists/* -RUN mamba install -n ${CONDA_ENV} -y websockify voila +RUN mamba install -n ${CONDA_ENV} -y websockify ipywidgets-bokeh # Install jupyter-remote-desktop-proxy with compatible npm version RUN export PATH=${NB_PYTHON_PREFIX}/bin:${PATH} \ @@ -60,38 +62,22 @@ RUN pip install 'teehr @ git+https://github.com/RTIInternational/teehr@v0.4-beta # Install git-lfs RUN apt-get update && apt-get install git-lfs -y -# Install jupyter-server-proxy? - -# # Download FEWS binaries from s3? -# RUN aws s3 cp s3://ciroh-rti-hefs-data/fews-NA-202102-115469-bin.zip /opt/fews/fews-NA-202102-115469-bin.zip -# RUN unzip /opt/fews/fews-NA-202102-115469-bin.zip -d /opt/fews/ - # Copy in FEWS binaries from local directory COPY fews/fews-NA-202102-115469-bin.zip /opt/fews/fews-NA-202102-115469-bin.zip RUN unzip /opt/fews/fews-NA-202102-115469-bin.zip -d /opt/fews/ \ && chown -R jovyan:jovyan /opt/fews -RUN mkdir /opt/data \ - && chown -R jovyan:jovyan /opt/data - -# Copy in the python notebook and scripts - -# IPywidgets -# COPY scripts/dashboard.ipynb scripts/dashboard_funcs.py scripts/start_dashboard.sh /opt/hefs_fews_dashboard/ -# COPY images/index_getting_started.svg /opt/hefs_fews_dashboard/index_getting_started.svg -# COPY images/CIROHLogo_200x200.png /opt/hefs_fews_dashboard/CIROHLogo_200x200.png # Panel COPY playground/panel_dashboard.py playground/dashboard_funcs.py playground/start_dashboard.sh /opt/hefs_fews_dashboard/ COPY playground/geo/rfc_boundaries.geojson /opt/hefs_fews_dashboard/rfc_boundaries.geojson -COPY images/index_getting_started.svg /opt/hefs_fews_dashboard/index_getting_started.svg +# COPY images/index_getting_started.svg /opt/hefs_fews_dashboard/index_getting_started.svg +COPY images/dashboard_icon2.png /opt/hefs_fews_dashboard/dashboard_icon2.png COPY images/CIROHLogo_200x200.png /opt/hefs_fews_dashboard/CIROHLogo_200x200.png -RUN chown -R jovyan:jovyan /opt/hefs_fews_dashboard && chmod +x /opt/hefs_fews_dashboard/start_dashboard.sh -COPY playground/panel_requirements.txt /opt/hefs_fews_dashboard/ -RUN pip install -r /opt/hefs_fews_dashboard/panel_requirements.txt -# Create Desktop dir and copy in the dashboard desktop file COPY scripts/dashboard.desktop /opt/hefs_fews_dashboard/dashboard.desktop -RUN chmod +x /opt/hefs_fews_dashboard/dashboard.desktop + +RUN chown -R jovyan:jovyan /opt/hefs_fews_dashboard && chmod +x /opt/hefs_fews_dashboard/start_dashboard.sh \ + && chmod +x /opt/hefs_fews_dashboard/dashboard.desktop # Install Firefox RUN wget -P Downloads https://ftp.mozilla.org/pub/firefox/releases/131.0b9/linux-x86_64/en-US/firefox-131.0b9.tar.bz2 \ @@ -107,18 +93,18 @@ RUN wget -P Downloads https://ftp.mozilla.org/pub/firefox/releases/131.0b9/linux # $$ echo 'Package: *Pin: origin packages.mozilla.orgPin-Priority: 1000' | tee /etc/apt/preferences.d/mozilla \ # && apt-get update && apt-get install firefox -y -# COPY playground/jupyter-panel-proxy.yml /opt/hefs_fews_dashboard/jupyter-panel-proxy.yml +# COPY playground/jupyter-panel-proxy.yml /etc/jupyter/jupyter-panel-proxy.yml # RUN jupyter server extension enable panel.io.jupyter_server_extension - # ENV BOKEH_ALLOW_WS_ORIGIN "*" -# Run the web service on container startup. -# CMD panel serve /opt/hefs_fews_dashboard/panel_dashboard.py --allow-websocket-origin="*" --port 8888 --autoreload --address 0.0.0.0 --static-dirs +# For local testing +# RUN chown -R jovyan:jovyan .aws USER ${NB_USER} -RUN aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID \ - && aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY \ - && aws configure set default.region us-east-2 +# # For local testing +# RUN aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID \ +# && aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY \ +# && aws configure set default.region us-east-2 WORKDIR /home/jovyan \ No newline at end of file diff --git a/images/dashboard_icon1.png b/images/dashboard_icon1.png new file mode 100755 index 0000000000000000000000000000000000000000..c3e88eabe7ad1d9e4695d0a284365ecc85d7bbac GIT binary patch literal 22477 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 Xur-eyGY9^f6{M=D^|D0X;`9Fi8t<_; literal 0 HcmV?d00001 diff --git a/playground/dashboard_funcs.py b/playground/dashboard_funcs.py index 73ec0ea..bf2cb1a 100644 --- a/playground/dashboard_funcs.py +++ b/playground/dashboard_funcs.py @@ -5,6 +5,7 @@ from typing import Union, List from concurrent import futures import subprocess +import logging import boto3 @@ -14,6 +15,20 @@ s3_client = boto3.client('s3') +def set_up_logger(file_path: Union[str, Path]) -> logging.Logger: + """Set up a logger for the dashboard.""" + logger = logging.getLogger("HEFS-Dashboard") + logger.setLevel(logging.INFO) + handler = logging.FileHandler(file_path) + handler.setLevel(logging.INFO) + formatter = logging.Formatter( + '%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s' + ) + handler.setFormatter(formatter) + logger.addHandler(handler) + return logger + + def extract_archive( archive: Union[str, Path], extract_path: Union[str, Path] @@ -61,12 +76,13 @@ def write_shell_file( def write_fews_desktop_shortcut( output_filepath: Union[str, Path], shell_script_filepath: Union[str, Path], + rfc_name: str ) -> None: """Write a desktop shortcut file to the remote desktop.""" os.umask(0) with open(Path(output_filepath), "w", opener=_opener) as f: f.write("[Desktop Entry]\n") - f.write(f"Name=FEWS.{Path(output_filepath).name}\n") + f.write(f"Name=FEWS.{rfc_name}\n") f.write("Type=Application\n") f.write(f"Exec={shell_script_filepath}\n") f.write("Terminal=false\n") diff --git a/playground/jupyter-panel-proxy.yml b/playground/jupyter-panel-proxy.yml new file mode 100644 index 0000000..68ddacc --- /dev/null +++ b/playground/jupyter-panel-proxy.yml @@ -0,0 +1,5 @@ +# jupyter-panel-proxy.yml +apps: + - /opt/hefs_fews_dashboard/panel_dashboard.py +command: panel serve /opt/hefs_fews_dashboard/panel_dashboard.py --port 8888 --allow-websocket-origin="*" +absolute-url: True \ No newline at end of file diff --git a/playground/panel_dashboard.ipynb b/playground/panel_dashboard.ipynb deleted file mode 100644 index c04041c..0000000 --- a/playground/panel_dashboard.ipynb +++ /dev/null @@ -1,212 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n const py_version = '3.6.0'.replace('rc', '-rc.').replace('.dev', '-dev.');\n const reloading = false;\n const Bokeh = root.Bokeh;\n\n // Set a timeout for this load but only if we are not already initializing\n if (typeof (root._bokeh_timeout) === \"undefined\" || (force || !root._bokeh_is_initializing)) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n // Don't load bokeh if it is still initializing\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n } else if (js_urls.length === 0 && js_modules.length === 0 && Object.keys(js_exports).length === 0) {\n // There is nothing to load\n run_callbacks();\n return null;\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error(e) {\n const src_el = e.srcElement\n console.error(\"failed to load \" + (src_el.href || src_el.src));\n }\n\n const skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {}, 'shim': {}});\n root._bokeh_is_loading = css_urls.length + 0;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n const existing_stylesheets = []\n const links = document.getElementsByTagName('link')\n for (let i = 0; i < links.length; i++) {\n const link = links[i]\n if (link.href != null) {\n existing_stylesheets.push(link.href)\n }\n }\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const escaped = encodeURI(url)\n if (existing_stylesheets.indexOf(escaped) !== -1) {\n on_load()\n continue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } var existing_scripts = []\n const scripts = document.getElementsByTagName('script')\n for (let i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n existing_scripts.push(script.src)\n }\n }\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (let i = 0; i < js_modules.length; i++) {\n const url = js_modules[i];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) !== -1 || existing_scripts.indexOf(escaped) !== -1) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n for (const name in js_exports) {\n const url = js_exports[name];\n const escaped = encodeURI(url)\n if (skip.indexOf(escaped) >= 0 || root[name] != null) {\n if (!window.requirejs) {\n on_load();\n }\n continue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.holoviz.org/panel/1.5.2/dist/bundled/reactiveesm/es-module-shims@^1.10.0/dist/es-module-shims.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.0.min.js\", \"https://cdn.holoviz.org/panel/1.5.2/dist/panel.min.js\"];\n const js_modules = [];\n const js_exports = {};\n const css_urls = [\"https://cdn.holoviz.org/panel/1.5.2/dist/bundled/font-awesome/css/all.min.css\"];\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (let i = 0; i < inline_js.length; i++) {\n try {\n inline_js[i].call(root, root.Bokeh);\n } catch(e) {\n if (!reloading) {\n throw e;\n }\n }\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n var NewBokeh = root.Bokeh;\n if (Bokeh.versions === undefined) {\n Bokeh.versions = new Map();\n }\n if (NewBokeh.version !== Bokeh.version) {\n Bokeh.versions.set(NewBokeh.version, NewBokeh)\n }\n root.Bokeh = Bokeh;\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n // If the timeout and bokeh was not successfully loaded we reset\n // everything and try loading again\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n root._bokeh_is_loading = 0\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n const bokeh_loaded = root.Bokeh != null && (root.Bokeh.version === py_version || (root.Bokeh.versions !== undefined && root.Bokeh.versions.has(py_version)));\n if (!reloading && !bokeh_loaded) {\n if (root.Bokeh) {\n root.Bokeh = undefined;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));", - "application/vnd.holoviews_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n", - "application/vnd.holoviews_load.v0+json": "" - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.holoviews_exec.v0+json": "", - "text/html": [ - "
\n", - "
\n", - "
\n", - "" - ] - }, - "metadata": { - "application/vnd.holoviews_exec.v0+json": { - "id": "b2c53e48-9844-4fd5-bcab-85eeab9a513f" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "import panel as pn\n", - "from ipyleaflet import Map, Marker\n", - "\n", - "pn.extension(\"ipywidgets\", sizing_mode=\"stretch_width\")" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "ACCENT_BASE_COLOR = \"#DAA520\"\n", - "\n", - "\n", - "def get_marker_and_map():\n", - " center = (52.204793, 360.121558)\n", - "\n", - " lmap = Map(center=center, zoom=15, height=500)\n", - "\n", - " marker = Marker(location=center, draggable=True)\n", - " lmap.add_layer(marker)\n", - " lmap.layout.height=\"50%\"\n", - " lmap.layout.width=\"100%\"\n", - " return marker, lmap\n", - "\n", - "marker, lmap = get_marker_and_map()\n", - "\n", - "json_widget = pn.pane.JSON({}, height=75)\n", - "\n", - "def on_location_changed(event):\n", - " new = event[\"new\"]\n", - " json_widget.object = {\"x\": new[0], \"y\": new[1]}\n", - "marker.observe(on_location_changed, 'location')\n", - "\n", - "component = pn.Column(\n", - " pn.panel(lmap, sizing_mode=\"stretch_both\", min_height=500),\n", - " json_widget\n", - ")\n", - "\n", - "template = pn.template.FastListTemplate(\n", - " site=\"Awesome Panel\",\n", - " title=\"IPyLeaflet\",\n", - " logo=\"https://panel.holoviz.org/_static/logo_stacked.png\",\n", - " header_background=ACCENT_BASE_COLOR,\n", - " accent_base_color=ACCENT_BASE_COLOR,\n", - " main=[component],\n", - ").servable()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/playground/panel_dashboard.py b/playground/panel_dashboard.py index 23bc603..f5cbf25 100644 --- a/playground/panel_dashboard.py +++ b/playground/panel_dashboard.py @@ -3,22 +3,21 @@ import panel as pn from ipyleaflet import Map, GeoJSON -# import param from dashboard_funcs import ( create_start_standalone_command, write_shell_file, s3_download_file, write_fews_desktop_shortcut, - s3_download_directory_cli + s3_download_directory_cli, + set_up_logger ) pn.extension("ipywidgets", sizing_mode="stretch_width") ACCENT_BASE_COLOR = "#5d6d7e" -RFC_BOUNDARIES = "/home/sam/git/hefs-fews-hub/playground/geo/rfc_boundaries.geojson" -# RFC_BOUNDARIES = "/opt/hefs_fews_dashboard/rfc_boundaries.geojson" +RFC_BOUNDARIES = "/opt/hefs_fews_dashboard/rfc_boundaries.geojson" FEWS_INSTALL_DIR = Path("/opt", "fews") MAP_CENTER_X = 38.80 MAP_CENTER_Y = -99.14 @@ -54,16 +53,6 @@ def turn_on_indeterminate(): return -# def download_configs_button_click(event): -# rfc_id = rfc_selector.value -# s3_download_directory_cli( -# f"{rfc_id}/Config", -# download_dir_text.value -# ) -# indeterminate.name = "Download Complete" -# return - - def on_geojson_click(event, feature, **kwargs): rfc_selector.value = feature['properties']["BASIN_ID"] return @@ -87,7 +76,7 @@ def download_historical_data(event) -> None: "does not exist. Please create it first!" ) - print(f"Downloading historical data to {fews_download_dir.as_posix()}...") + logger.info(f"Downloading historical data to {fews_download_dir.as_posix()}...") s3_download_directory_cli( prefix=f"{rfc_selector.value}/historicalData", local=Path( @@ -95,7 +84,7 @@ def download_historical_data(event) -> None: f"{rfc_selector.value}/cardfiles" ).as_posix() ) - print("Data download complete.") + logger.info("Data download complete.") def install_fews_standalone(event) -> None: @@ -103,34 +92,37 @@ def install_fews_standalone(event) -> None: turn_on_indeterminate() fews_download_dir = Path(download_dir_text.value) if not fews_download_dir.exists(): - print(f"The directory: {fews_download_dir}, does not exist. Please create it first!") + logger.info(f"The directory: {fews_download_dir}, does not exist. Please create it first!") raise ValueError(f"The directory: {fews_download_dir}, does not exist. Please create it first!") # 1. Download sa from S3 - print(f"Downloading RFC configuration to {fews_download_dir.as_posix()}...This will take a few minutes...") + logger.info(f"Downloading {rfc_selector.value} configuration to {fews_download_dir.as_posix()}...This will take a few minutes...") s3_download_directory_cli( prefix=f"{rfc_selector.value}/Config", local=Path(fews_download_dir, f"{rfc_selector.value}/Config").as_posix(), ) # 2. Create the bash command to run the standalone configuration + logger.info("Creating bash command to start FEWS...") sa_dir_path = Path(fews_download_dir, rfc_selector.value) bash_command_str = create_start_standalone_command( fews_root_dir=FEWS_INSTALL_DIR.as_posix(), configuration_dir=sa_dir_path.as_posix() ) # 3. Write the command to start FEWS to a shell script + logger.info("Writing shell script to start FEWS...") shell_script_filepath = Path(sa_dir_path, "start_fews_standalone.sh") write_shell_file(shell_script_filepath, bash_command_str) # 4. Copy in patch file for the downloaded standalone config. - print("Downloading patch file and global properties...") + logger.info("Downloading patch file and global properties...") s3_download_file( remote_filepath="fews-install/fews-NA-202102-125264-patch.jar", local_filepath=Path(sa_dir_path, "fews-NA-202102-125264-patch.jar") ) + logger.info("Downloading sa_global.properties...Temporarily to Config dir.") s3_download_file( remote_filepath=f"{rfc_selector.value}/sa_global.properties", - local_filepath=Path(sa_dir_path, "sa_global.properties") + local_filepath=Path(sa_dir_path, "Config", "sa_global.properties") ) # 5. Create FEWS desktop shortcut that calls the shell script desktop_shortcut_filepath = Path( @@ -138,37 +130,41 @@ def install_fews_standalone(event) -> None: "Desktop", f"{sa_dir_path.name}.desktop" ) - print(f"Creating FEWS desktop shortcut...{desktop_shortcut_filepath}") + logger.info(f"Creating FEWS desktop shortcut...{desktop_shortcut_filepath}") write_fews_desktop_shortcut( desktop_shortcut_filepath, - shell_script_filepath + shell_script_filepath, + rfc_selector.value ) turn_off_indeterminate() - print("Installation complete.") + logger.info("Installation complete.") return +# MAP (ipyleaflet) with open(RFC_BOUNDARIES) as f: geojson_data = json.load(f) + geojson_layer = GeoJSON( data=geojson_data, hover_style={ 'color': 'red', 'dashArray': '0', 'fillOpacity': 0.6 }, ) - - lmap = get_marker_and_map() - geojson_layer.on_click(on_geojson_click) # WIDGETS +rfc_selector = pn.widgets.Select(name="", options=RFC_IDS, value=RFC_IDS[5]) download_dir_text = pn.widgets.TextInput( name='Directory to download the data:', value='/home/jovyan' ) +logger_filepath = Path(download_dir_text.value, "dashboard.log") +logger = set_up_logger(logger_filepath) + download_configs_button = pn.widgets.Button( name='Download Configs', button_type='primary' @@ -181,8 +177,6 @@ def install_fews_standalone(event) -> None: ) download_data_button.on_click(download_historical_data) -rfc_selector = pn.widgets.Select(name="", options=RFC_IDS, value=RFC_IDS[5]) - indeterminate = pn.indicators.Progress( name='Indeterminate Progress', active=False, @@ -191,7 +185,6 @@ def install_fews_standalone(event) -> None: ) # LAYOUT - download_row = pn.Row( rfc_selector, download_configs_button, @@ -205,7 +198,6 @@ def install_fews_standalone(event) -> None: pn.Row(indeterminate) ) - template = pn.template.FastListTemplate( site="HEFS-FEWS", title="Exploration System Dashboard", diff --git a/playground/panel_requirements.txt b/playground/panel_requirements.txt deleted file mode 100644 index e22644e..0000000 --- a/playground/panel_requirements.txt +++ /dev/null @@ -1,963 +0,0 @@ -anyio==4.4.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94 \ - --hash=sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7 -appnope==0.1.4 ; python_version >= "3.10" and python_version < "4.0" and platform_system == "Darwin" \ - --hash=sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee \ - --hash=sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c -asttokens==2.4.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24 \ - --hash=sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0 -bleach==6.1.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe \ - --hash=sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6 -bokeh==3.6.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0032dc1e76ad097b07626e51584685ff48c65481fbaaad105663b1046165867a \ - --hash=sha256:699e0df76cdfe54b5f574738647bd0ce230fa44fa0fcda5923e1f0f550f83d74 -branca==0.8.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:1f8fd0d2f3b7548f2c146093932be5d3064ba21eee6cebf92d416b7f9092324f \ - --hash=sha256:e78d5be39c8799a42e5c2dd1145a797a3cefc099537907bc1e4c43b6b55f7fa4 -certifi==2024.8.30 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8 \ - --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 -cffi==1.17.1 ; python_version >= "3.10" and python_version < "4.0" and implementation_name == "pypy" \ - --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \ - --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \ - --hash=sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1 \ - --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \ - --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \ - --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \ - --hash=sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8 \ - --hash=sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36 \ - --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \ - --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \ - --hash=sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc \ - --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \ - --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \ - --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \ - --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \ - --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \ - --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \ - --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \ - --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \ - --hash=sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b \ - --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \ - --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \ - --hash=sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c \ - --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \ - --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \ - --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \ - --hash=sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8 \ - --hash=sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1 \ - --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \ - --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \ - --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \ - --hash=sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595 \ - --hash=sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0 \ - --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \ - --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \ - --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \ - --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \ - --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \ - --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \ - --hash=sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16 \ - --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \ - --hash=sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e \ - --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \ - --hash=sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964 \ - --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \ - --hash=sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576 \ - --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \ - --hash=sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3 \ - --hash=sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662 \ - --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \ - --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \ - --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \ - --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \ - --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \ - --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \ - --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \ - --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \ - --hash=sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9 \ - --hash=sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7 \ - --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \ - --hash=sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a \ - --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \ - --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a \ - --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \ - --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \ - --hash=sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87 \ - --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b -charset-normalizer==3.3.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ - --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ - --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ - --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ - --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ - --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ - --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ - --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ - --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ - --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ - --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ - --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ - --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ - --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ - --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ - --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ - --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ - --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ - --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ - --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ - --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ - --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ - --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ - --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ - --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ - --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ - --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ - --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ - --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ - --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ - --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ - --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ - --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ - --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ - --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ - --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ - --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ - --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ - --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ - --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ - --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ - --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ - --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ - --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ - --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ - --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ - --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ - --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ - --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ - --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ - --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ - --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ - --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ - --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ - --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ - --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ - --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ - --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ - --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ - --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ - --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ - --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ - --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ - --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ - --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ - --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ - --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ - --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ - --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ - --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ - --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ - --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ - --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ - --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ - --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ - --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ - --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ - --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ - --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ - --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ - --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ - --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ - --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ - --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ - --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ - --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ - --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ - --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ - --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ - --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 -colorama==0.4.6 ; python_version >= "3.10" and python_version < "4.0" and (platform_system == "Windows" or sys_platform == "win32") \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 -comm==0.2.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e \ - --hash=sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3 -contourpy==1.3.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0 \ - --hash=sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639 \ - --hash=sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd \ - --hash=sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad \ - --hash=sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843 \ - --hash=sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8 \ - --hash=sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4 \ - --hash=sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1 \ - --hash=sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294 \ - --hash=sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84 \ - --hash=sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927 \ - --hash=sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8 \ - --hash=sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09 \ - --hash=sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7 \ - --hash=sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f \ - --hash=sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab \ - --hash=sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b \ - --hash=sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3 \ - --hash=sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223 \ - --hash=sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973 \ - --hash=sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087 \ - --hash=sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081 \ - --hash=sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc \ - --hash=sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18 \ - --hash=sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f \ - --hash=sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d \ - --hash=sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2 \ - --hash=sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41 \ - --hash=sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67 \ - --hash=sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6 \ - --hash=sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b \ - --hash=sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2 \ - --hash=sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c \ - --hash=sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42 \ - --hash=sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d \ - --hash=sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4 \ - --hash=sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5 \ - --hash=sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49 \ - --hash=sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b \ - --hash=sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7 \ - --hash=sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102 \ - --hash=sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb \ - --hash=sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7 \ - --hash=sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e \ - --hash=sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c \ - --hash=sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8 \ - --hash=sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35 \ - --hash=sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b \ - --hash=sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14 \ - --hash=sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb \ - --hash=sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589 \ - --hash=sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c \ - --hash=sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0 \ - --hash=sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da \ - --hash=sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800 \ - --hash=sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6 \ - --hash=sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66 \ - --hash=sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca \ - --hash=sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb \ - --hash=sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c \ - --hash=sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06 \ - --hash=sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779 \ - --hash=sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8 \ - --hash=sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f \ - --hash=sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c -debugpy==1.8.5 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0a1029a2869d01cb777216af8c53cda0476875ef02a2b6ff8b2f2c9a4b04176c \ - --hash=sha256:1cd04a73eb2769eb0bfe43f5bfde1215c5923d6924b9b90f94d15f207a402226 \ - --hash=sha256:28ced650c974aaf179231668a293ecd5c63c0a671ae6d56b8795ecc5d2f48d3c \ - --hash=sha256:345d6a0206e81eb68b1493ce2fbffd57c3088e2ce4b46592077a943d2b968ca3 \ - --hash=sha256:3df6692351172a42af7558daa5019651f898fc67450bf091335aa8a18fbf6f3a \ - --hash=sha256:4413b7a3ede757dc33a273a17d685ea2b0c09dbd312cc03f5534a0fd4d40750a \ - --hash=sha256:4fbb3b39ae1aa3e5ad578f37a48a7a303dad9a3d018d369bc9ec629c1cfa7408 \ - --hash=sha256:55919dce65b471eff25901acf82d328bbd5b833526b6c1364bd5133754777a44 \ - --hash=sha256:5b5c770977c8ec6c40c60d6f58cacc7f7fe5a45960363d6974ddb9b62dbee156 \ - --hash=sha256:606bccba19f7188b6ea9579c8a4f5a5364ecd0bf5a0659c8a5d0e10dcee3032a \ - --hash=sha256:7b0fe36ed9d26cb6836b0a51453653f8f2e347ba7348f2bbfe76bfeb670bfb1c \ - --hash=sha256:7e4d594367d6407a120b76bdaa03886e9eb652c05ba7f87e37418426ad2079f7 \ - --hash=sha256:8f913ee8e9fcf9d38a751f56e6de12a297ae7832749d35de26d960f14280750a \ - --hash=sha256:a697beca97dad3780b89a7fb525d5e79f33821a8bc0c06faf1f1289e549743cf \ - --hash=sha256:ad84b7cde7fd96cf6eea34ff6c4a1b7887e0fe2ea46e099e53234856f9d99a34 \ - --hash=sha256:b2112cfeb34b4507399d298fe7023a16656fc553ed5246536060ca7bd0e668d0 \ - --hash=sha256:b78c1250441ce893cb5035dd6f5fc12db968cc07f91cc06996b2087f7cefdd8e \ - --hash=sha256:c0a65b00b7cdd2ee0c2cf4c7335fef31e15f1b7056c7fdbce9e90193e1a8c8cb \ - --hash=sha256:c9f7c15ea1da18d2fcc2709e9f3d6de98b69a5b0fff1807fb80bc55f906691f7 \ - --hash=sha256:db9fb642938a7a609a6c865c32ecd0d795d56c1aaa7a7a5722d77855d5e77f2b \ - --hash=sha256:dd3811bd63632bb25eda6bd73bea8e0521794cda02be41fa3160eb26fc29e7ed \ - --hash=sha256:e84c276489e141ed0b93b0af648eef891546143d6a48f610945416453a8ad406 -decorator==5.1.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \ - --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 -exceptiongroup==1.2.2 ; python_version >= "3.10" and python_version < "3.11" \ - --hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b \ - --hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc -executing==2.1.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf \ - --hash=sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab -idna==3.8 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:050b4e5baadcd44d760cedbd2b8e639f2ff89bbc7a5730fcc662954303377aac \ - --hash=sha256:d838c2c0ed6fced7693d5e8ab8e734d5f8fda53a039c0164afb0b82e771e3603 -ipykernel==6.29.5 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5 \ - --hash=sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215 -ipyleaflet==0.19.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:7cc9157848baca2e1793b96e79f8bdb1aa7340521d2b7d8a62aa8bc30eab5278 \ - --hash=sha256:b3b83fe3460e742964c2a5924ea7934365a3749bb75310ce388d45fd751372d2 -ipython==8.27.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e \ - --hash=sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c -ipywidgets-bokeh==1.6.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:42f3dbe39bd1618a98f1b9ea43ac2573533fc56badb85fee5145d1235467f636 \ - --hash=sha256:8d036f7337f3e13ecec814c0a08263dae1d176159dfacad276d060e374c65a28 -ipywidgets==8.1.5 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:3290f526f87ae6e77655555baba4f36681c555b8bdbbff430b70e52c34c86245 \ - --hash=sha256:870e43b1a35656a80c18c9503bbf2d16802db1cb487eec6fab27d683381dde17 -jedi==0.19.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd \ - --hash=sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0 -jinja2==3.1.4 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ - --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d -jupyter-bokeh==4.0.5 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:1110076c14c779071cf492646a1a871aefa8a477261e4721327a666e65df1a2c \ - --hash=sha256:a33d6ab85588f13640b30765fa15d1111b055cbe44f67a65ca57d3593af8245d -jupyter-client==8.6.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:2bda14d55ee5ba58552a8c53ae43d215ad9868853489213f37da060ced54d8df \ - --hash=sha256:50cbc5c66fd1b8f65ecb66bc490ab73217993632809b6e505687de18e9dea39f -jupyter-core==5.7.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409 \ - --hash=sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9 -jupyter-leaflet==0.19.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0d57e15e80c08a4360f0cde0b4c490beddc5d422bb0e9bc1c0b4479d3fb725a6 \ - --hash=sha256:b09b5ba48b1488cb61da37a6f558347269eb53ff6d64dc1a73e005ffc4420063 -jupyterlab-widgets==3.0.13 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:a2966d385328c1942b683a8cd96b89b8dd82c8b8f81dda902bb2bc06d46f5bed \ - --hash=sha256:e3cda2c233ce144192f1e29914ad522b2f4c40e77214b0cc97377ca3d323db54 -linkify-it-py==2.0.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048 \ - --hash=sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79 -markdown-it-py==3.0.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb -markdown==3.7 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2 \ - --hash=sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803 -markupsafe==2.1.5 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 -matplotlib-inline==0.1.7 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90 \ - --hash=sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca -mdit-py-plugins==0.4.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636 \ - --hash=sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5 -mdurl==0.1.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ - --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba -nest-asyncio==1.6.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe \ - --hash=sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c -numpy==2.1.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8 \ - --hash=sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466 \ - --hash=sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35 \ - --hash=sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c \ - --hash=sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4 \ - --hash=sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6 \ - --hash=sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0 \ - --hash=sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7 \ - --hash=sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a \ - --hash=sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a \ - --hash=sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e \ - --hash=sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62 \ - --hash=sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2 \ - --hash=sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5 \ - --hash=sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee \ - --hash=sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe \ - --hash=sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a \ - --hash=sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e \ - --hash=sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf \ - --hash=sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c \ - --hash=sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3 \ - --hash=sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86 \ - --hash=sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df \ - --hash=sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98 \ - --hash=sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d \ - --hash=sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2 \ - --hash=sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146 \ - --hash=sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550 \ - --hash=sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8 \ - --hash=sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb \ - --hash=sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e \ - --hash=sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d \ - --hash=sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366 \ - --hash=sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0 \ - --hash=sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db \ - --hash=sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe \ - --hash=sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426 \ - --hash=sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952 \ - --hash=sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03 \ - --hash=sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f \ - --hash=sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7 \ - --hash=sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b \ - --hash=sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17 \ - --hash=sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5 \ - --hash=sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1 \ - --hash=sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142 \ - --hash=sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884 \ - --hash=sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a \ - --hash=sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9 \ - --hash=sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445 \ - --hash=sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1 \ - --hash=sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1 \ - --hash=sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648 -packaging==24.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \ - --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124 -pandas==2.2.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a \ - --hash=sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d \ - --hash=sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5 \ - --hash=sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4 \ - --hash=sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0 \ - --hash=sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32 \ - --hash=sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea \ - --hash=sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28 \ - --hash=sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f \ - --hash=sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348 \ - --hash=sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18 \ - --hash=sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468 \ - --hash=sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5 \ - --hash=sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e \ - --hash=sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667 \ - --hash=sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645 \ - --hash=sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13 \ - --hash=sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30 \ - --hash=sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3 \ - --hash=sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d \ - --hash=sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb \ - --hash=sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3 \ - --hash=sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039 \ - --hash=sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8 \ - --hash=sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd \ - --hash=sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761 \ - --hash=sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659 \ - --hash=sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57 \ - --hash=sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c \ - --hash=sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c \ - --hash=sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4 \ - --hash=sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a \ - --hash=sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9 \ - --hash=sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42 \ - --hash=sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2 \ - --hash=sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39 \ - --hash=sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc \ - --hash=sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698 \ - --hash=sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed \ - --hash=sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015 \ - --hash=sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24 \ - --hash=sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319 -panel==1.5.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:30a45f314716bdde2de5c002fbd3a0b4d6ff85459e2179284df559455ff1534b \ - --hash=sha256:7ef1e908db4e12f2a9854d557898eeaac5143a3f4c7dd4e5e8a33a69194a4e18 -param==2.1.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:3b1da14abafa75bfd908572378a58696826b3719a723bc31b40ffff2e9a5c852 \ - --hash=sha256:81066d040526fbaa44b6419f3e92348fa8856ea44c8d3915e9245937ddabe2d6 -parso==0.8.4 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18 \ - --hash=sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d -pexpect==4.9.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform != "win32" and sys_platform != "emscripten") \ - --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 \ - --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f -pillow==10.4.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885 \ - --hash=sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea \ - --hash=sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df \ - --hash=sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5 \ - --hash=sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c \ - --hash=sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d \ - --hash=sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd \ - --hash=sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06 \ - --hash=sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908 \ - --hash=sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a \ - --hash=sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be \ - --hash=sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0 \ - --hash=sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b \ - --hash=sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80 \ - --hash=sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a \ - --hash=sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e \ - --hash=sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9 \ - --hash=sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696 \ - --hash=sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b \ - --hash=sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309 \ - --hash=sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e \ - --hash=sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab \ - --hash=sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d \ - --hash=sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060 \ - --hash=sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d \ - --hash=sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d \ - --hash=sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4 \ - --hash=sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3 \ - --hash=sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6 \ - --hash=sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb \ - --hash=sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94 \ - --hash=sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b \ - --hash=sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496 \ - --hash=sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0 \ - --hash=sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319 \ - --hash=sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b \ - --hash=sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856 \ - --hash=sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef \ - --hash=sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680 \ - --hash=sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b \ - --hash=sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42 \ - --hash=sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e \ - --hash=sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597 \ - --hash=sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a \ - --hash=sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8 \ - --hash=sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3 \ - --hash=sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736 \ - --hash=sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da \ - --hash=sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126 \ - --hash=sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd \ - --hash=sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5 \ - --hash=sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b \ - --hash=sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026 \ - --hash=sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b \ - --hash=sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc \ - --hash=sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46 \ - --hash=sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2 \ - --hash=sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c \ - --hash=sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe \ - --hash=sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984 \ - --hash=sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a \ - --hash=sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70 \ - --hash=sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca \ - --hash=sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b \ - --hash=sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91 \ - --hash=sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3 \ - --hash=sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84 \ - --hash=sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1 \ - --hash=sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5 \ - --hash=sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be \ - --hash=sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f \ - --hash=sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc \ - --hash=sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9 \ - --hash=sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e \ - --hash=sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141 \ - --hash=sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef \ - --hash=sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22 \ - --hash=sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27 \ - --hash=sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e \ - --hash=sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1 -platformdirs==4.3.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:9e5e27a08aa095dd127b9f2e764d74254f482fef22b0970773bfba79d091ab8c \ - --hash=sha256:eb1c8582560b34ed4ba105009a4badf7f6f85768b30126f351328507b2beb617 -prompt-toolkit==3.0.47 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10 \ - --hash=sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360 -psutil==6.0.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:02b69001f44cc73c1c5279d02b30a817e339ceb258ad75997325e0e6169d8b35 \ - --hash=sha256:1287c2b95f1c0a364d23bc6f2ea2365a8d4d9b726a3be7294296ff7ba97c17f0 \ - --hash=sha256:1e7c870afcb7d91fdea2b37c24aeb08f98b6d67257a5cb0a8bc3ac68d0f1a68c \ - --hash=sha256:21f1fb635deccd510f69f485b87433460a603919b45e2a324ad65b0cc74f8fb1 \ - --hash=sha256:33ea5e1c975250a720b3a6609c490db40dae5d83a4eb315170c4fe0d8b1f34b3 \ - --hash=sha256:34859b8d8f423b86e4385ff3665d3f4d94be3cdf48221fbe476e883514fdb71c \ - --hash=sha256:5fd9a97c8e94059b0ef54a7d4baf13b405011176c3b6ff257c247cae0d560ecd \ - --hash=sha256:6ec7588fb3ddaec7344a825afe298db83fe01bfaaab39155fa84cf1c0d6b13c3 \ - --hash=sha256:6ed2440ada7ef7d0d608f20ad89a04ec47d2d3ab7190896cd62ca5fc4fe08bf0 \ - --hash=sha256:8faae4f310b6d969fa26ca0545338b21f73c6b15db7c4a8d934a5482faa818f2 \ - --hash=sha256:a021da3e881cd935e64a3d0a20983bda0bb4cf80e4f74fa9bfcb1bc5785360c6 \ - --hash=sha256:a495580d6bae27291324fe60cea0b5a7c23fa36a7cd35035a16d93bdcf076b9d \ - --hash=sha256:a9a3dbfb4de4f18174528d87cc352d1f788b7496991cca33c6996f40c9e3c92c \ - --hash=sha256:c588a7e9b1173b6e866756dde596fd4cad94f9399daf99ad8c3258b3cb2b47a0 \ - --hash=sha256:e2e8d0054fc88153ca0544f5c4d554d42e33df2e009c4ff42284ac9ebdef4132 \ - --hash=sha256:fc8c9510cde0146432bbdb433322861ee8c3efbf8589865c8bf8d21cb30c4d14 \ - --hash=sha256:ffe7fc9b6b36beadc8c322f84e1caff51e8703b88eee1da46d1e3a6ae11b4fd0 -ptyprocess==0.7.0 ; python_version >= "3.10" and python_version < "4.0" and (sys_platform != "win32" and sys_platform != "emscripten") \ - --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ - --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 -pure-eval==0.2.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 \ - --hash=sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42 -pycparser==2.22 ; python_version >= "3.10" and python_version < "4.0" and implementation_name == "pypy" \ - --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \ - --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc -pygments==2.18.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ - --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a -python-dateutil==2.9.0.post0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ - --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 -pytz==2024.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a \ - --hash=sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725 -pyviz-comms==3.0.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:fd26951eebc7950106d481655d91ba06296d4cf352dffb1d03f88f959832448e \ - --hash=sha256:fde4a017c2213ecee63a9a6741431c845e42a5c7b1588e4a7ba2e4370c583728 -pywin32==306 ; sys_platform == "win32" and platform_python_implementation != "PyPy" and python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ - --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ - --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ - --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ - --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ - --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ - --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ - --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ - --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ - --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ - --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ - --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ - --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ - --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 -pyyaml==6.0.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ - --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ - --hash=sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086 \ - --hash=sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e \ - --hash=sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133 \ - --hash=sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5 \ - --hash=sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484 \ - --hash=sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee \ - --hash=sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5 \ - --hash=sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68 \ - --hash=sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a \ - --hash=sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf \ - --hash=sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99 \ - --hash=sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8 \ - --hash=sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85 \ - --hash=sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19 \ - --hash=sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc \ - --hash=sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a \ - --hash=sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 \ - --hash=sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317 \ - --hash=sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c \ - --hash=sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631 \ - --hash=sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d \ - --hash=sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652 \ - --hash=sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5 \ - --hash=sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e \ - --hash=sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b \ - --hash=sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8 \ - --hash=sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476 \ - --hash=sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706 \ - --hash=sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563 \ - --hash=sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237 \ - --hash=sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b \ - --hash=sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083 \ - --hash=sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180 \ - --hash=sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425 \ - --hash=sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e \ - --hash=sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f \ - --hash=sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725 \ - --hash=sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183 \ - --hash=sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab \ - --hash=sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774 \ - --hash=sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 \ - --hash=sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e \ - --hash=sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5 \ - --hash=sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d \ - --hash=sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290 \ - --hash=sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44 \ - --hash=sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed \ - --hash=sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4 \ - --hash=sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba \ - --hash=sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12 \ - --hash=sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4 -pyzmq==26.2.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:007137c9ac9ad5ea21e6ad97d3489af654381324d5d3ba614c323f60dab8fae6 \ - --hash=sha256:034da5fc55d9f8da09015d368f519478a52675e558c989bfcb5cf6d4e16a7d2a \ - --hash=sha256:05590cdbc6b902101d0e65d6a4780af14dc22914cc6ab995d99b85af45362cc9 \ - --hash=sha256:070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f \ - --hash=sha256:0aca98bc423eb7d153214b2df397c6421ba6373d3397b26c057af3c904452e37 \ - --hash=sha256:0bed0e799e6120b9c32756203fb9dfe8ca2fb8467fed830c34c877e25638c3fc \ - --hash=sha256:0d987a3ae5a71c6226b203cfd298720e0086c7fe7c74f35fa8edddfbd6597eed \ - --hash=sha256:0eaa83fc4c1e271c24eaf8fb083cbccef8fde77ec8cd45f3c35a9a123e6da097 \ - --hash=sha256:160c7e0a5eb178011e72892f99f918c04a131f36056d10d9c1afb223fc952c2d \ - --hash=sha256:17bf5a931c7f6618023cdacc7081f3f266aecb68ca692adac015c383a134ca52 \ - --hash=sha256:17c412bad2eb9468e876f556eb4ee910e62d721d2c7a53c7fa31e643d35352e6 \ - --hash=sha256:18c8dc3b7468d8b4bdf60ce9d7141897da103c7a4690157b32b60acb45e333e6 \ - --hash=sha256:1a534f43bc738181aa7cbbaf48e3eca62c76453a40a746ab95d4b27b1111a7d2 \ - --hash=sha256:1c17211bc037c7d88e85ed8b7d8f7e52db6dc8eca5590d162717c654550f7282 \ - --hash=sha256:1f3496d76b89d9429a656293744ceca4d2ac2a10ae59b84c1da9b5165f429ad3 \ - --hash=sha256:1fcc03fa4997c447dce58264e93b5aa2d57714fbe0f06c07b7785ae131512732 \ - --hash=sha256:226af7dcb51fdb0109f0016449b357e182ea0ceb6b47dfb5999d569e5db161d5 \ - --hash=sha256:23f4aad749d13698f3f7b64aad34f5fc02d6f20f05999eebc96b89b01262fb18 \ - --hash=sha256:25bf2374a2a8433633c65ccb9553350d5e17e60c8eb4de4d92cc6bd60f01d306 \ - --hash=sha256:28ad5233e9c3b52d76196c696e362508959741e1a005fb8fa03b51aea156088f \ - --hash=sha256:28c812d9757fe8acecc910c9ac9dafd2ce968c00f9e619db09e9f8f54c3a68a3 \ - --hash=sha256:29c6a4635eef69d68a00321e12a7d2559fe2dfccfa8efae3ffb8e91cd0b36a8b \ - --hash=sha256:29c7947c594e105cb9e6c466bace8532dc1ca02d498684128b339799f5248277 \ - --hash=sha256:2a50625acdc7801bc6f74698c5c583a491c61d73c6b7ea4dee3901bb99adb27a \ - --hash=sha256:2ae90ff9dad33a1cfe947d2c40cb9cb5e600d759ac4f0fd22616ce6540f72797 \ - --hash=sha256:2c4a71d5d6e7b28a47a394c0471b7e77a0661e2d651e7ae91e0cab0a587859ca \ - --hash=sha256:2ea4ad4e6a12e454de05f2949d4beddb52460f3de7c8b9d5c46fbb7d7222e02c \ - --hash=sha256:2eb7735ee73ca1b0d71e0e67c3739c689067f055c764f73aac4cc8ecf958ee3f \ - --hash=sha256:31507f7b47cc1ead1f6e86927f8ebb196a0bab043f6345ce070f412a59bf87b5 \ - --hash=sha256:35cffef589bcdc587d06f9149f8d5e9e8859920a071df5a2671de2213bef592a \ - --hash=sha256:367b4f689786fca726ef7a6c5ba606958b145b9340a5e4808132cc65759abd44 \ - --hash=sha256:39887ac397ff35b7b775db7201095fc6310a35fdbae85bac4523f7eb3b840e20 \ - --hash=sha256:3a495b30fc91db2db25120df5847d9833af237546fd59170701acd816ccc01c4 \ - --hash=sha256:3b55a4229ce5da9497dd0452b914556ae58e96a4381bb6f59f1305dfd7e53fc8 \ - --hash=sha256:402b190912935d3db15b03e8f7485812db350d271b284ded2b80d2e5704be780 \ - --hash=sha256:43a47408ac52647dfabbc66a25b05b6a61700b5165807e3fbd40063fcaf46386 \ - --hash=sha256:4661c88db4a9e0f958c8abc2b97472e23061f0bc737f6f6179d7a27024e1faa5 \ - --hash=sha256:46a446c212e58456b23af260f3d9fb785054f3e3653dbf7279d8f2b5546b21c2 \ - --hash=sha256:470d4a4f6d48fb34e92d768b4e8a5cc3780db0d69107abf1cd7ff734b9766eb0 \ - --hash=sha256:49d34ab71db5a9c292a7644ce74190b1dd5a3475612eefb1f8be1d6961441971 \ - --hash=sha256:4d29ab8592b6ad12ebbf92ac2ed2bedcfd1cec192d8e559e2e099f648570e19b \ - --hash=sha256:4d80b1dd99c1942f74ed608ddb38b181b87476c6a966a88a950c7dee118fdf50 \ - --hash=sha256:4da04c48873a6abdd71811c5e163bd656ee1b957971db7f35140a2d573f6949c \ - --hash=sha256:4f78c88905461a9203eac9faac157a2a0dbba84a0fd09fd29315db27be40af9f \ - --hash=sha256:4ff9dc6bc1664bb9eec25cd17506ef6672d506115095411e237d571e92a58231 \ - --hash=sha256:5506f06d7dc6ecf1efacb4a013b1f05071bb24b76350832c96449f4a2d95091c \ - --hash=sha256:55cf66647e49d4621a7e20c8d13511ef1fe1efbbccf670811864452487007e08 \ - --hash=sha256:5a509df7d0a83a4b178d0f937ef14286659225ef4e8812e05580776c70e155d5 \ - --hash=sha256:5c2b3bfd4b9689919db068ac6c9911f3fcb231c39f7dd30e3138be94896d18e6 \ - --hash=sha256:6835dd60355593de10350394242b5757fbbd88b25287314316f266e24c61d073 \ - --hash=sha256:689c5d781014956a4a6de61d74ba97b23547e431e9e7d64f27d4922ba96e9d6e \ - --hash=sha256:6a96179a24b14fa6428cbfc08641c779a53f8fcec43644030328f44034c7f1f4 \ - --hash=sha256:6ace4f71f1900a548f48407fc9be59c6ba9d9aaf658c2eea6cf2779e72f9f317 \ - --hash=sha256:6b274e0762c33c7471f1a7471d1a2085b1a35eba5cdc48d2ae319f28b6fc4de3 \ - --hash=sha256:706e794564bec25819d21a41c31d4df2d48e1cc4b061e8d345d7fb4dd3e94072 \ - --hash=sha256:70fc7fcf0410d16ebdda9b26cbd8bf8d803d220a7f3522e060a69a9c87bf7bad \ - --hash=sha256:7133d0a1677aec369d67dd78520d3fa96dd7f3dcec99d66c1762870e5ea1a50a \ - --hash=sha256:7445be39143a8aa4faec43b076e06944b8f9d0701b669df4af200531b21e40bb \ - --hash=sha256:76589c020680778f06b7e0b193f4b6dd66d470234a16e1df90329f5e14a171cd \ - --hash=sha256:76589f2cd6b77b5bdea4fca5992dc1c23389d68b18ccc26a53680ba2dc80ff2f \ - --hash=sha256:77eb0968da535cba0470a5165468b2cac7772cfb569977cff92e240f57e31bef \ - --hash=sha256:794a4562dcb374f7dbbfb3f51d28fb40123b5a2abadee7b4091f93054909add5 \ - --hash=sha256:7ad1bc8d1b7a18497dda9600b12dc193c577beb391beae5cd2349184db40f187 \ - --hash=sha256:7f98f6dfa8b8ccaf39163ce872bddacca38f6a67289116c8937a02e30bbe9711 \ - --hash=sha256:8423c1877d72c041f2c263b1ec6e34360448decfb323fa8b94e85883043ef988 \ - --hash=sha256:8685fa9c25ff00f550c1fec650430c4b71e4e48e8d852f7ddcf2e48308038640 \ - --hash=sha256:878206a45202247781472a2d99df12a176fef806ca175799e1c6ad263510d57c \ - --hash=sha256:89289a5ee32ef6c439086184529ae060c741334b8970a6855ec0b6ad3ff28764 \ - --hash=sha256:8ab5cad923cc95c87bffee098a27856c859bd5d0af31bd346035aa816b081fe1 \ - --hash=sha256:8b435f2753621cd36e7c1762156815e21c985c72b19135dac43a7f4f31d28dd1 \ - --hash=sha256:8be4700cd8bb02cc454f630dcdf7cfa99de96788b80c51b60fe2fe1dac480289 \ - --hash=sha256:8c997098cc65e3208eca09303630e84d42718620e83b733d0fd69543a9cab9cb \ - --hash=sha256:8ea039387c10202ce304af74def5021e9adc6297067f3441d348d2b633e8166a \ - --hash=sha256:8f7e66c7113c684c2b3f1c83cdd3376103ee0ce4c49ff80a648643e57fb22218 \ - --hash=sha256:90412f2db8c02a3864cbfc67db0e3dcdbda336acf1c469526d3e869394fe001c \ - --hash=sha256:92a78853d7280bffb93df0a4a6a2498cba10ee793cc8076ef797ef2f74d107cf \ - --hash=sha256:989d842dc06dc59feea09e58c74ca3e1678c812a4a8a2a419046d711031f69c7 \ - --hash=sha256:9cb3a6460cdea8fe8194a76de8895707e61ded10ad0be97188cc8463ffa7e3a8 \ - --hash=sha256:9dd8cd1aeb00775f527ec60022004d030ddc51d783d056e3e23e74e623e33726 \ - --hash=sha256:9ed69074a610fad1c2fda66180e7b2edd4d31c53f2d1872bc2d1211563904cd9 \ - --hash=sha256:9edda2df81daa129b25a39b86cb57dfdfe16f7ec15b42b19bfac503360d27a93 \ - --hash=sha256:a2224fa4a4c2ee872886ed00a571f5e967c85e078e8e8c2530a2fb01b3309b88 \ - --hash=sha256:a4f96f0d88accc3dbe4a9025f785ba830f968e21e3e2c6321ccdfc9aef755115 \ - --hash=sha256:aedd5dd8692635813368e558a05266b995d3d020b23e49581ddd5bbe197a8ab6 \ - --hash=sha256:aee22939bb6075e7afededabad1a56a905da0b3c4e3e0c45e75810ebe3a52672 \ - --hash=sha256:b1d464cb8d72bfc1a3adc53305a63a8e0cac6bc8c5a07e8ca190ab8d3faa43c2 \ - --hash=sha256:b8f86dd868d41bea9a5f873ee13bf5551c94cf6bc51baebc6f85075971fe6eea \ - --hash=sha256:bc6bee759a6bddea5db78d7dcd609397449cb2d2d6587f48f3ca613b19410cfc \ - --hash=sha256:bea2acdd8ea4275e1278350ced63da0b166421928276c7c8e3f9729d7402a57b \ - --hash=sha256:bfa832bfa540e5b5c27dcf5de5d82ebc431b82c453a43d141afb1e5d2de025fa \ - --hash=sha256:c0e6091b157d48cbe37bd67233318dbb53e1e6327d6fc3bb284afd585d141003 \ - --hash=sha256:c3789bd5768ab5618ebf09cef6ec2b35fed88709b104351748a63045f0ff9797 \ - --hash=sha256:c530e1eecd036ecc83c3407f77bb86feb79916d4a33d11394b8234f3bd35b940 \ - --hash=sha256:c811cfcd6a9bf680236c40c6f617187515269ab2912f3d7e8c0174898e2519db \ - --hash=sha256:c92d73464b886931308ccc45b2744e5968cbaade0b1d6aeb40d8ab537765f5bc \ - --hash=sha256:cccba051221b916a4f5e538997c45d7d136a5646442b1231b916d0164067ea27 \ - --hash=sha256:cdeabcff45d1c219636ee2e54d852262e5c2e085d6cb476d938aee8d921356b3 \ - --hash=sha256:ced65e5a985398827cc9276b93ef6dfabe0273c23de8c7931339d7e141c2818e \ - --hash=sha256:d049df610ac811dcffdc147153b414147428567fbbc8be43bb8885f04db39d98 \ - --hash=sha256:dacd995031a01d16eec825bf30802fceb2c3791ef24bcce48fa98ce40918c27b \ - --hash=sha256:ddf33d97d2f52d89f6e6e7ae66ee35a4d9ca6f36eda89c24591b0c40205a3629 \ - --hash=sha256:ded0fc7d90fe93ae0b18059930086c51e640cdd3baebdc783a695c77f123dcd9 \ - --hash=sha256:e3e0210287329272539eea617830a6a28161fbbd8a3271bf4150ae3e58c5d0e6 \ - --hash=sha256:e6fa2e3e683f34aea77de8112f6483803c96a44fd726d7358b9888ae5bb394ec \ - --hash=sha256:ea0eb6af8a17fa272f7b98d7bebfab7836a0d62738e16ba380f440fceca2d951 \ - --hash=sha256:ea7f69de383cb47522c9c208aec6dd17697db7875a4674c4af3f8cfdac0bdeae \ - --hash=sha256:eac5174677da084abf378739dbf4ad245661635f1600edd1221f150b165343f4 \ - --hash=sha256:fc4f7a173a5609631bb0c42c23d12c49df3966f89f496a51d3eb0ec81f4519d6 \ - --hash=sha256:fdb5b3e311d4d4b0eb8b3e8b4d1b0a512713ad7e6a68791d0923d1aec433d919 -requests==2.32.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \ - --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 -six==1.16.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 -sniffio==1.3.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ - --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc -stack-data==0.6.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \ - --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 -tornado==6.4.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8 \ - --hash=sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f \ - --hash=sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4 \ - --hash=sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3 \ - --hash=sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14 \ - --hash=sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842 \ - --hash=sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9 \ - --hash=sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698 \ - --hash=sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7 \ - --hash=sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d \ - --hash=sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4 -tqdm==4.66.5 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:90279a3770753eafc9194a0364852159802111925aa30eb3f9d85b0e805ac7cd \ - --hash=sha256:e1020aef2e5096702d8a025ac7d16b1577279c9d63f8375b63083e9a5f0fcbad -traitlets==5.14.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7 \ - --hash=sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f -traittypes==0.2.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:1340af133810b6eee1a2eb2e988f862b0d12b6c2d16f282aaf3207b782134c2e \ - --hash=sha256:be6fa26294733e7489822ded4ae25da5b4824a8a7a0e0c2dccfde596e3489bd6 -typing-extensions==4.12.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ - --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 -tzdata==2024.2 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc \ - --hash=sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd -uc-micro-py==1.0.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:d321b92cff673ec58027c04015fcaa8bb1e005478643ff4a500882eaab88c48a \ - --hash=sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5 -urllib3==2.2.3 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac \ - --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 -watchfiles==0.24.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:01550ccf1d0aed6ea375ef259706af76ad009ef5b0203a3a4cce0f6024f9b68a \ - --hash=sha256:01def80eb62bd5db99a798d5e1f5f940ca0a05986dcfae21d833af7a46f7ee22 \ - --hash=sha256:07cdef0c84c03375f4e24642ef8d8178e533596b229d32d2bbd69e5128ede02a \ - --hash=sha256:083dc77dbdeef09fa44bb0f4d1df571d2e12d8a8f985dccde71ac3ac9ac067a0 \ - --hash=sha256:1cf1f6dd7825053f3d98f6d33f6464ebdd9ee95acd74ba2c34e183086900a827 \ - --hash=sha256:21ab23fdc1208086d99ad3f69c231ba265628014d4aed31d4e8746bd59e88cd1 \ - --hash=sha256:2dadf8a8014fde6addfd3c379e6ed1a981c8f0a48292d662e27cabfe4239c83c \ - --hash=sha256:2e28d91ef48eab0afb939fa446d8ebe77e2f7593f5f463fd2bb2b14132f95b6e \ - --hash=sha256:2efec17819b0046dde35d13fb8ac7a3ad877af41ae4640f4109d9154ed30a188 \ - --hash=sha256:30bbd525c3262fd9f4b1865cb8d88e21161366561cd7c9e1194819e0a33ea86b \ - --hash=sha256:316449aefacf40147a9efaf3bd7c9bdd35aaba9ac5d708bd1eb5763c9a02bef5 \ - --hash=sha256:327763da824817b38ad125dcd97595f942d720d32d879f6c4ddf843e3da3fe90 \ - --hash=sha256:32aa53a9a63b7f01ed32e316e354e81e9da0e6267435c7243bf8ae0f10b428ef \ - --hash=sha256:34e19e56d68b0dad5cff62273107cf5d9fbaf9d75c46277aa5d803b3ef8a9e9b \ - --hash=sha256:3770e260b18e7f4e576edca4c0a639f704088602e0bc921c5c2e721e3acb8d15 \ - --hash=sha256:3d2e3ab79a1771c530233cadfd277fcc762656d50836c77abb2e5e72b88e3a48 \ - --hash=sha256:41face41f036fee09eba33a5b53a73e9a43d5cb2c53dad8e61fa6c9f91b5a51e \ - --hash=sha256:43e3e37c15a8b6fe00c1bce2473cfa8eb3484bbeecf3aefbf259227e487a03df \ - --hash=sha256:449f43f49c8ddca87c6b3980c9284cab6bd1f5c9d9a2b00012adaaccd5e7decd \ - --hash=sha256:4933a508d2f78099162da473841c652ad0de892719043d3f07cc83b33dfd9d91 \ - --hash=sha256:49d617df841a63b4445790a254013aea2120357ccacbed00253f9c2b5dc24e2d \ - --hash=sha256:49fb58bcaa343fedc6a9e91f90195b20ccb3135447dc9e4e2570c3a39565853e \ - --hash=sha256:4a7fa2bc0efef3e209a8199fd111b8969fe9db9c711acc46636686331eda7dd4 \ - --hash=sha256:4abf4ad269856618f82dee296ac66b0cd1d71450fc3c98532d93798e73399b7a \ - --hash=sha256:4b8693502d1967b00f2fb82fc1e744df128ba22f530e15b763c8d82baee15370 \ - --hash=sha256:4d28cea3c976499475f5b7a2fec6b3a36208656963c1a856d328aeae056fc5c1 \ - --hash=sha256:5148c2f1ea043db13ce9b0c28456e18ecc8f14f41325aa624314095b6aa2e9ea \ - --hash=sha256:54ca90a9ae6597ae6dc00e7ed0a040ef723f84ec517d3e7ce13e63e4bc82fa04 \ - --hash=sha256:551ec3ee2a3ac9cbcf48a4ec76e42c2ef938a7e905a35b42a1267fa4b1645896 \ - --hash=sha256:5c51749f3e4e269231510da426ce4a44beb98db2dce9097225c338f815b05d4f \ - --hash=sha256:632676574429bee8c26be8af52af20e0c718cc7f5f67f3fb658c71928ccd4f7f \ - --hash=sha256:6509ed3f467b79d95fc62a98229f79b1a60d1b93f101e1c61d10c95a46a84f43 \ - --hash=sha256:6bdcfa3cd6fdbdd1a068a52820f46a815401cbc2cb187dd006cb076675e7b735 \ - --hash=sha256:7138eff8baa883aeaa074359daabb8b6c1e73ffe69d5accdc907d62e50b1c0da \ - --hash=sha256:7211b463695d1e995ca3feb38b69227e46dbd03947172585ecb0588f19b0d87a \ - --hash=sha256:73bde715f940bea845a95247ea3e5eb17769ba1010efdc938ffcb967c634fa61 \ - --hash=sha256:78470906a6be5199524641f538bd2c56bb809cd4bf29a566a75051610bc982c3 \ - --hash=sha256:7ae3e208b31be8ce7f4c2c0034f33406dd24fbce3467f77223d10cd86778471c \ - --hash=sha256:7e4bd963a935aaf40b625c2499f3f4f6bbd0c3776f6d3bc7c853d04824ff1c9f \ - --hash=sha256:82ae557a8c037c42a6ef26c494d0631cacca040934b101d001100ed93d43f361 \ - --hash=sha256:82b2509f08761f29a0fdad35f7e1638b8ab1adfa2666d41b794090361fb8b855 \ - --hash=sha256:8360f7314a070c30e4c976b183d1d8d1585a4a50c5cb603f431cebcbb4f66327 \ - --hash=sha256:85d5f0c7771dcc7a26c7a27145059b6bb0ce06e4e751ed76cdf123d7039b60b5 \ - --hash=sha256:88bcd4d0fe1d8ff43675360a72def210ebad3f3f72cabfeac08d825d2639b4ab \ - --hash=sha256:9301c689051a4857d5b10777da23fafb8e8e921bcf3abe6448a058d27fb67633 \ - --hash=sha256:951088d12d339690a92cef2ec5d3cfd957692834c72ffd570ea76a6790222777 \ - --hash=sha256:95cf3b95ea665ab03f5a54765fa41abf0529dbaf372c3b83d91ad2cfa695779b \ - --hash=sha256:96619302d4374de5e2345b2b622dc481257a99431277662c30f606f3e22f42be \ - --hash=sha256:999928c6434372fde16c8f27143d3e97201160b48a614071261701615a2a156f \ - --hash=sha256:9a60e2bf9dc6afe7f743e7c9b149d1fdd6dbf35153c78fe3a14ae1a9aee3d98b \ - --hash=sha256:9f895d785eb6164678ff4bb5cc60c5996b3ee6df3edb28dcdeba86a13ea0465e \ - --hash=sha256:a2a9891723a735d3e2540651184be6fd5b96880c08ffe1a98bae5017e65b544b \ - --hash=sha256:a974231b4fdd1bb7f62064a0565a6b107d27d21d9acb50c484d2cdba515b9366 \ - --hash=sha256:aa0fd7248cf533c259e59dc593a60973a73e881162b1a2f73360547132742823 \ - --hash=sha256:acbfa31e315a8f14fe33e3542cbcafc55703b8f5dcbb7c1eecd30f141df50db3 \ - --hash=sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1 \ - --hash=sha256:b3ef2c69c655db63deb96b3c3e587084612f9b1fa983df5e0c3379d41307467f \ - --hash=sha256:b52a65e4ea43c6d149c5f8ddb0bef8d4a1e779b77591a458a893eb416624a418 \ - --hash=sha256:b665caeeda58625c3946ad7308fbd88a086ee51ccb706307e5b1fa91556ac886 \ - --hash=sha256:b74fdffce9dfcf2dc296dec8743e5b0332d15df19ae464f0e249aa871fc1c571 \ - --hash=sha256:b995bfa6bf01a9e09b884077a6d37070464b529d8682d7691c2d3b540d357a0c \ - --hash=sha256:bd82010f8ab451dabe36054a1622870166a67cf3fce894f68895db6f74bbdc94 \ - --hash=sha256:bdcd5538e27f188dd3c804b4a8d5f52a7fc7f87e7fd6b374b8e36a4ca03db428 \ - --hash=sha256:c79d7719d027b7a42817c5d96461a99b6a49979c143839fc37aa5748c322f234 \ - --hash=sha256:cdab9555053399318b953a1fe1f586e945bc8d635ce9d05e617fd9fe3a4687d6 \ - --hash=sha256:ce72dba6a20e39a0c628258b5c308779b8697f7676c254a845715e2a1039b968 \ - --hash=sha256:d337193bbf3e45171c8025e291530fb7548a93c45253897cd764a6a71c937ed9 \ - --hash=sha256:d3dcb774e3568477275cc76554b5a565024b8ba3a0322f77c246bc7111c5bb9c \ - --hash=sha256:d64ba08db72e5dfd5c33be1e1e687d5e4fcce09219e8aee893a4862034081d4e \ - --hash=sha256:d7a2e3b7f5703ffbd500dabdefcbc9eafeff4b9444bbdd5d83d79eedf8428fab \ - --hash=sha256:d831ee0a50946d24a53821819b2327d5751b0c938b12c0653ea5be7dea9c82ec \ - --hash=sha256:d9018153cf57fc302a2a34cb7564870b859ed9a732d16b41a9b5cb2ebed2d444 \ - --hash=sha256:e5171ef898299c657685306d8e1478a45e9303ddcd8ac5fed5bd52ad4ae0b69b \ - --hash=sha256:e94e98c7cb94cfa6e071d401ea3342767f28eb5a06a58fafdc0d2a4974f4f35c \ - --hash=sha256:ec39698c45b11d9694a1b635a70946a5bad066b593af863460a8e600f0dff1ca \ - --hash=sha256:ed9aba6e01ff6f2e8285e5aa4154e2970068fe0fc0998c4380d0e6278222269b \ - --hash=sha256:edf71b01dec9f766fb285b73930f95f730bb0943500ba0566ae234b5c1618c18 \ - --hash=sha256:ee82c98bed9d97cd2f53bdb035e619309a098ea53ce525833e26b93f673bc318 \ - --hash=sha256:f4c96283fca3ee09fb044f02156d9570d156698bc3734252175a38f0e8975f07 \ - --hash=sha256:f7d9b87c4c55e3ea8881dfcbf6d61ea6775fffed1fedffaa60bd047d3c08c430 \ - --hash=sha256:f83df90191d67af5a831da3a33dd7628b02a95450e168785586ed51e6d28943c \ - --hash=sha256:fca9433a45f18b7c779d2bae7beeec4f740d28b788b117a48368d95a3233ed83 \ - --hash=sha256:fd92bbaa2ecdb7864b7600dcdb6f2f1db6e0346ed425fbd01085be04c63f0b05 -wcwidth==0.2.13 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859 \ - --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5 -webencodings==0.5.1 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ - --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 -widgetsnbextension==4.0.13 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:74b2692e8500525cc38c2b877236ba51d34541e6385eeed5aec15a70f88a6c71 \ - --hash=sha256:ffcb67bc9febd10234a362795f643927f4e0c05d9342c727b65d2384f8feacb6 -xyzservices==2024.9.0 ; python_version >= "3.10" and python_version < "4.0" \ - --hash=sha256:68fb8353c9dbba4f1ff6c0f2e5e4e596bb9e1db7f94f4f7dfbcb26e25aa66fde \ - --hash=sha256:776ae82b78d6e5ca63dd6a94abb054df8130887a4a308473b54a6bd364de8644 diff --git a/playground/start_dashboard.sh b/playground/start_dashboard.sh index 99f08d8..ed1db7c 100644 --- a/playground/start_dashboard.sh +++ b/playground/start_dashboard.sh @@ -1,3 +1,4 @@ #!/bin/bash panel serve /opt/hefs_fews_dashboard/panel_dashboard.py --port=5006 --dev --show & +sleep 2 firefox http://localhost:5006/panel_dashboard \ No newline at end of file diff --git a/scripts/dashboard.desktop b/scripts/dashboard.desktop index 3976775..78a999c 100644 --- a/scripts/dashboard.desktop +++ b/scripts/dashboard.desktop @@ -3,4 +3,4 @@ Name=HEFS-FEWS Dashboard Type=Application Exec=/opt/hefs_fews_dashboard/start_dashboard.sh Terminal=false -Icon=/opt/hefs_fews_dashboard/index_getting_started.svg \ No newline at end of file +Icon=/opt/hefs_fews_dashboard/dashboard_icon2.png \ No newline at end of file