From b90d030899e435f1da26a202e65ab8d060f9acb1 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Thu, 29 Jan 2026 18:10:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=8A=A0=E8=BD=BD=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/csv-editor.xml | 16 +++ .idea/dataSources.xml | 7 + .idea/sqldialects.xml | 1 + .idea/vcs.xml | 1 - notebook/datasource/data_old.ipynb | 138 ++++++++++++++++++ notebook/indicator.ipynb | 101 ++++---------- pyproject.toml | 2 + sql/initial.sql | 92 ++++++++++++ uv.lock | 216 +++++++++++++++++++++++++++++ 9 files changed, 499 insertions(+), 75 deletions(-) create mode 100644 .idea/csv-editor.xml create mode 100644 notebook/datasource/data_old.ipynb create mode 100644 sql/initial.sql diff --git a/.idea/csv-editor.xml b/.idea/csv-editor.xml new file mode 100644 index 0000000..af8e228 --- /dev/null +++ b/.idea/csv-editor.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 340aca5..72cde34 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -8,5 +8,12 @@ jdbc:postgresql://81.71.3.24:6785/leopard_dev $ProjectFileDir$ + + sqlite.xerial + true + org.sqlite.JDBC + jdbc:sqlite:$USER_HOME$/Documents/leopard_data/leopard.sqlite + $ProjectFileDir$ + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 6df4889..6b6d503 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -1,6 +1,7 @@ + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index bc9452c..94a25f7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,6 +2,5 @@ - \ No newline at end of file diff --git a/notebook/datasource/data_old.ipynb b/notebook/datasource/data_old.ipynb new file mode 100644 index 0000000..0c8dad1 --- /dev/null +++ b/notebook/datasource/data_old.ipynb @@ -0,0 +1,138 @@ +{ + "cells": [ + { + "metadata": { + "ExecuteTime": { + "end_time": "2026-01-29T10:09:22.171634Z", + "start_time": "2026-01-29T08:27:03.148937Z" + } + }, + "cell_type": "code", + "source": [ + "import urllib.parse\n", + "\n", + "import pandas as pd\n", + "import sqlalchemy\n", + "from sqlalchemy.orm import DeclarativeBase, Session\n", + "\n", + "postgresql_engin = sqlalchemy.create_engine(\n", + " f\"postgresql://leopard:{urllib.parse.quote_plus(\"9NEzFzovnddf@PyEP?e*AYAWnCyd7UhYwQK$pJf>7?ccFiN^x4$eKEZ5~E<7<+~X\")}@81.71.3.24:6785/leopard\"\n", + ")\n", + "sqlite_engine = sqlalchemy.create_engine(f\"sqlite:////Users/lanyuanxiaoyao/Documents/leopard_data/leopard.sqlite\")\n", + "\n", + "\n", + "class Base(DeclarativeBase):\n", + " pass\n", + "\n", + "\n", + "class Daily(Base):\n", + " __tablename__ = 'daily'\n", + "\n", + " code = sqlalchemy.Column(sqlalchemy.String, primary_key=True)\n", + " trade_date = sqlalchemy.Column(sqlalchemy.Date)\n", + " open = sqlalchemy.Column(sqlalchemy.Double)\n", + " close = sqlalchemy.Column(sqlalchemy.Double)\n", + " high = sqlalchemy.Column(sqlalchemy.Double)\n", + " low = sqlalchemy.Column(sqlalchemy.Double)\n", + " previous_close = sqlalchemy.Column(sqlalchemy.Double)\n", + " turnover = sqlalchemy.Column(sqlalchemy.Double)\n", + " volume = sqlalchemy.Column(sqlalchemy.Integer)\n", + " price_change_amount = sqlalchemy.Column(sqlalchemy.Double)\n", + " factor = sqlalchemy.Column(sqlalchemy.Double)\n", + "\n", + "\n", + "try:\n", + " stock_df = pd.read_sql_table(\"stock\", sqlite_engine)\n", + " for index, code in enumerate(stock_df[\"code\"]):\n", + " print(code)\n", + " daily_df = pd.read_sql(\n", + " f\"\"\"\n", + " select code,\n", + " trade_date,\n", + " open,\n", + " close,\n", + " high,\n", + " low,\n", + " previous_close,\n", + " turnover,\n", + " volume,\n", + " price_change_amount,\n", + " factor\n", + " from leopard_daily d\n", + " left join leopard_stock s on d.stock_id = s.id\n", + " where s.code = '{code}'\n", + " \"\"\",\n", + " postgresql_engin\n", + " )\n", + " with Session(sqlite_engine) as session:\n", + " for _, row in daily_df.iterrows():\n", + " session.add(\n", + " Daily(\n", + " code=row[\"code\"],\n", + " trade_date=row[\"trade_date\"],\n", + " open=row[\"open\"],\n", + " close=row[\"close\"],\n", + " high=row[\"high\"],\n", + " low=row[\"low\"],\n", + " previous_close=row[\"previous_close\"],\n", + " turnover=row[\"turnover\"],\n", + " volume=row[\"volume\"],\n", + " price_change_amount=row[\"price_change_amount\"],\n", + " factor=row[\"factor\"]\n", + " )\n", + " )\n", + " session.flush()\n", + " session.commit()\n", + "finally:\n", + " postgresql_engin.dispose()\n", + " sqlite_engine.dispose()" + ], + "id": "48821306efc640a1", + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001B[31m---------------------------------------------------------------------------\u001B[39m", + "\u001B[31mKeyboardInterrupt\u001B[39m Traceback (most recent call last)", + "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[26]\u001B[39m\u001B[32m, line 37\u001B[39m\n\u001B[32m 35\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m index, code \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28menumerate\u001B[39m(stock_df[\u001B[33m\"\u001B[39m\u001B[33mcode\u001B[39m\u001B[33m\"\u001B[39m]):\n\u001B[32m 36\u001B[39m \u001B[38;5;28mprint\u001B[39m(code)\n\u001B[32m---> \u001B[39m\u001B[32m37\u001B[39m daily_df = \u001B[43mpd\u001B[49m\u001B[43m.\u001B[49m\u001B[43mread_sql\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 38\u001B[39m \u001B[43m \u001B[49m\u001B[33;43mf\u001B[39;49m\u001B[33;43m\"\"\"\u001B[39;49m\n\u001B[32m 39\u001B[39m \u001B[33;43m select code,\u001B[39;49m\n\u001B[32m 40\u001B[39m \u001B[33;43m trade_date,\u001B[39;49m\n\u001B[32m 41\u001B[39m \u001B[33;43m open,\u001B[39;49m\n\u001B[32m 42\u001B[39m \u001B[33;43m close,\u001B[39;49m\n\u001B[32m 43\u001B[39m \u001B[33;43m high,\u001B[39;49m\n\u001B[32m 44\u001B[39m \u001B[33;43m low,\u001B[39;49m\n\u001B[32m 45\u001B[39m \u001B[33;43m previous_close,\u001B[39;49m\n\u001B[32m 46\u001B[39m \u001B[33;43m turnover,\u001B[39;49m\n\u001B[32m 47\u001B[39m \u001B[33;43m volume,\u001B[39;49m\n\u001B[32m 48\u001B[39m \u001B[33;43m price_change_amount,\u001B[39;49m\n\u001B[32m 49\u001B[39m \u001B[33;43m factor\u001B[39;49m\n\u001B[32m 50\u001B[39m \u001B[33;43m from leopard_daily d\u001B[39;49m\n\u001B[32m 51\u001B[39m \u001B[33;43m left join leopard_stock s on d.stock_id = s.id\u001B[39;49m\n\u001B[32m 52\u001B[39m \u001B[33;43m where s.code = \u001B[39;49m\u001B[33;43m'\u001B[39;49m\u001B[38;5;132;43;01m{\u001B[39;49;00m\u001B[43mcode\u001B[49m\u001B[38;5;132;43;01m}\u001B[39;49;00m\u001B[33;43m'\u001B[39;49m\n\u001B[32m 53\u001B[39m \u001B[33;43m \u001B[39;49m\u001B[33;43m\"\"\"\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[32m 54\u001B[39m \u001B[43m \u001B[49m\u001B[43mpostgresql_engin\u001B[49m\n\u001B[32m 55\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 56\u001B[39m \u001B[38;5;28;01mwith\u001B[39;00m Session(sqlite_engine) \u001B[38;5;28;01mas\u001B[39;00m session:\n\u001B[32m 57\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m _, row \u001B[38;5;129;01min\u001B[39;00m daily_df.iterrows():\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/pandas/io/sql.py:736\u001B[39m, in \u001B[36mread_sql\u001B[39m\u001B[34m(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize, dtype_backend, dtype)\u001B[39m\n\u001B[32m 726\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m pandas_sql.read_table(\n\u001B[32m 727\u001B[39m sql,\n\u001B[32m 728\u001B[39m index_col=index_col,\n\u001B[32m (...)\u001B[39m\u001B[32m 733\u001B[39m dtype_backend=dtype_backend,\n\u001B[32m 734\u001B[39m )\n\u001B[32m 735\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m736\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mpandas_sql\u001B[49m\u001B[43m.\u001B[49m\u001B[43mread_query\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 737\u001B[39m \u001B[43m \u001B[49m\u001B[43msql\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 738\u001B[39m \u001B[43m \u001B[49m\u001B[43mindex_col\u001B[49m\u001B[43m=\u001B[49m\u001B[43mindex_col\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 739\u001B[39m \u001B[43m \u001B[49m\u001B[43mparams\u001B[49m\u001B[43m=\u001B[49m\u001B[43mparams\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 740\u001B[39m \u001B[43m \u001B[49m\u001B[43mcoerce_float\u001B[49m\u001B[43m=\u001B[49m\u001B[43mcoerce_float\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 741\u001B[39m \u001B[43m \u001B[49m\u001B[43mparse_dates\u001B[49m\u001B[43m=\u001B[49m\u001B[43mparse_dates\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 742\u001B[39m \u001B[43m \u001B[49m\u001B[43mchunksize\u001B[49m\u001B[43m=\u001B[49m\u001B[43mchunksize\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 743\u001B[39m \u001B[43m \u001B[49m\u001B[43mdtype_backend\u001B[49m\u001B[43m=\u001B[49m\u001B[43mdtype_backend\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 744\u001B[39m \u001B[43m \u001B[49m\u001B[43mdtype\u001B[49m\u001B[43m=\u001B[49m\u001B[43mdtype\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 745\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/pandas/io/sql.py:1848\u001B[39m, in \u001B[36mSQLDatabase.read_query\u001B[39m\u001B[34m(self, sql, index_col, coerce_float, parse_dates, params, chunksize, dtype, dtype_backend)\u001B[39m\n\u001B[32m 1791\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mread_query\u001B[39m(\n\u001B[32m 1792\u001B[39m \u001B[38;5;28mself\u001B[39m,\n\u001B[32m 1793\u001B[39m sql: \u001B[38;5;28mstr\u001B[39m,\n\u001B[32m (...)\u001B[39m\u001B[32m 1800\u001B[39m dtype_backend: DtypeBackend | Literal[\u001B[33m\"\u001B[39m\u001B[33mnumpy\u001B[39m\u001B[33m\"\u001B[39m] = \u001B[33m\"\u001B[39m\u001B[33mnumpy\u001B[39m\u001B[33m\"\u001B[39m,\n\u001B[32m 1801\u001B[39m ) -> DataFrame | Iterator[DataFrame]:\n\u001B[32m 1802\u001B[39m \u001B[38;5;250m \u001B[39m\u001B[33;03m\"\"\"\u001B[39;00m\n\u001B[32m 1803\u001B[39m \u001B[33;03m Read SQL query into a DataFrame.\u001B[39;00m\n\u001B[32m 1804\u001B[39m \n\u001B[32m (...)\u001B[39m\u001B[32m 1846\u001B[39m \n\u001B[32m 1847\u001B[39m \u001B[33;03m \"\"\"\u001B[39;00m\n\u001B[32m-> \u001B[39m\u001B[32m1848\u001B[39m result = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mexecute\u001B[49m\u001B[43m(\u001B[49m\u001B[43msql\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mparams\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1849\u001B[39m columns = result.keys()\n\u001B[32m 1851\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m chunksize \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/pandas/io/sql.py:1671\u001B[39m, in \u001B[36mSQLDatabase.execute\u001B[39m\u001B[34m(self, sql, params)\u001B[39m\n\u001B[32m 1669\u001B[39m args = [] \u001B[38;5;28;01mif\u001B[39;00m params \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;28;01melse\u001B[39;00m [params]\n\u001B[32m 1670\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(sql, \u001B[38;5;28mstr\u001B[39m):\n\u001B[32m-> \u001B[39m\u001B[32m1671\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mcon\u001B[49m\u001B[43m.\u001B[49m\u001B[43mexec_driver_sql\u001B[49m\u001B[43m(\u001B[49m\u001B[43msql\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m*\u001B[49m\u001B[43margs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1672\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m.con.execute(sql, *args)\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py:1779\u001B[39m, in \u001B[36mConnection.exec_driver_sql\u001B[39m\u001B[34m(self, statement, parameters, execution_options)\u001B[39m\n\u001B[32m 1774\u001B[39m execution_options = \u001B[38;5;28mself\u001B[39m._execution_options.merge_with(\n\u001B[32m 1775\u001B[39m execution_options\n\u001B[32m 1776\u001B[39m )\n\u001B[32m 1778\u001B[39m dialect = \u001B[38;5;28mself\u001B[39m.dialect\n\u001B[32m-> \u001B[39m\u001B[32m1779\u001B[39m ret = \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_execute_context\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 1780\u001B[39m \u001B[43m \u001B[49m\u001B[43mdialect\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1781\u001B[39m \u001B[43m \u001B[49m\u001B[43mdialect\u001B[49m\u001B[43m.\u001B[49m\u001B[43mexecution_ctx_cls\u001B[49m\u001B[43m.\u001B[49m\u001B[43m_init_statement\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1782\u001B[39m \u001B[43m \u001B[49m\u001B[43mstatement\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1783\u001B[39m \u001B[43m \u001B[49m\u001B[38;5;28;43;01mNone\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[32m 1784\u001B[39m \u001B[43m \u001B[49m\u001B[43mexecution_options\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1785\u001B[39m \u001B[43m \u001B[49m\u001B[43mstatement\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1786\u001B[39m \u001B[43m \u001B[49m\u001B[43mdistilled_parameters\u001B[49m\u001B[43m,\u001B[49m\n\u001B[32m 1787\u001B[39m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1789\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m ret\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py:1846\u001B[39m, in \u001B[36mConnection._execute_context\u001B[39m\u001B[34m(self, dialect, constructor, statement, parameters, execution_options, *args, **kw)\u001B[39m\n\u001B[32m 1844\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._exec_insertmany_context(dialect, context)\n\u001B[32m 1845\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[32m-> \u001B[39m\u001B[32m1846\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_exec_single_context\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 1847\u001B[39m \u001B[43m \u001B[49m\u001B[43mdialect\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcontext\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstatement\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mparameters\u001B[49m\n\u001B[32m 1848\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py:1986\u001B[39m, in \u001B[36mConnection._exec_single_context\u001B[39m\u001B[34m(self, dialect, context, statement, parameters)\u001B[39m\n\u001B[32m 1983\u001B[39m result = context._setup_result_proxy()\n\u001B[32m 1985\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mBaseException\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[32m-> \u001B[39m\u001B[32m1986\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43m_handle_dbapi_exception\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 1987\u001B[39m \u001B[43m \u001B[49m\u001B[43me\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstr_statement\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43meffective_parameters\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcursor\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcontext\u001B[49m\n\u001B[32m 1988\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1990\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m result\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py:2366\u001B[39m, in \u001B[36mConnection._handle_dbapi_exception\u001B[39m\u001B[34m(self, e, statement, parameters, cursor, context, is_sub_exec)\u001B[39m\n\u001B[32m 2364\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[32m 2365\u001B[39m \u001B[38;5;28;01massert\u001B[39;00m exc_info[\u001B[32m1\u001B[39m] \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[32m-> \u001B[39m\u001B[32m2366\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m exc_info[\u001B[32m1\u001B[39m].with_traceback(exc_info[\u001B[32m2\u001B[39m])\n\u001B[32m 2367\u001B[39m \u001B[38;5;28;01mfinally\u001B[39;00m:\n\u001B[32m 2368\u001B[39m \u001B[38;5;28;01mdel\u001B[39;00m \u001B[38;5;28mself\u001B[39m._reentrant_error\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py:1967\u001B[39m, in \u001B[36mConnection._exec_single_context\u001B[39m\u001B[34m(self, dialect, context, statement, parameters)\u001B[39m\n\u001B[32m 1965\u001B[39m \u001B[38;5;28;01mbreak\u001B[39;00m\n\u001B[32m 1966\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m evt_handled:\n\u001B[32m-> \u001B[39m\u001B[32m1967\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[43m.\u001B[49m\u001B[43mdialect\u001B[49m\u001B[43m.\u001B[49m\u001B[43mdo_execute\u001B[49m\u001B[43m(\u001B[49m\n\u001B[32m 1968\u001B[39m \u001B[43m \u001B[49m\u001B[43mcursor\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstr_statement\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43meffective_parameters\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcontext\u001B[49m\n\u001B[32m 1969\u001B[39m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[32m 1971\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m._has_events \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m.engine._has_events:\n\u001B[32m 1972\u001B[39m \u001B[38;5;28mself\u001B[39m.dispatch.after_cursor_execute(\n\u001B[32m 1973\u001B[39m \u001B[38;5;28mself\u001B[39m,\n\u001B[32m 1974\u001B[39m cursor,\n\u001B[32m (...)\u001B[39m\u001B[32m 1978\u001B[39m context.executemany,\n\u001B[32m 1979\u001B[39m )\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/Project/leopard_analysis/.venv/lib/python3.14/site-packages/sqlalchemy/engine/default.py:952\u001B[39m, in \u001B[36mDefaultDialect.do_execute\u001B[39m\u001B[34m(self, cursor, statement, parameters, context)\u001B[39m\n\u001B[32m 951\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mdo_execute\u001B[39m(\u001B[38;5;28mself\u001B[39m, cursor, statement, parameters, context=\u001B[38;5;28;01mNone\u001B[39;00m):\n\u001B[32m--> \u001B[39m\u001B[32m952\u001B[39m \u001B[43mcursor\u001B[49m\u001B[43m.\u001B[49m\u001B[43mexecute\u001B[49m\u001B[43m(\u001B[49m\u001B[43mstatement\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mparameters\u001B[49m\u001B[43m)\u001B[49m\n", + "\u001B[36mFile \u001B[39m\u001B[32m~/.local/share/uv/python/cpython-3.14.2-macos-x86_64-none/lib/python3.14/encodings/utf_8.py:15\u001B[39m, in \u001B[36mdecode\u001B[39m\u001B[34m(input, errors)\u001B[39m\n\u001B[32m 11\u001B[39m \u001B[38;5;66;03m### Codec APIs\u001B[39;00m\n\u001B[32m 13\u001B[39m encode = codecs.utf_8_encode\n\u001B[32m---> \u001B[39m\u001B[32m15\u001B[39m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34mdecode\u001B[39m(\u001B[38;5;28minput\u001B[39m, errors=\u001B[33m'\u001B[39m\u001B[33mstrict\u001B[39m\u001B[33m'\u001B[39m):\n\u001B[32m 16\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m codecs.utf_8_decode(\u001B[38;5;28minput\u001B[39m, errors, \u001B[38;5;28;01mTrue\u001B[39;00m)\n\u001B[32m 18\u001B[39m \u001B[38;5;28;01mclass\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01mIncrementalEncoder\u001B[39;00m(codecs.IncrementalEncoder):\n", + "\u001B[31mKeyboardInterrupt\u001B[39m: " + ] + } + ], + "execution_count": 26 + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebook/indicator.ipynb b/notebook/indicator.ipynb index 52e21c2..1c89c85 100644 --- a/notebook/indicator.ipynb +++ b/notebook/indicator.ipynb @@ -7,8 +7,8 @@ "variableName$1": "dailies_df" }, "ExecuteTime": { - "end_time": "2026-01-29T02:33:37.960810Z", - "start_time": "2026-01-29T02:33:24.206860Z" + "end_time": "2026-01-29T08:42:31.684564Z", + "start_time": "2026-01-29T08:42:08.250081Z" } }, "cell_type": "code", @@ -199,18 +199,18 @@ "" ] }, - "execution_count": 1, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 1 + "execution_count": 20 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-01-29T02:33:38.731788Z", - "start_time": "2026-01-29T02:33:38.062150Z" + "end_time": "2026-01-29T06:34:22.043428Z", + "start_time": "2026-01-29T06:34:21.908166Z" } }, "cell_type": "code", @@ -398,18 +398,18 @@ "" ] }, - "execution_count": 2, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 2 + "execution_count": 13 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-01-29T02:33:39.810533Z", - "start_time": "2026-01-29T02:33:39.416568Z" + "end_time": "2026-01-29T06:34:22.351995Z", + "start_time": "2026-01-29T06:34:22.270778Z" } }, "cell_type": "code", @@ -697,18 +697,18 @@ "" ] }, - "execution_count": 3, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 3 + "execution_count": 14 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-01-29T02:33:42.597061Z", - "start_time": "2026-01-29T02:33:40.380307Z" + "end_time": "2026-01-29T06:34:23.618483Z", + "start_time": "2026-01-29T06:34:23.072725Z" } }, "cell_type": "code", @@ -748,13 +748,13 @@ } } ], - "execution_count": 4 + "execution_count": 15 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-01-29T02:33:42.780271Z", - "start_time": "2026-01-29T02:33:42.768861Z" + "end_time": "2026-01-29T06:34:23.669108Z", + "start_time": "2026-01-29T06:34:23.658807Z" } }, "cell_type": "code", @@ -765,13 +765,13 @@ ], "id": "29759a1d33476c0f", "outputs": [], - "execution_count": 5 + "execution_count": 16 }, { "metadata": { "ExecuteTime": { - "end_time": "2026-01-29T02:33:42.923721Z", - "start_time": "2026-01-29T02:33:42.839479Z" + "end_time": "2026-01-29T06:34:23.705523Z", + "start_time": "2026-01-29T06:34:23.670411Z" } }, "cell_type": "code", @@ -1039,12 +1039,12 @@ "" ] }, - "execution_count": 6, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], - "execution_count": 6 + "execution_count": 17 }, { "metadata": { @@ -1052,8 +1052,8 @@ "dailies_chart" ], "ExecuteTime": { - "end_time": "2026-01-29T02:40:03.594219Z", - "start_time": "2026-01-29T02:40:03.137486Z" + "end_time": "2026-01-29T06:34:24.099692Z", + "start_time": "2026-01-29T06:34:23.762377Z" } }, "cell_type": "code", @@ -1120,59 +1120,12 @@ "outputs": [ { "data": { - "text/html": [ - " \n", - "
\n", - " \n", - " Loading BokehJS ...\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } - }, - { - "data": { - "application/javascript": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\nconst JS_MIME_TYPE = 'application/javascript';\n const HTML_MIME_TYPE = 'text/html';\n const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n const CLASS_NAME = 'output_bokeh rendered_html';\n\n /**\n * Render data to the DOM node\n */\n function render(props, node) {\n const script = document.createElement(\"script\");\n node.appendChild(script);\n }\n\n /**\n * Handle when an output is cleared or removed\n */\n function handleClearOutput(event, handle) {\n function drop(id) {\n const view = Bokeh.index.get_by_id(id)\n if (view != null) {\n view.model.document.clear()\n Bokeh.index.delete(view)\n }\n }\n\n const cell = handle.cell;\n\n const id = cell.output_area._bokeh_element_id;\n const server_id = cell.output_area._bokeh_server_id;\n\n // Clean up Bokeh references\n if (id != null) {\n drop(id)\n }\n\n if (server_id !== undefined) {\n // Clean up Bokeh references\n const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n cell.notebook.kernel.execute(cmd_clean, {\n iopub: {\n output: function(msg) {\n const id = msg.content.text.trim()\n drop(id)\n }\n }\n });\n // Destroy server and session\n const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n cell.notebook.kernel.execute(cmd_destroy);\n }\n }\n\n /**\n * Handle when a new output is added\n */\n function handleAddOutput(event, handle) {\n const output_area = handle.output_area;\n const output = handle.output;\n\n // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n return\n }\n\n const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n\n if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n // store reference to embed id on output_area\n output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n }\n if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n const bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n const script_attrs = bk_div.children[0].attributes;\n for (let i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\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 function register_renderer(events, OutputArea) {\n\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n const 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 const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[toinsert.length - 1]);\n element.append(toinsert);\n return toinsert\n }\n\n /* Handle when an output is cleared or removed */\n events.on('clear_output.CodeCell', handleClearOutput);\n events.on('delete.Cell', handleClearOutput);\n\n /* Handle when a new output is added */\n events.on('output_added.OutputArea', handleAddOutput);\n\n /**\n * Register the mime type and append_mime function with output_area\n */\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n /* Is output safe? */\n safe: true,\n /* Index of renderer in `output_area.display_order` */\n index: 0\n });\n }\n\n // register the mime type if in Jupyter Notebook environment and previously unregistered\n if (root.Jupyter !== undefined) {\n const events = require('base/js/events');\n const OutputArea = require('notebook/js/outputarea').OutputArea;\n\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n }\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"f9ed2936-dd2c-4caa-ab15-7563ec286bd4\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\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, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\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\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\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 }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\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 };\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.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.8.2.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\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 } else if (force !== true) {\n const cell = $(document.getElementById(\"f9ed2936-dd2c-4caa-ab15-7563ec286bd4\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));", - "application/vnd.bokehjs_load.v0+json": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"f9ed2936-dd2c-4caa-ab15-7563ec286bd4\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\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, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\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\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\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 }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\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 };\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.bokeh.org/bokeh/release/bokeh-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.8.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.8.2.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\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 } else if (force !== true) {\n const cell = $(document.getElementById(\"f9ed2936-dd2c-4caa-ab15-7563ec286bd4\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" - }, - "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } - }, - { - "data": { - "text/html": [ - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data", - "jetTransient": { - "display_id": null - } - }, - { - "data": { - "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"3abf45ff-dc05-4496-a2a4-029a342fe517\":{\"version\":\"3.8.2\",\"title\":\"Bokeh Application\",\"config\":{\"type\":\"object\",\"name\":\"DocumentConfig\",\"id\":\"p1450\",\"attributes\":{\"notifications\":{\"type\":\"object\",\"name\":\"Notifications\",\"id\":\"p1451\"}}},\"roots\":[{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p1449\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1304\",\"attributes\":{\"width\":1200,\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1305\",\"attributes\":{\"bounds\":[-1,188]}},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1306\",\"attributes\":{\"bounds\":[1329.177368,1766.731374]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1313\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1314\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1311\",\"attributes\":{\"text_color\":\"#5B5B5B\",\"text_font\":\"Helvetica\",\"text_font_size\":\"1.15em\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1342\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1336\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1337\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1338\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x0\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y0\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/3VUa1BUZRjmmolTuxKXuAxMxhAoLlgEzOTigxYOsismGjRgg0JckhiCILC4mEqECirs+c45XBVZQGgyaXNRN4KQi0Jxi0VIEYiQiKJVQKEk+vFxZpzp1zPve773eb/3ed7zvXJrS8BzmQQBJ1y4IyYEPNYeH5hiEHqhxyLKmGAkba/kqBfBYaPreWvnGNR9si+rdITBhZ+Cgt79mME/bltTHjQxsDcrODdrR2A6N+1g6kDwelyWTZmIILotpWCHHkEDb2h05GcGgYadEy6lQt3qgHuzWg3zv+cp0v7Kdy4/fe1XBgP9AUt+PUIdRVGGvD86j8CvZGrRbYTAYH9l8LECAsyPd8wdIkg/6eATvZ+AaY/f7BpEVu5tPLC9UuIszFs+YXHFdDeB5667xdfMBP4vjTWeczKCnJob3/qHCjw0v1B/1tlfQqCubYp0qyP4zH19/LlWgucdA43LZ4VzVG+qM62j83eoqw9HaoU5Kf5lWrQgbhP0s3g/N/GqmkHqvoYwbZ7wner6hexhxbNiBucrdMl91QpoRrwTCksV2Kpq/Fzdo0CU6GuD8O8VqH+v5EWdCQOx1Dl//YQCd5pPFRUtKpCtM94YYc9Ar2q0pTiIgX9oq1rnxeCsZLfTBnOB/8mY8vUof7Or1xN4p0Y9rDPnhH6U3+oXSVOEnMGQfEZ+P1LYE+o39Z/qQPMU6d5Rv6iftI7q/eS+UP+pT7W5tpMytRBbFd8PlOUQyM1P7BhMIiiLTz4YoyGIe3j7w6FugsvE3bfGkgWfmiBvdGEx25vRb7udxavim5G5ySzuNdsNVr7JIi3k4h6tD4tt9i7hhrEsEmUW80sVLPZK9jw2v8qiPFXv+N/DLDJlB3sHLnHw0M8az5vgMKLyt4kTcYiVbvNqCefwsn6Dr+4kh5rU3DbPfA5d5M7j0E08smWPxGaRPFKlrFlpPI+d4iR7nOJRINs5/XtCITaMDUfZhhdi9fW3ugrsCjGh7PR6ZpBHXartU4m+PIaVWxa7HXm8pi8/utGHR7C9KM3ShYeTzmHSWschPyQ/bkqfx5AyJdS9k0NuSMeP8ipuJZ5U3QqubuKwpu/AjNsqHp3EMqxBK9y7nexqfCGdwwdSE224hsMBSfXgH61CPUU6V332n8212QKOq0yvrInh8E22k6PIlcNMc63lmBGHYyHeZ0xn2RX8b98eWQm6UV7aV6v8SsMkcvhIdltRvMRCKn77fLszBy/xGWOXLhYRUtVCzkXBF6Oxuz2nNwv+Uh8pUr9vKENHNJGC79XZvX4e61hsEhu1zdiykEtavhtcxaJPNeetMGDRpPyh/NPl92F4+T+LLVl+t3SH3GIGCHS9as+MaSGfFLLOsiiXIEgaZnepnMBJnJyjiiEw0dWdvplO0K1yLZuvIoiSNVq/xBHojVm5PxglMMy3eYMxZPEvJpUInuAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"x1\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y1\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/3VSbUyTVxSmAhGmHcUIrNu0qOgKluIYi4wEPRTkY6PiwImD6mDlswoRmKSIcziGFogQN9573/fdAIlahrqZ6IoIVNSVDw3sg4+BikYoDHEkQlsgQ5D5Y29vwrJfT8495zz3nPM8jlFPpvv1CKR19zO//BHBA/mk3JyCYF2p31TVVQQLW2Rqy20EAe0FE8l1CE4zKxRVRQg0JnvvJBECm++H2ypjSb92/zWH5j8RjFimj3p3kf6EdTnJApb0CUekt5Pk5D/XjLKcpgYEMbZdY5JqBHn7WhL6yxEc3C40misIPzdX2OgmVcQ5wj/wR9RiRDeCkMwTb5xxwgCzo50zRzCcHXNtXBWNoSPI8R29DFvzW3c9rmxejeHq0X0nqofI3Fx83K613HkGQQtra1c4iKCzoe54Sj8CFpxLB/5CYD8QViv1xFbkeNM61BXv2xB+cRPzu08RhhkZ70ENQ/7jeLi4bP0B/vQkAsd/9eD2W7o3pwOXv9AXG5ucT+5Yb17oDc8l98tYsFTrJiqg/HHo3fpwyop3FkeeHWMp0A9ty/62moKdPanLv+uiINXpp2XKnymIm+IXfdFBgUx3q7ihm4JWTUhNnz0CQaDnN15jFNiJCl3CJihrPGvzECunCK6J/1Xw6jAF4rzDZVODFOR4xxWE3iC4tK9GGi3e7ILgA0V7g8kfga97vn5zMNmH88f/+YG7G6cT5wfOH5wfufxSXRUXul1T7YlezRuUunth//XPsVMeQWmJGISV5pjIEgwBoqqNHQ0Y1vIGJY+6XuqLM2r5NzC8LbDrmHyThl7dzDZqGQ2KwLf0UQsY5NK2m/eX01b8UHrqE3UiDfd0+oe+Cho+ku5+4dJEw2IPf/XeORqe94QebjxDwxVN4smsPhrqNeJNTj4MOBvfvayKYMC2t/fKdAwDYpPH+OsmBgojfbNzV7Iwb+BZmpxZWGMsKQ3ew0IfPl85V8KCSrr1Na98FvaKnD53k7CQFfhKv1LPwG5R+KO8bsLThd0SWvoZsBhy6gv2M+BinJc7nGXgYGCwf5uSvHM4qlvVuCKdYKDg43N3PBmYNFxyM9ox0IaL13/lQea+rnlmuKRhIEjgHpxaSJBWpXhvDCF7cft2a5+u/VvIgIOxNssH0RAmMvNqWmn4RbuhIP4mDROGUfWOi+SdiytU1WUnn9JWPn/B1/aS32jIiXSdXTxP6u9qFUP6FKIHm5ctvyWhwcYo9LMMYzgQqbluMBH92rSUzJ1PW3Xm8Br2C73oRlvr8+LHde89weBkOrIlfQBDjWbHyueZL30myC3RpRPs1KXx4qIwzA9HU3uKMVzGWodDSeT9UHy8+oUfhk8j5/KLt5OYqxvv8ZoLDiCxf4S5/bMfMPwDTI5TiOAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1343\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1344\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p1339\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"x0\"},\"y0\":{\"type\":\"field\",\"field\":\"y0\"},\"x1\":{\"type\":\"field\",\"field\":\"x1\"},\"y1\":{\"type\":\"field\",\"field\":\"y1\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p1340\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"x0\"},\"y0\":{\"type\":\"field\",\"field\":\"y0\"},\"x1\":{\"type\":\"field\",\"field\":\"x1\"},\"y1\":{\"type\":\"field\",\"field\":\"y1\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p1341\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"x0\"},\"y0\":{\"type\":\"field\",\"field\":\"y0\"},\"x1\":{\"type\":\"field\",\"field\":\"x1\"},\"y1\":{\"type\":\"field\",\"field\":\"y1\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1351\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1345\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1346\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1347\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DyyvDAQAA4F92MZdZHsNOUySbcpADeTSvXGzLUpSFA3LA1MaiHZQssVYOIicXnLRSXv+c76uvJQiCkK2GbTNiu1E77LTLbmP22GufcRP2O+CgQw6bNOWIo4457oSTTjntjLOmnXPeBRddctkVM2bNuWreNdfdcNOCW26746577nvgoUceW/TEkmVPPbPiuRdWvfTKa2veeOuddRve++CjTz774qtvvvth00+//PbHX//8B3jw17KMAQAA\"},\"shape\":[99],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2VQa0hTcRx1OSsE6yplbJVgRhjMUTBipdXBHlZoYhmViiTla9kkLdE00XxrLBXv/z6YVmCbj/CDZj4jfGRSs2IaDBNJZ5EpqNOtNIW+dL0f+nQ458f5cc7xvKVL7WonmFqyZ/kNESyWBJztjCLw/Kef1BbufLKVgWxK2XsjhOCad2osxYv3I29zZmPrCZT1o9oHTaK+diAwfamXYMFDv0INiv91e2662ecJXCxBRuV+Bvj1zeS4x8AQ3ba5+ztBVIPZM95F5AmD6VXnnBhM3L+kzFczCH2o4PJcmXX/hhjjlYIqBo5AyZenHAMe7mWWGTGHd5lqoaaF4OXi2siZNIKk4zLrYhVBWu3Kh7kLNA5v6Y7ITqLBFgUvzzfRKEs0ZLq9oHF+OH6TfohGYGtPSbuZhm/GXd3CGI0OTY2PzZVgZvKQPMdBw2z46dXhJHLBN95frtf/odd1mnreECQncKqbHKi+TJCfGTveWSrmE/Z6zTtL88ZEzJW+eeTuIOt7CP2FvinJ2X35cSL3kowpxocYkIzGJp9hBm2M6nTjDhY/+r1GjWEs9kk0Glkui3KNZW66nIWaqnRRfGLRXBxTdPszi6zgWpX/VQ5JR0+oB65ziFZO+odpOfja9k7LbRxW+yVLXe48ioOXqW1xPKyGjXxyDg+ZtW/22SoHXaTpY0jd/34BlZLfxnCViM4jI832ixz0Gj9Tb7XIhTwCCjkLIo9VethZvDNETbyKY3GQkg7O72LBZ6SE9ChYSK1fzRUBLFxtLRXvsxn4UmmlrYkM5JLtOtxhcEqpznscLuqm1gRJRKh4360tKiywMPgLDzXgARgDAAA=\"},\"shape\":[99],\"dtype\":\"float64\",\"order\":\"little\"}],[\"bottom\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/12QfSzUcRzHkTNangotlYeUKXPNpTS69S5PU5mHVmsxJaFdspppd9N0WnQyl+L3/f1+ZylTFyk2Jeep/giTMXPOYw+4w0iGm5PF0l/nt/XXa+8/Pp/P+/PqUlVmJw8SZEy5bOWvEjjdkKc3qQgUsM8fmiXwFgS4De+gcdk9PclOQRA26SkKf0GgjK+3bJ4i4FeOpN2r5uaGBiLXw9UEE0uGOz7dHLPN2x7ZLxMEp+XufG5Lw6uJ7T2YQ8Ms4dWFnGIa1zrExadMaMyVrFalHKI3+jR7JNYNh9Go4bX4L5+h8aehbP9pPo3eaZsrvytofLeoGx0ppyGUhmRFTHF7jD2sIqcNgy0E7vl+i6XvuP5f1ifmsxQUtIG+syGFFFJs35slfqaQ7nNRGvqRgpckQ774jcKs9oizdJlCGT/Gy9uRYEu7LDg7hkCt/OnSYELQICr10G8maJMFl/XzCHbH9tjZaKmNLNPzfK66EgjcMlu8gwjuZyb9aHzIefrft9GPfM91a8MCQdxrtVMKj4Z/1NjTZgfOl/FvYzb6aFdSJ92sGRj67g7sCmMQzS+4JE5gUCgamp8p5FgrS3hwq5+BwPRTqL6AxSaNptZwlsVSa/oHaTyLeL42MDqNhZd+74yznsVLUZPV3ygFJELG4dlNBbKFnjEjHiVw0Cz4pDYqMKo8vtrrqcBXpTjOr5ubl8d29URUsFhpDTjnomJhrztcIwrn7lloSqKL3nJMFQYdbU9kUS4xyV8bZXDA1NeqfoTBQuub7TpzFo66tQjLcha/WifFIVUMtulP9FgIGJjrxtSPjzHoVMaNtyQzmOtbZMaLaAS4lu7rUNF4IpmwzZVwXNPGUOfzuEwkVdUefTQ68247qldo/AMyrvUEGAMAAA==\"},\"shape\":[99],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1352\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1353\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1348\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1349\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1350\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1360\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1354\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1355\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1356\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DsUpCAQAAwNdgDWqDc5mgIC2KSdTQ0haioygoOIRDpJNNgZQYQjiEkRGEiWQNFhFJfp93cEEQBBuG3HTLsBGjbhtzx13j7pkwacq0+2bMmvPAvIceeeyJp55ZsGjJshWr1qzb8NymF17asm3HK6/teuOtPfveOfDeoQ+OfPTJsc+++OrEN6fOfHfuh58u/PLbH3/9c+m/K9ejT3x0SAEAAA==\"},\"shape\":[82],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WRa0iTcRjFs2Z326tYgprmpVyQl0JU6HYUzZKNZXSDjbBCswkSiDYpc5qYhU0w3/9laqWCZC67MVNQDFlhpBk6vJRCeYmsoLk2A1OsD819Oh9+5+F5znnSU0eS6rIoetuaijKGCYokryo85wgWoxK09m6C1l+LlsN5BOqHA1suuNNl3mVYJbk+RpAWlJMuGFxz0kLFUGYFxbXbofGZZynIm0v7Ik9RfC44EVESRxF79FNthzdFoHdVvSOAIrNHW5WywuXrCDlvGk12+Z0890uAV8QfAn1wlofDSjDrVTMv9BBM2R1Xw/sI1im/OoY7CSKaPmQXtxB8n4jx1c2JkOXn6mfHRLRr7obY1pNldfKtqn5h04SIkSHl0pEBV26nJmaX+t2Xuvpx3mPU+8/I2yjS//f3ulFM2ObB4BgsHPJPZihQPTk+HM9QrvFMlccyKAOLDo5pOS7Lx8XaJYa9boqS8HgD5k2OwcCd1SiXv3z8tMuAFKFFVx9jQJ3Grkn7zbHBcs4atcYAmS10xtfG8bFRq47u49CrevsVDzhmTKOnm7o5VluqU+884tDJswZHnnG0l/00G8v48l6myQjfnsjRWibbIY3kqNLc09/4xmA1G30mJRybJxcUaxs47OacVt0ZDj9b/8aEaYY4odJ913uGH+ZpbVKzK0+QW8PbK2EMuwVJj9WfYdTUOb5HzfCCRh9q9mGwmOYOiCsZ1PvDOpWL//6nCvap0VN0N75rKH5OsTBxTDx5k6Iyf0pamk8hE/JumS5S/AW8YhjzkAIAAA==\"},\"shape\":[82],\"dtype\":\"float64\",\"order\":\"little\"}],[\"bottom\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WPbUhTYRiGi81MTdRFBv1waCMlbFmIhl/cSiWWIiIi1WZa2NRIKik6aWaYdkybGex9z3uQ/AgktVwpSzOHGOsDSoQ50yIy8yN/LNLlTDCp/hzPr4uL54b7uSc+pP9NsRMEnjOWvOgjWItIurL0koDTD+aO1xP8qolL6dcRDIoKZeVngpkld9meYYJMxfD38CaCMsdJc4WGILg2cvF+D0H5HU1iQR7FwM7Tlo/JFP/PT5rjKVTLPzQqDUVbTu/mgTkCXYc90OBBcWkuSKVdJZi6lqW9eUDO3VC+qg9YJjCGnPV1L8iU+qV/Jca8qXDmtxN0jGVn55cS6Au6RsP0JiRZhmr67CZ8sd1tbFyVqVRXbkt2mnB80bfq+lsTvNLn3eNWeYfkPWX66qYpuVdys4c1ejmVru/1c12NKJygqCsKyEiNFqCc/mpviBPQSyMPd24XcFTd35ygZti9cZ9X7ycBZ7TnubpgEa/5gy1VJhFH/LsqWqNE+DhOLUR4ijBzWYYxJ0NL0VJR7m+GFVtMVlAfQ472W2xGMcOsRdXvU8jwjA/b5beXwXji/UjaQ4bn/E/bI55B4XB0uzMZ1C7SOZnA1vsfcBtq/0wK6Obzbl0Ykzne9tRKSti6S7nHvDg/WipgqytxZNN+ASJ3MW0oXEA7P5oSFSLvk1wXH2pNX6OYtmXHeq9QeLt6Gt6VU7Twh7asFlMYUod2hDKKe9yMXzVHEeZ/+balkMLa5ukxe4ziHwAaZj2QAgAA\"},\"shape\":[82],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1361\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1362\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1357\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1358\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1359\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1369\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1363\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1364\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1365\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WTeTTVaRjHyzqEinI14YpcI3WdpqSQ+eZaRt2kxSldIVlKe1RkikqK1hHv+3vR4pREaUGLqDAUWepKlAoRZiRNMZapmN+Z0zn99Tnv+2zv832ed6i1qXjuZIqNPqrVGUYUy+xFWWtMKMZ1eqgpmlPsm69t0z2VYutspecTplHcirLzXc+fP5XOcVrJ25Weu6SLeep+8/cwya9pmULhODZri5YFRUfxUGq/iMLW/HX61EkUCj/e3PnLeIrHQ30WEi2K+VxJbrwyRbuNxExdiY877/UkdQT/nvoFSwu+Ejjdf5hpPEiwqvlixdo+gnzX4tARPQQvwncsu/2ewE1pqyHpIKg9Gz7/1zcEvtM7V75rItjvoSJM4ClSXeG++yXBxkUnnlc3EAw9XVvl10hwfMW84j7eX2YsSAlvIXAdo2aTxnOHtW/qtbcEJ6UZFzraCSbL9yZHdBKopFbl//GBwCBdohDbS6DLbZEI+gmCWls3VQwQhLQbaos/E5gd16kIHiJIbrVudlal+I3TE2mNo9BQiMEkIUVv83nhS14HecEh2c/GFBVZN1IKJ3/XKXXXgwkXzCgGazWUKkXf78WjrKe48uyWy33X8f5S23dqI/k8L9of9E7Wo4i9ee/cR17Pl/qnMkRqFOo+Pu+yFSlCR8Z1XeH1urGlNPgE34+rReg4Ea9H9OFXTxOfEOzNbio3LSFI6rYo7coj2NDyy2y/awTtEZpF19MJhm95FoSdIhjbVjNQlUiwLyKg8U4cgWTV+g+yvQRe7Fan8U6CXr85S6esIzhjX26gIiOwFxg6Rc4nqCgetDw3j6CowTyoyJogoXpuwywxQZ5maZiviGBU6Lk9iUYEp3Q6FmbqE4R+9ksbo8fXO/1GcEiXoNIj4/gsAcEBza2qbTxzZ5Zt+nsCgXKUbdL5iQQtMmHdZ57d3ivDvQ0JjHyudL6YSlD8rV7MrqL0xQ4Eke77tXykvL1yKM55Od+H1nh7N18Cz8I7zdnBBPIfXBoiwwj2HPw6WH6AwFRbamVyjCDK6bh5HiN4H9ccaZLG70fbrpcl2QSNEwe33S0kGFO9d2BNDYF3soZzKL8/jXqinUf4Pa07HKGyaBTFs4MtEf783GPzDe5qTqeYVJ+ftcSRYvn4N6LPyynOBoxTCFtPcWl4UapKJMWRAYG6J6Goqf3ikJFJYYZ97q8KKAwrbJKdnlIk1qelXv+L4ob2R039YQof2Y77eQIOOa4PstWsOJxekCcJWcwBh/okbps5yLB2bmg8h2NH1f7VyOZgXVe6caqcQ8xS9cbzHRza/JYlKX/hkO1x689gbQarqGGx3RSGNL3pX6VgSLBaV3N0Cfv/P9X6M9gdnaGctIXhIXUvmrSHIfLx7vSOWAadNTE5egl8fPSl6PtnGXzFBWmjMxkCZ17senSd4UKP8uIFtxmiKt9sLCtiqBCklj4uY2ix9L/8upwh9plkxeoqBlvVA/3r5QzOJ9s7P/EUR5gotT1h+HjPVuJQzbBd0mcgLGW4HhnkWMPny1UIWliYxWA+4Pr7bL5us2Wcg/AYz6s6Fy0jGW4oKx5s2s6wwznN2GczQ2t2iq44gEE30Pi9tRdDweHDQxXuDEnBgdNMHRkqDboULW0Z4t8qSndNY/hUwqTFxgy9LszjmoBhwgaXRA91hrqMkKP9wxxyD7kVuPdwKE0y9TrXxevsn+NS2cJhRpy+p289hxNBdjcflXFICTEb7XeHg7NQpaooncO2yjNeYyiHS8rJTW0xHAKweGZmGIfqjJro5GB+TjrLnh3x4iC/LOth7hy874w0NHLkYMdeScOtOUSvvhqYY8HBD3GJGkIOntY/XQrR4SC1cDf4qsjBaGf8P179FP8BIUxvteAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1370\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1371\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1366\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1367\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1368\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1378\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1372\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1373\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1374\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/22UezDWWRjHlRW5RO+WimWyiFKbSpKKL6V37Vtuu5sxsSTdiKalmWS0NpdRK7dyzu9XrouK5FpY127oQoQkm1ci5RLlkjt7dqaZ9o/96zNnznOe5/t9znNOlc3Lj9+BosHrzDHBFooqD2F1lhFFsFFmpL0BRUdS1eYBfQqtT7TVWo/CyWyfTaU2xRaj7IPx6hS5JeI/h1Uo7jQWRtsspShvCVrevJiiotu+zfJrinsDmp5PlSjqpWcc1yygcIw3nrSX/cLf7u4pl2B0+rzOGPC9eWE+RfqIhbmqNIVJRGngNSmKdijeippD8db6tbfkLEHwoEvXqWmCNGX/dE3G1l1X6xKnCOR9ZjZlzBA81J7QaGDxfZbKXX6M03u1vrf5H9pnx6f0z6VY65+l0cjqzOAvz1oZisDPugZ02/y95ShO5wVKRMhTRJdXNP7NfCwz279CgfnaF1i7/PlCCvHkATN15ld25VnDHAHF0RDZ+5sXUcDh7ZMrjF4BJoa5yhSJJQY9+Syu9XP8/M/xq3enTjgwjnwjdHVjeW+0tBy6xOrYhbjITcl/0aPukVQ+y3Qqea1P12L61cKadWSYb6kQ13bzUYI50RNTtoMEW5+PtmOAoMh9/KVMN0GyWyDZ3knQcMWiuVZM0F0zGBL3gmBmOGGjRyMBH9ez0b2O4PGLV91eNQSnwj3Lih4TRGdZtUk8ZPtlGvG/VhL4ZqWsuHeHoE2jQsKijGDHxTctlUUEouRC3qiQILL3g8a5AnYv8vXmdTcJOmxrdcpzCKpFDu3jGQTrynyL/dIIbN/tU8i4QmA/alCtlkKwe3hctziJQL8tWzMogSDpJ/mkw/EE4gvbxmrjCNy1MmW8Ywkqz1flyPIEQtVpdVEMgfNWsWlUNMGU2DFXJorp0I/12BFJUJo6+k43gvmsVxEXhxPM7V97/BSjjemxVfnnCcJPJ/6uxuhq6x92jtHRPL1mKTtXlqC3N4nlueynSMcYA1wmJI1Z/iXDqQWmFwiOmC7rGLr4hfYh2nK3CIGVQ0yFL2Pj+4iGJUznrrx6w1Dmx0BP6XoN85no9lGl4DrBxdS1yj65rI+L3IrsWN/OZhf/eJ/1s/UJ51j1iEDv6qvqqibGj4bawnYCT+NU54O9BFHaxSon2P0W86+Lm9i81hWmbi9l82HqJHhm+S17j4KxsAOGFIL9pSdeW1I4921Na3Ki2Baywa3Vh0LaSjF2zVmKnSJcHYijWJWp6yjIZnM/ovvo7W2Knrw5isI6iheuwoyJdvYPPA01KRykCFIY3JM2l0NW4eyDBwIOKTdaZk5rcIjkMyVF+hxWD9sqGoOD96hEa541h6/mCSUELhyGho/mhHtyuCu1vmaBHwf/oKEtmqEcFJZNbkokHAr+OLmhN5mDwSKTvarZHPR+TtwtVcLqJEtqaVVx0M9S2h5bz8E5rdNO1Mrh6WGim9XF4Yh1vtfRfg45nWTy/ScOOjqRD/hZDhuQ6H5Pmoea0Xi5pRKP/PgFtvFLeYx4uk0Ea/KYrraXOKPHo+PcyWZen7G1z912E4/R4ArloG08Eu6IFm8255GdtspDvJOHnFrwRh1LHsppXbqZjOIBH7nuH3hUx7nGqzP6zPNfLvMfRnd+CHAQ8fCrXnNJxNbvTRY+eybkMV9FMdrSgsdNC7cezoxHjM6tklojHrN1x1uM1v97PrJXdzWP592XI6y0eQQI/HbcVmN1u4Vhhxbz0Bq7FvpSluWJM1jnO8NhvEajJnaQQ1PG1OTIGw4aRrJ9MU0cYofi0mwfcgjgVtr1sz4+FqvK/5LH4R+fxKBb4AUAAA==\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1379\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1380\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1375\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1376\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1377\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1312\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1325\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1326\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1327\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1328\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1334\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1333\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1335\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1320\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1321\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1322\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1323\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1315\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1316\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1317\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_overrides\":{\"type\":\"map\",\"entries\":[[0,\"2025-01-02\"],[1,\"2025-01-03\"],[2,\"2025-01-06\"],[3,\"2025-01-07\"],[4,\"2025-01-08\"],[5,\"2025-01-09\"],[6,\"2025-01-10\"],[7,\"2025-01-13\"],[8,\"2025-01-14\"],[9,\"2025-01-15\"],[10,\"2025-01-16\"],[11,\"2025-01-17\"],[12,\"2025-01-20\"],[13,\"2025-01-21\"],[14,\"2025-01-22\"],[15,\"2025-01-23\"],[16,\"2025-01-24\"],[17,\"2025-01-27\"],[18,\"2025-02-05\"],[19,\"2025-02-06\"],[20,\"2025-02-07\"],[21,\"2025-02-10\"],[22,\"2025-02-11\"],[23,\"2025-02-12\"],[24,\"2025-02-13\"],[25,\"2025-02-14\"],[26,\"2025-02-17\"],[27,\"2025-02-18\"],[28,\"2025-02-19\"],[29,\"2025-02-20\"],[30,\"2025-02-21\"],[31,\"2025-02-24\"],[32,\"2025-02-25\"],[33,\"2025-02-26\"],[34,\"2025-02-27\"],[35,\"2025-02-28\"],[36,\"2025-03-03\"],[37,\"2025-03-04\"],[38,\"2025-03-05\"],[39,\"2025-03-06\"],[40,\"2025-03-07\"],[41,\"2025-03-10\"],[42,\"2025-03-11\"],[43,\"2025-03-12\"],[44,\"2025-03-13\"],[45,\"2025-03-14\"],[46,\"2025-03-17\"],[47,\"2025-03-18\"],[48,\"2025-03-19\"],[49,\"2025-03-20\"],[50,\"2025-03-21\"],[51,\"2025-03-24\"],[52,\"2025-03-25\"],[53,\"2025-03-26\"],[54,\"2025-03-27\"],[55,\"2025-03-28\"],[56,\"2025-03-31\"],[57,\"2025-04-01\"],[58,\"2025-04-02\"],[59,\"2025-04-03\"],[60,\"2025-04-07\"],[61,\"2025-04-08\"],[62,\"2025-04-09\"],[63,\"2025-04-10\"],[64,\"2025-04-11\"],[65,\"2025-04-14\"],[66,\"2025-04-15\"],[67,\"2025-04-16\"],[68,\"2025-04-17\"],[69,\"2025-04-18\"],[70,\"2025-04-21\"],[71,\"2025-04-22\"],[72,\"2025-04-23\"],[73,\"2025-04-24\"],[74,\"2025-04-25\"],[75,\"2025-04-28\"],[76,\"2025-04-29\"],[77,\"2025-04-30\"],[78,\"2025-05-06\"],[79,\"2025-05-07\"],[80,\"2025-05-08\"],[81,\"2025-05-09\"],[82,\"2025-05-12\"],[83,\"2025-05-13\"],[84,\"2025-05-14\"],[85,\"2025-05-15\"],[86,\"2025-05-16\"],[87,\"2025-05-19\"],[88,\"2025-05-20\"],[89,\"2025-05-21\"],[90,\"2025-05-22\"],[91,\"2025-05-23\"],[92,\"2025-05-26\"],[93,\"2025-05-27\"],[94,\"2025-05-28\"],[95,\"2025-05-29\"],[96,\"2025-05-30\"],[97,\"2025-06-03\"],[98,\"2025-06-04\"],[99,\"2025-06-05\"],[100,\"2025-06-06\"],[101,\"2025-06-09\"],[102,\"2025-06-10\"],[103,\"2025-06-11\"],[104,\"2025-06-12\"],[105,\"2025-06-13\"],[106,\"2025-06-16\"],[107,\"2025-06-17\"],[108,\"2025-06-18\"],[109,\"2025-06-19\"],[110,\"2025-06-20\"],[111,\"2025-06-23\"],[112,\"2025-06-24\"],[113,\"2025-06-25\"],[114,\"2025-06-26\"],[115,\"2025-06-27\"],[116,\"2025-06-30\"],[117,\"2025-07-01\"],[118,\"2025-07-02\"],[119,\"2025-07-03\"],[120,\"2025-07-04\"],[121,\"2025-07-07\"],[122,\"2025-07-08\"],[123,\"2025-07-09\"],[124,\"2025-07-10\"],[125,\"2025-07-11\"],[126,\"2025-07-14\"],[127,\"2025-07-15\"],[128,\"2025-07-16\"],[129,\"2025-07-17\"],[130,\"2025-07-18\"],[131,\"2025-07-21\"],[132,\"2025-07-22\"],[133,\"2025-07-23\"],[134,\"2025-07-24\"],[135,\"2025-07-25\"],[136,\"2025-07-28\"],[137,\"2025-07-29\"],[138,\"2025-07-30\"],[139,\"2025-07-31\"],[140,\"2025-08-01\"],[141,\"2025-08-04\"],[142,\"2025-08-05\"],[143,\"2025-08-06\"],[144,\"2025-08-07\"],[145,\"2025-08-08\"],[146,\"2025-08-11\"],[147,\"2025-08-12\"],[148,\"2025-08-13\"],[149,\"2025-08-14\"],[150,\"2025-08-15\"],[151,\"2025-08-18\"],[152,\"2025-08-19\"],[153,\"2025-08-20\"],[154,\"2025-08-21\"],[155,\"2025-08-22\"],[156,\"2025-08-25\"],[157,\"2025-08-26\"],[158,\"2025-08-27\"],[159,\"2025-08-28\"],[160,\"2025-08-29\"],[161,\"2025-09-01\"],[162,\"2025-09-02\"],[163,\"2025-09-03\"],[164,\"2025-09-04\"],[165,\"2025-09-05\"],[166,\"2025-09-08\"],[167,\"2025-09-09\"],[168,\"2025-09-10\"],[169,\"2025-09-11\"],[170,\"2025-09-12\"],[171,\"2025-09-15\"],[172,\"2025-09-16\"],[173,\"2025-09-17\"],[174,\"2025-09-18\"],[175,\"2025-09-19\"],[176,\"2025-09-22\"],[177,\"2025-09-23\"],[178,\"2025-09-24\"],[179,\"2025-09-25\"],[180,\"2025-09-26\"],[181,\"2025-09-29\"],[182,\"2025-09-30\"],[183,\"2025-10-09\"],[184,\"2025-10-10\"],[185,\"2025-10-13\"],[186,\"2025-10-14\"],[187,\"2025-10-15\"]]},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1318\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1319\",\"attributes\":{\"axis\":{\"id\":\"p1315\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1324\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1320\"}}}],\"min_border\":0}},{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1381\",\"attributes\":{\"width\":1200,\"height\":200,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1382\",\"attributes\":{\"bounds\":[-1,188]}},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1383\",\"attributes\":{\"bounds\":[-31.177939072646268,52.459862763673755]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1390\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1391\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1388\",\"attributes\":{\"text_color\":\"#5B5B5B\",\"text_font\":\"Helvetica\",\"text_font_size\":\"1.15em\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1419\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1413\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1414\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1415\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/xVUezTVWRTeXUrybFyuxuPevJnLvdfbzWN7Lg1JWEtTxKhUmNKgYpj1I6XCqJhpLCQtlsfENDV5xj1ReYQhj2ooadLksVJXyshjTn996zu/s39n7/3tb8OrOta4SBUB3Id5nAIJrLw3n5KTIXBZfeXvIxsIbJx/FspXJdC9WH0uVYPAXC/7vphLmJtbvG06DQijE5YR7UnRKjosK3AzAV5Jd8utTQQE6hrZ7zkE0p44116gWFXSXzPyJYF/WptjG/QJ4/WFv+l7PfofdeW+QhonnxcS8px+116MWS3XJPBM8S3K0bitx50559gEwi89n+bRPAY/5l9TonnJTgefZq0lcH65+1XlnAR4jvoP/B67gG24esQRWo/MjIPSKW1kxB4q0548hKjJtexwijvql7lxXITkcdfGRi2EsJLdPgI1hFap9liSEkKeR0qEkwqC6v1npvLrEXSrelzSAWHpmLsoaN4F/Ly2nY6RQXgpLiyfWofg3X7Iu0wRge39KWi7PIKeQ6Axn8YZSlv+VNNAKHUVjpbRPCLtE2Mj9BHmA74L79JEqBGnBBsoIGQ5igcO/+cCsFO3radRAqVXi8OU1hCok9tz1IjWa39mwWqbGoHIc9f8TtJ+NPBWR9tpfz1TIlM7tAk8NTdrc6b9C/9NKXZYj4DvXLp70mbCRAaylgZ5BPb6kEAHC4LDOXVNSZYELE3Gi8asCd5wjco2tyEkQGB43ZCiK4s15E/PM/WjcnhWBDjmL6dCRIRp3iEOEVgQpiprl1eZMWHSNEJPzxoSMB+LkD6mOj5ybeQX03fZ7SzVOfreXOWlgnouAeEhpVzQJVBYmBOtqUOgf3qiWJaerz9zXu4Pyi+W+S1p0jrURC03FGl9irUeZl+vIxDyQ1tmiVQCJ15kZ09+dIGaZMGpd1QfebvhRDNthAerhzwrqY6zdk6hKnpUz3fN1Q76yIh012hKDBFG7l1c6jBBRicwz6iIotRMi2VujBB4cczDzRiZs2dNk3sob57QSHM2Qib+zgnWtBHCVn6sSzaf6m/fwP1eiHDwhcWrewJkDDlmsioCqlPSUL6tBcK3PV7TXgJEyZCFvTW9J03ozUyzRAzmmOy9Y0njB+LMWTaIFT+W71uwQYj0zUiMskU4u15XI4dyK2ArG9ki86/3ZLrYDuHD62DrK3ZIXC+cSlqxRxSmpgVdcEKoyBjOU3BGKIlZNtnviIzNkFq0nxMS20yd/JtOyCRP1B976ITP+y7P1HARiVrnx8m7rniFLV1MN3NDxv/3Nd7gjuif0DEq9kSyk+/1YMEDeRW2fcb9HsgcntY4OOWG5Cdr5a4qROaJ1CFrxBFJXMauXF8xkiZ7Kc7YIl5qS/GpoHWtDsqLPGg/dmeE/qVP+zWUoO0Fugh2fNXiNxwEYU1ujSad58iXLQZSOv+k9PjT+QYJdNw6WZ6/IgGDRM2wWTk6z+y7Bl1LEoBK6dqlWQmo7pnxquqXwJWm+KJN4xKwF6hP1C1LYPBXh54bdA/pfdgQEKREwKpbrrWW7oHeY3kR23UJw23e33GU7o++DW8cZOk8uuVVqgQZEYgX2QVqfOZcrZgRisYv7nN86V5p4SnFKW8kEFrQNVpIfeQQFbFgoEXg0UGF2Ao6p5x9cpMydI/N88KT1Q0JsxKWYN1qRuBAe/z+hs/+GWi41yUkjMX22pZOEfXVpyO/lIkIKhh381nUJ2+67dwqqE/quJ6bCywI1IYtVl8VEKZct3RRnsY9vJ1a9IRyFenlOKElYWqaBBs1rQjD2iS3a4s1YVZ97nxDfYfCgddBlZaEKN4Obqum93Y8knfeQ/l1X/2fTSnmHlitk6doU7n4Wiok8PYr25MyAgJnAjvJOnO6f1MXA/jUp9Uy9e29PPI/ZRs6POAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1420\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1421\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1416\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1417\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1418\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1428\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1422\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1423\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1424\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3IezwTCBwAcK3YYs0sY4xZzDw3Nmnltd+8OuUqlRBND3pgHaVk5fW5CKHoDuEoeZTKUR+luuxXaSFJUq2SHkpJ5VEpRNef3+/Z9BNhIVIjCFByEvac0YPnrMa8jS5UEO7xZ1XWzYIVvtL6NdZfxJ0tUcfbv15VxLRfZCzfO6FY/5JWU7dQC7lHeXK3nzRM/fruQCdbD0WC2I0OKj0MbZswoenoY/+V7Kx2a31kpUqLlG/18Y10863CmUx8Pz8oK0BgjFe0VvQIN7PQTqv5ene9MSokjkuf/WuE7TxeFCeHiZpqLvmfuIa43XuZ6rI5A0cdKoaCPtAxxyOl5cqJuVjZB80v66no3PjBvMJQE6UtvJt+pT8UaomijgcLYhUlBXwn3/FxMdmmqGFDAhGie3JvWIRqg9J1vqUjgwalcXXhGitosLRKJWMe1QGXCbXpLgcdaGtdzF9vTYUaegt5js0cSLcO/XYybjbIprnlzu4kaMprlu2fIsL0Ben93kEShOej5MZPEvidU/VGPyCBJEJSWH6ODMmJa+fKHHVALfgm2S+VDkXee9Mu2+rBK5+GXFGsLryj6N77s1wHngT8t28NmQy1gaeoQuJMqOP/cTc4bUSs5jmHQmi6oNgymf7o4OhnRcjeZ/6HlxAwod6HGGuuieFlP7x9gnVwv/hkRVEkHTvfv23MZzOwqr56wzOSIfasTf192y42TokqLqsf4qCgWun/7LYlUu6sLB9YZotN0vR1M5h2WNU+M0iaYo/SrOiQYqIAEymbPE8zBHiwNNOFdu7XX1KKbWLssPDl7DPRmTycGzBDxCmywUOuFFZQhxVWFR9lvCZZYmStqjx0MxeHTs2KyBnkYFaBcp9PpRmaUTonEu6Z4oAq+SpDwxQPlMeVKT+yUUXMP7jhDQu9u82oJqOGuNDZJ3p8nx7ydpvGJ9+mIl2nq3b6NQHZ760S3W73KibozWMtSV/EgsnFvI5KDdBt7LO+raACtdoyg2agBzupDynVBUwISWp/sWHQBCrzs/MstswDVkaO80SeKQgzsu+dLTWDnCPq8VrmHBjl2pyZfZ4D13nfo3S9uOCo3N09EGYJ33yz+ht6rSD+tMQi9J018Cv79UpzbSAwrHaVfLktKEvkpl7zeNAV10x0aeDDX7FpMTdJ9kCt3ajaSRTA+fjijuhZQri+KxAr3wiB8KI2akjmAFuvBl6zHHeAY3n+rd1l86GfvDMpZZEjeL32MkyecITeoMFJapIIzpVo5kg7FkJwhF8FO20RtIaqz2td7AT8kQ+XRsecQPXYbxVkOIOs2HB7vNwFYi6Gfxrpc4UtM5IybvDEQI0b6jzkBZBcHk2I8pBA9vrWnqUz3KF3O63aM9cdhA9cMxkn3IF5i6Tl4uYOD1O6JCNyCaiCjDgL/gHoX9Y1s81aDN/Hti5fUuMCcq8B7hxtJ/j0Wde9TFsEwti+5QOjDtAQOujQYyGAdCYl9u4dW2Azp36uXWIJRceKnviGmcHhFfwCYZIxkIcZhxfOp4NcrigzI2sD37/GwciVCIHGi+yduQTASHqw4+pJsVq+e4by4ZC4vUTb4HrUfXFzap09c9NzRTCV5+H0eEzRZP50KMZDHcNFL2r4zdoYsiD3xJgRHROe03nhXQbYJg+UVeobI0vrcAGHwMY237PJO56zkDS1bgHZyAidqKIDdx2ZOFlf7RsjZGKrSbG4oo+Jx00rCIv9WPjF7TddQiAbdxf2rxXLTPHmNe8jL15x8OIwFwkyCxwv0/JhPrVCvqRbbWWTDaoiLzWm/bTF9R/WqMev5uHmvW967/zNw9SPUwm3pnlYWqQJEdv4KCRPGlDO8zHnlNW8+w/s0OTOXb2D2fbY/sjz7FsfAQ7T5iZOVwtQzVeDt/upALN3fCtOVRfiSGQAw1NfiCne/m8/GgrRImO0cd8v02j6yu89AtxV1We2OkyAzTSV/XCnPd7P3Hl+XaYdWn23SiEX2uL/R9jKtuAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1429\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1430\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1425\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1426\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1427\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1437\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1431\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1432\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1433\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DaTaCAQAAwO8KQojwU086BSmlRciSNVsiu2TrItQtRF3OzHszFARByGFHHDXsmONOGHHSKaNOO+Osc8acN+6CCRddMumyKdOumDHrqjnzFiy6Zsl1N9y07Jbb7rhrxT33PfDQI4+teuKpZ557Yc1L6155bcMbb73z3gcfffLZpi+2fPXNdz/8tO2X33bs+mPPX//sO/AfSxxzGnABAAA=\"},\"shape\":[92],\"dtype\":\"int32\",\"order\":\"little\"}],[\"bottom\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wHgAh/9eBGAMcOL5j/8lux4dx/wPzA/gfCNG/I/KNwSX11z9j/czG3vnQkAQOSTUEUHywFAHIMXOfFEAkBK/wIi0I4HQDs8VIp9JA1AGKirhvaWF0DgkF/vGoocQBnP/A+DDRpAer4FMXcBFUCQxd43GIcPQHR8WjMKRQNAQOwcvp7oyz8QiESzTMvdP8Bm32Fu5KM/fr9Fy43p/j8AS8453uAGQAByq+WPPxFAMHO9Ni/t5D+w/Bv2Qab5P3g76JSTLw9AYHzNO6lrDkBMqIhQxwQPQDyYMY+xvAxAmB5KV1BXDECs0w5cRygKQLxHQI0TrQdAMCbh005kBEAYLdE+cHn6P0in5qmnbPk/HGaT4CGFAUCw6cmaXbEHQIyckdsTmg9AOGRqf5bUEUAtFJvc48UWQIq25YYEZB1AoqcZvi0XHkCCkE6WmDIcQGjgy2PTyxhA7On+UJCzFUDwuxN5HWUVQI2ltRZS+hVApLvZR+tOEUBsb3UiahcHQIgnD5AqvQJAOAHwXzm7AECQSwHvtMvwP3BssmTGv/E/+GzQDKwgCUCWw/Q7q/4QQCRsWCHBnAdAHOhVC5SaAECQNp/03Sf1P0Dl95iHu/c/0A2H2Vk5+j+4sJ1Ubj8JQGAVh7TtxAVAgC+H28zVD0BodBnHnp8PQPCBnzeeJgxA8EfNijUJAUDArDuVKmcBQACnmv+A1QRA0Eivw5Y1A0DY61pa0x8IQIhZVxoOSRhAOC30Idn0FEAotdnIQvgGQLitfpYPNQhAkCzyHDPlBUBAFZ0ss0kCQJgyGFkjJw5APMCxBIiXFkBkn5SxGZ0UQIDL/oXB1RVAAG4lMIa7H0CYwRdL+7sXQBDKIUkZ/xFAgFNmK+PT4T8olyznak3yPxB+elIyGwZA0Jnd5JXH7D8A9vF61PGKPwDO6hVzias/QIq7bflB7T9Q59qMKCn+PyB2cmF+bAJAptXkcRW8EEBSlUySiZIXQEC7KcfgAgAA\"},\"shape\":[92],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1438\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1439\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1434\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"value\",\"value\":0},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1435\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"value\",\"value\":0},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1436\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"value\",\"value\":0},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1446\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1440\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1441\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1442\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3D5zaCAQAA0E+RJOMVlHFOf5JNw3qxyA5JVvqDEMqM93PvOTcIgqDHkGF77TNiv1EHjDlo3CGHHXHUMRMmHXfCSadMmXbajDPOOue8Cy665LIrZs2Zt+Cqa6674aZFt9y25I677rnvgYceWfbYE0+teGbVc2teeOmV195Y99aGd977YNNHn3y25Yuvvtm247sffvrltz92/fXPf01pGICAAQAA\"},\"shape\":[96],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wEAA//8WkXXw/ZYCMBXCfudj8cWwN+dsqlXwBnAGYs1DkCQF8AUpEyL8zYVwN0YdXuzCRbA5P+gTvKbGMBQ9m07EvYbwNqhkJSYixXA9uLabZAMCcBIdmdRW+zmvyCUTMNeb8y/gIbxkmy6ub8QJxm6QZ/nvzbOPmiR3gjALLCWJ/ZtAcAUbW3/tE3zv1gq+vpe3ea/wAPr9RtS2b8oB5P7LJfwv1TvO36aTfm/EFlHqyCb/b+0wYJT1Vbjv+DrmhjNLcG/IAryczEptb+Iy19ML4j7v9DXCQWejQbA2hevlcTiDMBX/iXYSAoSwKyC41EIiBTA8AJQ8DvyEsAmJ6i2q4YSwFL7MdSUohDAg9iwxY5rD8CbGl8NPSIRwHyArnZFQRDAYFr9oeCnBcBobfyLaoT+v0gQjOXUhxvAg3R7tHFmIMDPvIlsXvMgwOQuYWRiGBzAhI2s2b1gFsDQqPNHtXsOwBD3l22gxwDAgCCC8ucP0b+whUPNHzcJwLCoyCZZaRjAwP/EtmO3G8BMJjMjEn0gwHC/SqP9AyTA9Iv9Q+nZJMBcjKImb/snwOT9i5Gv5SjA6qPA32hYJsCIjyLPowcmwKABRNDRDSLAGuqJlTiYI8BI4Q08zpIiwAbBKg70lSDAPcvkAJu4FsAulVSwHTwPwFjfxA2EWwTA4J25CoLwAcCAQegspNEGwJrHunxlIAbASBHgpO5nCcDS3QHu5gAOwCE7iZyprRPATiMKdnkBFcCkaoQ4fesUwIOkEia61RLAbNoUAgIqCsCI2zwOHmUHwLi5bV5eJua/vhZIGBZtA8Aw2mIv6fUCwBTM8jTqqRDAdkoBwwmtE8CSdwFnEVEUwA56JUfEcBPASBOKfGszDsCgqlJ+SxMEwAAiYCeTPOW/oMGjYzZV4L+whxzGZz7qvyBGK4OwqOq/4GQcfPZo4r/I1elyUCwCwAgLX8cwVATAoFWhzpKLB8AAyY4ztIX3vwCInHnXu+m/YEaTeLcH5b/AY/lffL7RvwB+1O53Tq2/1CqLdQADAAA=\"},\"shape\":[96],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1447\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1448\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1443\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1444\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1445\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1389\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1402\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1403\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1404\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1405\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1411\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1410\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1412\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1397\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1398\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1399\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1400\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1392\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1393\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1394\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1395\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1396\",\"attributes\":{\"axis\":{\"id\":\"p1392\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1401\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1397\"}}}]}}]}}]}};\n const render_items = [{\"docid\":\"3abf45ff-dc05-4496-a2a4-029a342fe517\",\"roots\":{\"p1449\":\"ad9660e3-96ed-42d7-a285-6d205d325b35\"},\"root_ids\":[\"p1449\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", + "application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"d9bd6441-530e-4d45-bd06-ca2a5f61c54b\":{\"version\":\"3.8.2\",\"title\":\"Bokeh Application\",\"config\":{\"type\":\"object\",\"name\":\"DocumentConfig\",\"id\":\"p1834\",\"attributes\":{\"notifications\":{\"type\":\"object\",\"name\":\"Notifications\",\"id\":\"p1835\"}}},\"roots\":[{\"type\":\"object\",\"name\":\"Column\",\"id\":\"p1833\",\"attributes\":{\"children\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1688\",\"attributes\":{\"width\":1200,\"height\":400,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1689\",\"attributes\":{\"bounds\":[-1,188]}},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1690\",\"attributes\":{\"bounds\":[1329.177368,1766.731374]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1697\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1698\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1695\",\"attributes\":{\"text_color\":\"#5B5B5B\",\"text_font\":\"Helvetica\",\"text_font_size\":\"1.15em\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1726\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1720\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1721\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1722\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x0\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y0\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/3VUa1BUZRjmmolTuxKXuAxMxhAoLlgEzOTigxYOsismGjRgg0JckhiCILC4mEqECirs+c45XBVZQGgyaXNRN4KQi0Jxi0VIEYiQiKJVQKEk+vFxZpzp1zPve773eb/3ed7zvXJrS8BzmQQBJ1y4IyYEPNYeH5hiEHqhxyLKmGAkba/kqBfBYaPreWvnGNR9si+rdITBhZ+Cgt79mME/bltTHjQxsDcrODdrR2A6N+1g6kDwelyWTZmIILotpWCHHkEDb2h05GcGgYadEy6lQt3qgHuzWg3zv+cp0v7Kdy4/fe1XBgP9AUt+PUIdRVGGvD86j8CvZGrRbYTAYH9l8LECAsyPd8wdIkg/6eATvZ+AaY/f7BpEVu5tPLC9UuIszFs+YXHFdDeB5667xdfMBP4vjTWeczKCnJob3/qHCjw0v1B/1tlfQqCubYp0qyP4zH19/LlWgucdA43LZ4VzVG+qM62j83eoqw9HaoU5Kf5lWrQgbhP0s3g/N/GqmkHqvoYwbZ7wner6hexhxbNiBucrdMl91QpoRrwTCksV2Kpq/Fzdo0CU6GuD8O8VqH+v5EWdCQOx1Dl//YQCd5pPFRUtKpCtM94YYc9Ar2q0pTiIgX9oq1rnxeCsZLfTBnOB/8mY8vUof7Or1xN4p0Y9rDPnhH6U3+oXSVOEnMGQfEZ+P1LYE+o39Z/qQPMU6d5Rv6iftI7q/eS+UP+pT7W5tpMytRBbFd8PlOUQyM1P7BhMIiiLTz4YoyGIe3j7w6FugsvE3bfGkgWfmiBvdGEx25vRb7udxavim5G5ySzuNdsNVr7JIi3k4h6tD4tt9i7hhrEsEmUW80sVLPZK9jw2v8qiPFXv+N/DLDJlB3sHLnHw0M8az5vgMKLyt4kTcYiVbvNqCefwsn6Dr+4kh5rU3DbPfA5d5M7j0E08smWPxGaRPFKlrFlpPI+d4iR7nOJRINs5/XtCITaMDUfZhhdi9fW3ugrsCjGh7PR6ZpBHXartU4m+PIaVWxa7HXm8pi8/utGHR7C9KM3ShYeTzmHSWschPyQ/bkqfx5AyJdS9k0NuSMeP8ipuJZ5U3QqubuKwpu/AjNsqHp3EMqxBK9y7nexqfCGdwwdSE224hsMBSfXgH61CPUU6V332n8212QKOq0yvrInh8E22k6PIlcNMc63lmBGHYyHeZ0xn2RX8b98eWQm6UV7aV6v8SsMkcvhIdltRvMRCKn77fLszBy/xGWOXLhYRUtVCzkXBF6Oxuz2nNwv+Uh8pUr9vKENHNJGC79XZvX4e61hsEhu1zdiykEtavhtcxaJPNeetMGDRpPyh/NPl92F4+T+LLVl+t3SH3GIGCHS9as+MaSGfFLLOsiiXIEgaZnepnMBJnJyjiiEw0dWdvplO0K1yLZuvIoiSNVq/xBHojVm5PxglMMy3eYMxZPEvJpUInuAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"x1\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y1\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/3VSbUyTVxSmAhGmHcUIrNu0qOgKluIYi4wEPRTkY6PiwImD6mDlswoRmKSIcziGFogQN9573/fdAIlahrqZ6IoIVNSVDw3sg4+BikYoDHEkQlsgQ5D5Y29vwrJfT8495zz3nPM8jlFPpvv1CKR19zO//BHBA/mk3JyCYF2p31TVVQQLW2Rqy20EAe0FE8l1CE4zKxRVRQg0JnvvJBECm++H2ypjSb92/zWH5j8RjFimj3p3kf6EdTnJApb0CUekt5Pk5D/XjLKcpgYEMbZdY5JqBHn7WhL6yxEc3C40misIPzdX2OgmVcQ5wj/wR9RiRDeCkMwTb5xxwgCzo50zRzCcHXNtXBWNoSPI8R29DFvzW3c9rmxejeHq0X0nqofI3Fx83K613HkGQQtra1c4iKCzoe54Sj8CFpxLB/5CYD8QViv1xFbkeNM61BXv2xB+cRPzu08RhhkZ70ENQ/7jeLi4bP0B/vQkAsd/9eD2W7o3pwOXv9AXG5ucT+5Yb17oDc8l98tYsFTrJiqg/HHo3fpwyop3FkeeHWMp0A9ty/62moKdPanLv+uiINXpp2XKnymIm+IXfdFBgUx3q7ihm4JWTUhNnz0CQaDnN15jFNiJCl3CJihrPGvzECunCK6J/1Xw6jAF4rzDZVODFOR4xxWE3iC4tK9GGi3e7ILgA0V7g8kfga97vn5zMNmH88f/+YG7G6cT5wfOH5wfufxSXRUXul1T7YlezRuUunth//XPsVMeQWmJGISV5pjIEgwBoqqNHQ0Y1vIGJY+6XuqLM2r5NzC8LbDrmHyThl7dzDZqGQ2KwLf0UQsY5NK2m/eX01b8UHrqE3UiDfd0+oe+Cho+ku5+4dJEw2IPf/XeORqe94QebjxDwxVN4smsPhrqNeJNTj4MOBvfvayKYMC2t/fKdAwDYpPH+OsmBgojfbNzV7Iwb+BZmpxZWGMsKQ3ew0IfPl85V8KCSrr1Na98FvaKnD53k7CQFfhKv1LPwG5R+KO8bsLThd0SWvoZsBhy6gv2M+BinJc7nGXgYGCwf5uSvHM4qlvVuCKdYKDg43N3PBmYNFxyM9ox0IaL13/lQea+rnlmuKRhIEjgHpxaSJBWpXhvDCF7cft2a5+u/VvIgIOxNssH0RAmMvNqWmn4RbuhIP4mDROGUfWOi+SdiytU1WUnn9JWPn/B1/aS32jIiXSdXTxP6u9qFUP6FKIHm5ctvyWhwcYo9LMMYzgQqbluMBH92rSUzJ1PW3Xm8Br2C73oRlvr8+LHde89weBkOrIlfQBDjWbHyueZL30myC3RpRPs1KXx4qIwzA9HU3uKMVzGWodDSeT9UHy8+oUfhk8j5/KLt5OYqxvv8ZoLDiCxf4S5/bMfMPwDTI5TiOAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1727\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1728\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p1723\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"x0\"},\"y0\":{\"type\":\"field\",\"field\":\"y0\"},\"x1\":{\"type\":\"field\",\"field\":\"x1\"},\"y1\":{\"type\":\"field\",\"field\":\"y1\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p1724\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"x0\"},\"y0\":{\"type\":\"field\",\"field\":\"y0\"},\"x1\":{\"type\":\"field\",\"field\":\"x1\"},\"y1\":{\"type\":\"field\",\"field\":\"y1\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p1725\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"x0\"},\"y0\":{\"type\":\"field\",\"field\":\"y0\"},\"x1\":{\"type\":\"field\",\"field\":\"x1\"},\"y1\":{\"type\":\"field\",\"field\":\"y1\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1735\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1729\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1730\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1731\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DyyvDAQAA4F92MZdZHsNOUySbcpADeTSvXGzLUpSFA3LA1MaiHZQssVYOIicXnLRSXv+c76uvJQiCkK2GbTNiu1E77LTLbmP22GufcRP2O+CgQw6bNOWIo4457oSTTjntjLOmnXPeBRddctkVM2bNuWreNdfdcNOCW26746577nvgoUceW/TEkmVPPbPiuRdWvfTKa2veeOuddRve++CjTz774qtvvvth00+//PbHX//8B3jw17KMAQAA\"},\"shape\":[99],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2VQa0hTcRx1OSsE6yplbJVgRhjMUTBipdXBHlZoYhmViiTla9kkLdE00XxrLBXv/z6YVmCbj/CDZj4jfGRSs2IaDBNJZ5EpqNOtNIW+dL0f+nQ458f5cc7xvKVL7WonmFqyZ/kNESyWBJztjCLw/Kef1BbufLKVgWxK2XsjhOCad2osxYv3I29zZmPrCZT1o9oHTaK+diAwfamXYMFDv0INiv91e2662ecJXCxBRuV+Bvj1zeS4x8AQ3ba5+ztBVIPZM95F5AmD6VXnnBhM3L+kzFczCH2o4PJcmXX/hhjjlYIqBo5AyZenHAMe7mWWGTGHd5lqoaaF4OXi2siZNIKk4zLrYhVBWu3Kh7kLNA5v6Y7ITqLBFgUvzzfRKEs0ZLq9oHF+OH6TfohGYGtPSbuZhm/GXd3CGI0OTY2PzZVgZvKQPMdBw2z46dXhJHLBN95frtf/odd1mnreECQncKqbHKi+TJCfGTveWSrmE/Z6zTtL88ZEzJW+eeTuIOt7CP2FvinJ2X35cSL3kowpxocYkIzGJp9hBm2M6nTjDhY/+r1GjWEs9kk0Glkui3KNZW66nIWaqnRRfGLRXBxTdPszi6zgWpX/VQ5JR0+oB65ziFZO+odpOfja9k7LbRxW+yVLXe48ioOXqW1xPKyGjXxyDg+ZtW/22SoHXaTpY0jd/34BlZLfxnCViM4jI832ixz0Gj9Tb7XIhTwCCjkLIo9VethZvDNETbyKY3GQkg7O72LBZ6SE9ChYSK1fzRUBLFxtLRXvsxn4UmmlrYkM5JLtOtxhcEqpznscLuqm1gRJRKh4360tKiywMPgLDzXgARgDAAA=\"},\"shape\":[99],\"dtype\":\"float64\",\"order\":\"little\"}],[\"bottom\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/12QfSzUcRzHkTNangotlYeUKXPNpTS69S5PU5mHVmsxJaFdspppd9N0WnQyl+L3/f1+ZylTFyk2Jeep/giTMXPOYw+4w0iGm5PF0l/nt/XXa+8/Pp/P+/PqUlVmJw8SZEy5bOWvEjjdkKc3qQgUsM8fmiXwFgS4De+gcdk9PclOQRA26SkKf0GgjK+3bJ4i4FeOpN2r5uaGBiLXw9UEE0uGOz7dHLPN2x7ZLxMEp+XufG5Lw6uJ7T2YQ8Ms4dWFnGIa1zrExadMaMyVrFalHKI3+jR7JNYNh9Go4bX4L5+h8aehbP9pPo3eaZsrvytofLeoGx0ppyGUhmRFTHF7jD2sIqcNgy0E7vl+i6XvuP5f1ifmsxQUtIG+syGFFFJs35slfqaQ7nNRGvqRgpckQ774jcKs9oizdJlCGT/Gy9uRYEu7LDg7hkCt/OnSYELQICr10G8maJMFl/XzCHbH9tjZaKmNLNPzfK66EgjcMlu8gwjuZyb9aHzIefrft9GPfM91a8MCQdxrtVMKj4Z/1NjTZgfOl/FvYzb6aFdSJ92sGRj67g7sCmMQzS+4JE5gUCgamp8p5FgrS3hwq5+BwPRTqL6AxSaNptZwlsVSa/oHaTyLeL42MDqNhZd+74yznsVLUZPV3ygFJELG4dlNBbKFnjEjHiVw0Cz4pDYqMKo8vtrrqcBXpTjOr5ubl8d29URUsFhpDTjnomJhrztcIwrn7lloSqKL3nJMFQYdbU9kUS4xyV8bZXDA1NeqfoTBQuub7TpzFo66tQjLcha/WifFIVUMtulP9FgIGJjrxtSPjzHoVMaNtyQzmOtbZMaLaAS4lu7rUNF4IpmwzZVwXNPGUOfzuEwkVdUefTQ68247qldo/AMyrvUEGAMAAA==\"},\"shape\":[99],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1736\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1737\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1732\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1733\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1734\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1744\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1738\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1739\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1740\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DsUpCAQAAwNdgDWqDc5mgIC2KSdTQ0haioygoOIRDpJNNgZQYQjiEkRGEiWQNFhFJfp93cEEQBBuG3HTLsBGjbhtzx13j7pkwacq0+2bMmvPAvIceeeyJp55ZsGjJshWr1qzb8NymF17asm3HK6/teuOtPfveOfDeoQ+OfPTJsc+++OrEN6fOfHfuh58u/PLbH3/9c+m/K9ejT3x0SAEAAA==\"},\"shape\":[82],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WRa0iTcRjFs2Z326tYgprmpVyQl0JU6HYUzZKNZXSDjbBCswkSiDYpc5qYhU0w3/9laqWCZC67MVNQDFlhpBk6vJRCeYmsoLk2A1OsD819Oh9+5+F5znnSU0eS6rIoetuaijKGCYokryo85wgWoxK09m6C1l+LlsN5BOqHA1suuNNl3mVYJbk+RpAWlJMuGFxz0kLFUGYFxbXbofGZZynIm0v7Ik9RfC44EVESRxF79FNthzdFoHdVvSOAIrNHW5WywuXrCDlvGk12+Z0890uAV8QfAn1wlofDSjDrVTMv9BBM2R1Xw/sI1im/OoY7CSKaPmQXtxB8n4jx1c2JkOXn6mfHRLRr7obY1pNldfKtqn5h04SIkSHl0pEBV26nJmaX+t2Xuvpx3mPU+8/I2yjS//f3ulFM2ObB4BgsHPJPZihQPTk+HM9QrvFMlccyKAOLDo5pOS7Lx8XaJYa9boqS8HgD5k2OwcCd1SiXv3z8tMuAFKFFVx9jQJ3Grkn7zbHBcs4atcYAmS10xtfG8bFRq47u49CrevsVDzhmTKOnm7o5VluqU+884tDJswZHnnG0l/00G8v48l6myQjfnsjRWibbIY3kqNLc09/4xmA1G30mJRybJxcUaxs47OacVt0ZDj9b/8aEaYY4odJ913uGH+ZpbVKzK0+QW8PbK2EMuwVJj9WfYdTUOb5HzfCCRh9q9mGwmOYOiCsZ1PvDOpWL//6nCvap0VN0N75rKH5OsTBxTDx5k6Iyf0pamk8hE/JumS5S/AW8YhjzkAIAAA==\"},\"shape\":[82],\"dtype\":\"float64\",\"order\":\"little\"}],[\"bottom\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WPbUhTYRiGi81MTdRFBv1waCMlbFmIhl/cSiWWIiIi1WZa2NRIKik6aWaYdkybGex9z3uQ/AgktVwpSzOHGOsDSoQ50yIy8yN/LNLlTDCp/hzPr4uL54b7uSc+pP9NsRMEnjOWvOgjWItIurL0koDTD+aO1xP8qolL6dcRDIoKZeVngpkld9meYYJMxfD38CaCMsdJc4WGILg2cvF+D0H5HU1iQR7FwM7Tlo/JFP/PT5rjKVTLPzQqDUVbTu/mgTkCXYc90OBBcWkuSKVdJZi6lqW9eUDO3VC+qg9YJjCGnPV1L8iU+qV/Jca8qXDmtxN0jGVn55cS6Au6RsP0JiRZhmr67CZ8sd1tbFyVqVRXbkt2mnB80bfq+lsTvNLn3eNWeYfkPWX66qYpuVdys4c1ejmVru/1c12NKJygqCsKyEiNFqCc/mpviBPQSyMPd24XcFTd35ygZti9cZ9X7ycBZ7TnubpgEa/5gy1VJhFH/LsqWqNE+DhOLUR4ijBzWYYxJ0NL0VJR7m+GFVtMVlAfQ472W2xGMcOsRdXvU8jwjA/b5beXwXji/UjaQ4bn/E/bI55B4XB0uzMZ1C7SOZnA1vsfcBtq/0wK6Obzbl0Ykzne9tRKSti6S7nHvDg/WipgqytxZNN+ASJ3MW0oXEA7P5oSFSLvk1wXH2pNX6OYtmXHeq9QeLt6Gt6VU7Twh7asFlMYUod2hDKKe9yMXzVHEeZ/+balkMLa5ukxe4ziHwAaZj2QAgAA\"},\"shape\":[82],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1745\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1746\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1741\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1742\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1743\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1753\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1747\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1748\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1749\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WTeTTVaRjHyzqEinI14YpcI3WdpqSQ+eZaRt2kxSldIVlKe1RkikqK1hHv+3vR4pREaUGLqDAUWepKlAoRZiRNMZapmN+Z0zn99Tnv+2zv832ed6i1qXjuZIqNPqrVGUYUy+xFWWtMKMZ1eqgpmlPsm69t0z2VYutspecTplHcirLzXc+fP5XOcVrJ25Weu6SLeep+8/cwya9pmULhODZri5YFRUfxUGq/iMLW/HX61EkUCj/e3PnLeIrHQ30WEi2K+VxJbrwyRbuNxExdiY877/UkdQT/nvoFSwu+Ejjdf5hpPEiwqvlixdo+gnzX4tARPQQvwncsu/2ewE1pqyHpIKg9Gz7/1zcEvtM7V75rItjvoSJM4ClSXeG++yXBxkUnnlc3EAw9XVvl10hwfMW84j7eX2YsSAlvIXAdo2aTxnOHtW/qtbcEJ6UZFzraCSbL9yZHdBKopFbl//GBwCBdohDbS6DLbZEI+gmCWls3VQwQhLQbaos/E5gd16kIHiJIbrVudlal+I3TE2mNo9BQiMEkIUVv83nhS14HecEh2c/GFBVZN1IKJ3/XKXXXgwkXzCgGazWUKkXf78WjrKe48uyWy33X8f5S23dqI/k8L9of9E7Wo4i9ee/cR17Pl/qnMkRqFOo+Pu+yFSlCR8Z1XeH1urGlNPgE34+rReg4Ea9H9OFXTxOfEOzNbio3LSFI6rYo7coj2NDyy2y/awTtEZpF19MJhm95FoSdIhjbVjNQlUiwLyKg8U4cgWTV+g+yvQRe7Fan8U6CXr85S6esIzhjX26gIiOwFxg6Rc4nqCgetDw3j6CowTyoyJogoXpuwywxQZ5maZiviGBU6Lk9iUYEp3Q6FmbqE4R+9ksbo8fXO/1GcEiXoNIj4/gsAcEBza2qbTxzZ5Zt+nsCgXKUbdL5iQQtMmHdZ57d3ivDvQ0JjHyudL6YSlD8rV7MrqL0xQ4Eke77tXykvL1yKM55Od+H1nh7N18Cz8I7zdnBBPIfXBoiwwj2HPw6WH6AwFRbamVyjCDK6bh5HiN4H9ccaZLG70fbrpcl2QSNEwe33S0kGFO9d2BNDYF3soZzKL8/jXqinUf4Pa07HKGyaBTFs4MtEf783GPzDe5qTqeYVJ+ftcSRYvn4N6LPyynOBoxTCFtPcWl4UapKJMWRAYG6J6Goqf3ikJFJYYZ97q8KKAwrbJKdnlIk1qelXv+L4ob2R039YQof2Y77eQIOOa4PstWsOJxekCcJWcwBh/okbps5yLB2bmg8h2NH1f7VyOZgXVe6caqcQ8xS9cbzHRza/JYlKX/hkO1x689gbQarqGGx3RSGNL3pX6VgSLBaV3N0Cfv/P9X6M9gdnaGctIXhIXUvmrSHIfLx7vSOWAadNTE5egl8fPSl6PtnGXzFBWmjMxkCZ17senSd4UKP8uIFtxmiKt9sLCtiqBCklj4uY2ix9L/8upwh9plkxeoqBlvVA/3r5QzOJ9s7P/EUR5gotT1h+HjPVuJQzbBd0mcgLGW4HhnkWMPny1UIWliYxWA+4Pr7bL5us2Wcg/AYz6s6Fy0jGW4oKx5s2s6wwznN2GczQ2t2iq44gEE30Pi9tRdDweHDQxXuDEnBgdNMHRkqDboULW0Z4t8qSndNY/hUwqTFxgy9LszjmoBhwgaXRA91hrqMkKP9wxxyD7kVuPdwKE0y9TrXxevsn+NS2cJhRpy+p289hxNBdjcflXFICTEb7XeHg7NQpaooncO2yjNeYyiHS8rJTW0xHAKweGZmGIfqjJro5GB+TjrLnh3x4iC/LOth7hy874w0NHLkYMdeScOtOUSvvhqYY8HBD3GJGkIOntY/XQrR4SC1cDf4qsjBaGf8P179FP8BIUxvteAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1754\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1755\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1750\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1751\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1752\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1762\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1756\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1757\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1758\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/22UezDWWRjHlRW5RO+WimWyiFKbSpKKL6V37Vtuu5sxsSTdiKalmWS0NpdRK7dyzu9XrouK5FpY127oQoQkm1ci5RLlkjt7dqaZ9o/96zNnznOe5/t9znNOlc3Lj9+BosHrzDHBFooqD2F1lhFFsFFmpL0BRUdS1eYBfQqtT7TVWo/CyWyfTaU2xRaj7IPx6hS5JeI/h1Uo7jQWRtsspShvCVrevJiiotu+zfJrinsDmp5PlSjqpWcc1yygcIw3nrSX/cLf7u4pl2B0+rzOGPC9eWE+RfqIhbmqNIVJRGngNSmKdijeippD8db6tbfkLEHwoEvXqWmCNGX/dE3G1l1X6xKnCOR9ZjZlzBA81J7QaGDxfZbKXX6M03u1vrf5H9pnx6f0z6VY65+l0cjqzOAvz1oZisDPugZ02/y95ShO5wVKRMhTRJdXNP7NfCwz279CgfnaF1i7/PlCCvHkATN15ld25VnDHAHF0RDZ+5sXUcDh7ZMrjF4BJoa5yhSJJQY9+Syu9XP8/M/xq3enTjgwjnwjdHVjeW+0tBy6xOrYhbjITcl/0aPukVQ+y3Qqea1P12L61cKadWSYb6kQ13bzUYI50RNTtoMEW5+PtmOAoMh9/KVMN0GyWyDZ3knQcMWiuVZM0F0zGBL3gmBmOGGjRyMBH9ez0b2O4PGLV91eNQSnwj3Lih4TRGdZtUk8ZPtlGvG/VhL4ZqWsuHeHoE2jQsKijGDHxTctlUUEouRC3qiQILL3g8a5AnYv8vXmdTcJOmxrdcpzCKpFDu3jGQTrynyL/dIIbN/tU8i4QmA/alCtlkKwe3hctziJQL8tWzMogSDpJ/mkw/EE4gvbxmrjCNy1MmW8Ywkqz1flyPIEQtVpdVEMgfNWsWlUNMGU2DFXJorp0I/12BFJUJo6+k43gvmsVxEXhxPM7V97/BSjjemxVfnnCcJPJ/6uxuhq6x92jtHRPL1mKTtXlqC3N4nlueynSMcYA1wmJI1Z/iXDqQWmFwiOmC7rGLr4hfYh2nK3CIGVQ0yFL2Pj+4iGJUznrrx6w1Dmx0BP6XoN85no9lGl4DrBxdS1yj65rI+L3IrsWN/OZhf/eJ/1s/UJ51j1iEDv6qvqqibGj4bawnYCT+NU54O9BFHaxSon2P0W86+Lm9i81hWmbi9l82HqJHhm+S17j4KxsAOGFIL9pSdeW1I4921Na3Ki2Baywa3Vh0LaSjF2zVmKnSJcHYijWJWp6yjIZnM/ovvo7W2Knrw5isI6iheuwoyJdvYPPA01KRykCFIY3JM2l0NW4eyDBwIOKTdaZk5rcIjkMyVF+hxWD9sqGoOD96hEa541h6/mCSUELhyGho/mhHtyuCu1vmaBHwf/oKEtmqEcFJZNbkokHAr+OLmhN5mDwSKTvarZHPR+TtwtVcLqJEtqaVVx0M9S2h5bz8E5rdNO1Mrh6WGim9XF4Yh1vtfRfg45nWTy/ScOOjqRD/hZDhuQ6H5Pmoea0Xi5pRKP/PgFtvFLeYx4uk0Ea/KYrraXOKPHo+PcyWZen7G1z912E4/R4ArloG08Eu6IFm8255GdtspDvJOHnFrwRh1LHsppXbqZjOIBH7nuH3hUx7nGqzP6zPNfLvMfRnd+CHAQ8fCrXnNJxNbvTRY+eybkMV9FMdrSgsdNC7cezoxHjM6tklojHrN1x1uM1v97PrJXdzWP592XI6y0eQQI/HbcVmN1u4Vhhxbz0Bq7FvpSluWJM1jnO8NhvEajJnaQQ1PG1OTIGw4aRrJ9MU0cYofi0mwfcgjgVtr1sz4+FqvK/5LH4R+fxKBb4AUAAA==\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1763\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1764\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1759\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1760\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1761\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1696\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1709\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1710\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1711\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1712\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1718\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1717\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1719\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1704\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1705\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1706\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1707\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1699\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1700\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1701\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_overrides\":{\"type\":\"map\",\"entries\":[[0,\"2025-01-02\"],[1,\"2025-01-03\"],[2,\"2025-01-06\"],[3,\"2025-01-07\"],[4,\"2025-01-08\"],[5,\"2025-01-09\"],[6,\"2025-01-10\"],[7,\"2025-01-13\"],[8,\"2025-01-14\"],[9,\"2025-01-15\"],[10,\"2025-01-16\"],[11,\"2025-01-17\"],[12,\"2025-01-20\"],[13,\"2025-01-21\"],[14,\"2025-01-22\"],[15,\"2025-01-23\"],[16,\"2025-01-24\"],[17,\"2025-01-27\"],[18,\"2025-02-05\"],[19,\"2025-02-06\"],[20,\"2025-02-07\"],[21,\"2025-02-10\"],[22,\"2025-02-11\"],[23,\"2025-02-12\"],[24,\"2025-02-13\"],[25,\"2025-02-14\"],[26,\"2025-02-17\"],[27,\"2025-02-18\"],[28,\"2025-02-19\"],[29,\"2025-02-20\"],[30,\"2025-02-21\"],[31,\"2025-02-24\"],[32,\"2025-02-25\"],[33,\"2025-02-26\"],[34,\"2025-02-27\"],[35,\"2025-02-28\"],[36,\"2025-03-03\"],[37,\"2025-03-04\"],[38,\"2025-03-05\"],[39,\"2025-03-06\"],[40,\"2025-03-07\"],[41,\"2025-03-10\"],[42,\"2025-03-11\"],[43,\"2025-03-12\"],[44,\"2025-03-13\"],[45,\"2025-03-14\"],[46,\"2025-03-17\"],[47,\"2025-03-18\"],[48,\"2025-03-19\"],[49,\"2025-03-20\"],[50,\"2025-03-21\"],[51,\"2025-03-24\"],[52,\"2025-03-25\"],[53,\"2025-03-26\"],[54,\"2025-03-27\"],[55,\"2025-03-28\"],[56,\"2025-03-31\"],[57,\"2025-04-01\"],[58,\"2025-04-02\"],[59,\"2025-04-03\"],[60,\"2025-04-07\"],[61,\"2025-04-08\"],[62,\"2025-04-09\"],[63,\"2025-04-10\"],[64,\"2025-04-11\"],[65,\"2025-04-14\"],[66,\"2025-04-15\"],[67,\"2025-04-16\"],[68,\"2025-04-17\"],[69,\"2025-04-18\"],[70,\"2025-04-21\"],[71,\"2025-04-22\"],[72,\"2025-04-23\"],[73,\"2025-04-24\"],[74,\"2025-04-25\"],[75,\"2025-04-28\"],[76,\"2025-04-29\"],[77,\"2025-04-30\"],[78,\"2025-05-06\"],[79,\"2025-05-07\"],[80,\"2025-05-08\"],[81,\"2025-05-09\"],[82,\"2025-05-12\"],[83,\"2025-05-13\"],[84,\"2025-05-14\"],[85,\"2025-05-15\"],[86,\"2025-05-16\"],[87,\"2025-05-19\"],[88,\"2025-05-20\"],[89,\"2025-05-21\"],[90,\"2025-05-22\"],[91,\"2025-05-23\"],[92,\"2025-05-26\"],[93,\"2025-05-27\"],[94,\"2025-05-28\"],[95,\"2025-05-29\"],[96,\"2025-05-30\"],[97,\"2025-06-03\"],[98,\"2025-06-04\"],[99,\"2025-06-05\"],[100,\"2025-06-06\"],[101,\"2025-06-09\"],[102,\"2025-06-10\"],[103,\"2025-06-11\"],[104,\"2025-06-12\"],[105,\"2025-06-13\"],[106,\"2025-06-16\"],[107,\"2025-06-17\"],[108,\"2025-06-18\"],[109,\"2025-06-19\"],[110,\"2025-06-20\"],[111,\"2025-06-23\"],[112,\"2025-06-24\"],[113,\"2025-06-25\"],[114,\"2025-06-26\"],[115,\"2025-06-27\"],[116,\"2025-06-30\"],[117,\"2025-07-01\"],[118,\"2025-07-02\"],[119,\"2025-07-03\"],[120,\"2025-07-04\"],[121,\"2025-07-07\"],[122,\"2025-07-08\"],[123,\"2025-07-09\"],[124,\"2025-07-10\"],[125,\"2025-07-11\"],[126,\"2025-07-14\"],[127,\"2025-07-15\"],[128,\"2025-07-16\"],[129,\"2025-07-17\"],[130,\"2025-07-18\"],[131,\"2025-07-21\"],[132,\"2025-07-22\"],[133,\"2025-07-23\"],[134,\"2025-07-24\"],[135,\"2025-07-25\"],[136,\"2025-07-28\"],[137,\"2025-07-29\"],[138,\"2025-07-30\"],[139,\"2025-07-31\"],[140,\"2025-08-01\"],[141,\"2025-08-04\"],[142,\"2025-08-05\"],[143,\"2025-08-06\"],[144,\"2025-08-07\"],[145,\"2025-08-08\"],[146,\"2025-08-11\"],[147,\"2025-08-12\"],[148,\"2025-08-13\"],[149,\"2025-08-14\"],[150,\"2025-08-15\"],[151,\"2025-08-18\"],[152,\"2025-08-19\"],[153,\"2025-08-20\"],[154,\"2025-08-21\"],[155,\"2025-08-22\"],[156,\"2025-08-25\"],[157,\"2025-08-26\"],[158,\"2025-08-27\"],[159,\"2025-08-28\"],[160,\"2025-08-29\"],[161,\"2025-09-01\"],[162,\"2025-09-02\"],[163,\"2025-09-03\"],[164,\"2025-09-04\"],[165,\"2025-09-05\"],[166,\"2025-09-08\"],[167,\"2025-09-09\"],[168,\"2025-09-10\"],[169,\"2025-09-11\"],[170,\"2025-09-12\"],[171,\"2025-09-15\"],[172,\"2025-09-16\"],[173,\"2025-09-17\"],[174,\"2025-09-18\"],[175,\"2025-09-19\"],[176,\"2025-09-22\"],[177,\"2025-09-23\"],[178,\"2025-09-24\"],[179,\"2025-09-25\"],[180,\"2025-09-26\"],[181,\"2025-09-29\"],[182,\"2025-09-30\"],[183,\"2025-10-09\"],[184,\"2025-10-10\"],[185,\"2025-10-13\"],[186,\"2025-10-14\"],[187,\"2025-10-15\"]]},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1702\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1703\",\"attributes\":{\"axis\":{\"id\":\"p1699\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1708\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1704\"}}}],\"min_border\":0}},{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1765\",\"attributes\":{\"width\":1200,\"height\":200,\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1766\",\"attributes\":{\"bounds\":[-1,188]}},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1767\",\"attributes\":{\"bounds\":[-31.177939072646268,52.459862763673755]}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1774\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1775\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1772\",\"attributes\":{\"text_color\":\"#5B5B5B\",\"text_font\":\"Helvetica\",\"text_font_size\":\"1.15em\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1803\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1797\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1798\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1799\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/xVUezTVWRTeXUrybFyuxuPevJnLvdfbzWN7Lg1JWEtTxKhUmNKgYpj1I6XCqJhpLCQtlsfENDV5xj1ReYQhj2ooadLksVJXyshjTn996zu/s39n7/3tb8OrOta4SBUB3Id5nAIJrLw3n5KTIXBZfeXvIxsIbJx/FspXJdC9WH0uVYPAXC/7vphLmJtbvG06DQijE5YR7UnRKjosK3AzAV5Jd8utTQQE6hrZ7zkE0p44116gWFXSXzPyJYF/WptjG/QJ4/WFv+l7PfofdeW+QhonnxcS8px+116MWS3XJPBM8S3K0bitx50559gEwi89n+bRPAY/5l9TonnJTgefZq0lcH65+1XlnAR4jvoP/B67gG24esQRWo/MjIPSKW1kxB4q0548hKjJtexwijvql7lxXITkcdfGRi2EsJLdPgI1hFap9liSEkKeR0qEkwqC6v1npvLrEXSrelzSAWHpmLsoaN4F/Ly2nY6RQXgpLiyfWofg3X7Iu0wRge39KWi7PIKeQ6Axn8YZSlv+VNNAKHUVjpbRPCLtE2Mj9BHmA74L79JEqBGnBBsoIGQ5igcO/+cCsFO3radRAqVXi8OU1hCok9tz1IjWa39mwWqbGoHIc9f8TtJ+NPBWR9tpfz1TIlM7tAk8NTdrc6b9C/9NKXZYj4DvXLp70mbCRAaylgZ5BPb6kEAHC4LDOXVNSZYELE3Gi8asCd5wjco2tyEkQGB43ZCiK4s15E/PM/WjcnhWBDjmL6dCRIRp3iEOEVgQpiprl1eZMWHSNEJPzxoSMB+LkD6mOj5ybeQX03fZ7SzVOfreXOWlgnouAeEhpVzQJVBYmBOtqUOgf3qiWJaerz9zXu4Pyi+W+S1p0jrURC03FGl9irUeZl+vIxDyQ1tmiVQCJ15kZ09+dIGaZMGpd1QfebvhRDNthAerhzwrqY6zdk6hKnpUz3fN1Q76yIh012hKDBFG7l1c6jBBRicwz6iIotRMi2VujBB4cczDzRiZs2dNk3sob57QSHM2Qib+zgnWtBHCVn6sSzaf6m/fwP1eiHDwhcWrewJkDDlmsioCqlPSUL6tBcK3PV7TXgJEyZCFvTW9J03ozUyzRAzmmOy9Y0njB+LMWTaIFT+W71uwQYj0zUiMskU4u15XI4dyK2ArG9ki86/3ZLrYDuHD62DrK3ZIXC+cSlqxRxSmpgVdcEKoyBjOU3BGKIlZNtnviIzNkFq0nxMS20yd/JtOyCRP1B976ITP+y7P1HARiVrnx8m7rniFLV1MN3NDxv/3Nd7gjuif0DEq9kSyk+/1YMEDeRW2fcb9HsgcntY4OOWG5Cdr5a4qROaJ1CFrxBFJXMauXF8xkiZ7Kc7YIl5qS/GpoHWtDsqLPGg/dmeE/qVP+zWUoO0Fugh2fNXiNxwEYU1ujSad58iXLQZSOv+k9PjT+QYJdNw6WZ6/IgGDRM2wWTk6z+y7Bl1LEoBK6dqlWQmo7pnxquqXwJWm+KJN4xKwF6hP1C1LYPBXh54bdA/pfdgQEKREwKpbrrWW7oHeY3kR23UJw23e33GU7o++DW8cZOk8uuVVqgQZEYgX2QVqfOZcrZgRisYv7nN86V5p4SnFKW8kEFrQNVpIfeQQFbFgoEXg0UGF2Ao6p5x9cpMydI/N88KT1Q0JsxKWYN1qRuBAe/z+hs/+GWi41yUkjMX22pZOEfXVpyO/lIkIKhh381nUJ2+67dwqqE/quJ6bCywI1IYtVl8VEKZct3RRnsY9vJ1a9IRyFenlOKElYWqaBBs1rQjD2iS3a4s1YVZ97nxDfYfCgddBlZaEKN4Obqum93Y8knfeQ/l1X/2fTSnmHlitk6doU7n4Wiok8PYr25MyAgJnAjvJOnO6f1MXA/jUp9Uy9e29PPI/ZRs6POAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1804\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1805\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1800\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1801\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1802\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"orange\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1812\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1806\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1807\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1808\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3IezwTCBwAcK3YYs0sY4xZzDw3Nmnltd+8OuUqlRBND3pgHaVk5fW5CKHoDuEoeZTKUR+luuxXaSFJUq2SHkpJ5VEpRNef3+/Z9BNhIVIjCFByEvac0YPnrMa8jS5UEO7xZ1XWzYIVvtL6NdZfxJ0tUcfbv15VxLRfZCzfO6FY/5JWU7dQC7lHeXK3nzRM/fruQCdbD0WC2I0OKj0MbZswoenoY/+V7Kx2a31kpUqLlG/18Y10863CmUx8Pz8oK0BgjFe0VvQIN7PQTqv5ene9MSokjkuf/WuE7TxeFCeHiZpqLvmfuIa43XuZ6rI5A0cdKoaCPtAxxyOl5cqJuVjZB80v66no3PjBvMJQE6UtvJt+pT8UaomijgcLYhUlBXwn3/FxMdmmqGFDAhGie3JvWIRqg9J1vqUjgwalcXXhGitosLRKJWMe1QGXCbXpLgcdaGtdzF9vTYUaegt5js0cSLcO/XYybjbIprnlzu4kaMprlu2fIsL0Ben93kEShOej5MZPEvidU/VGPyCBJEJSWH6ODMmJa+fKHHVALfgm2S+VDkXee9Mu2+rBK5+GXFGsLryj6N77s1wHngT8t28NmQy1gaeoQuJMqOP/cTc4bUSs5jmHQmi6oNgymf7o4OhnRcjeZ/6HlxAwod6HGGuuieFlP7x9gnVwv/hkRVEkHTvfv23MZzOwqr56wzOSIfasTf192y42TokqLqsf4qCgWun/7LYlUu6sLB9YZotN0vR1M5h2WNU+M0iaYo/SrOiQYqIAEymbPE8zBHiwNNOFdu7XX1KKbWLssPDl7DPRmTycGzBDxCmywUOuFFZQhxVWFR9lvCZZYmStqjx0MxeHTs2KyBnkYFaBcp9PpRmaUTonEu6Z4oAq+SpDwxQPlMeVKT+yUUXMP7jhDQu9u82oJqOGuNDZJ3p8nx7ydpvGJ9+mIl2nq3b6NQHZ760S3W73KibozWMtSV/EgsnFvI5KDdBt7LO+raACtdoyg2agBzupDynVBUwISWp/sWHQBCrzs/MstswDVkaO80SeKQgzsu+dLTWDnCPq8VrmHBjl2pyZfZ4D13nfo3S9uOCo3N09EGYJ33yz+ht6rSD+tMQi9J018Cv79UpzbSAwrHaVfLktKEvkpl7zeNAV10x0aeDDX7FpMTdJ9kCt3ajaSRTA+fjijuhZQri+KxAr3wiB8KI2akjmAFuvBl6zHHeAY3n+rd1l86GfvDMpZZEjeL32MkyecITeoMFJapIIzpVo5kg7FkJwhF8FO20RtIaqz2td7AT8kQ+XRsecQPXYbxVkOIOs2HB7vNwFYi6Gfxrpc4UtM5IybvDEQI0b6jzkBZBcHk2I8pBA9vrWnqUz3KF3O63aM9cdhA9cMxkn3IF5i6Tl4uYOD1O6JCNyCaiCjDgL/gHoX9Y1s81aDN/Hti5fUuMCcq8B7hxtJ/j0Wde9TFsEwti+5QOjDtAQOujQYyGAdCYl9u4dW2Azp36uXWIJRceKnviGmcHhFfwCYZIxkIcZhxfOp4NcrigzI2sD37/GwciVCIHGi+yduQTASHqw4+pJsVq+e4by4ZC4vUTb4HrUfXFzap09c9NzRTCV5+H0eEzRZP50KMZDHcNFL2r4zdoYsiD3xJgRHROe03nhXQbYJg+UVeobI0vrcAGHwMY237PJO56zkDS1bgHZyAidqKIDdx2ZOFlf7RsjZGKrSbG4oo+Jx00rCIv9WPjF7TddQiAbdxf2rxXLTPHmNe8jL15x8OIwFwkyCxwv0/JhPrVCvqRbbWWTDaoiLzWm/bTF9R/WqMev5uHmvW967/zNw9SPUwm3pnlYWqQJEdv4KCRPGlDO8zHnlNW8+w/s0OTOXb2D2fbY/sjz7FsfAQ7T5iZOVwtQzVeDt/upALN3fCtOVRfiSGQAw1NfiCne/m8/GgrRImO0cd8v02j6yu89AtxV1We2OkyAzTSV/XCnPd7P3Hl+XaYdWn23SiEX2uL/R9jKtuAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1813\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1814\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1809\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1810\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1811\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"red\",\"line_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1821\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1815\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1816\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1817\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DaTaCAQAAwO8KQojwU086BSmlRciSNVsiu2TrItQtRF3OzHszFARByGFHHDXsmONOGHHSKaNOO+Osc8acN+6CCRddMumyKdOumDHrqjnzFiy6Zsl1N9y07Jbb7rhrxT33PfDQI4+teuKpZ557Yc1L6155bcMbb73z3gcfffLZpi+2fPXNdz/8tO2X33bs+mPPX//sO/AfSxxzGnABAAA=\"},\"shape\":[92],\"dtype\":\"int32\",\"order\":\"little\"}],[\"bottom\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wHgAh/9eBGAMcOL5j/8lux4dx/wPzA/gfCNG/I/KNwSX11z9j/czG3vnQkAQOSTUEUHywFAHIMXOfFEAkBK/wIi0I4HQDs8VIp9JA1AGKirhvaWF0DgkF/vGoocQBnP/A+DDRpAer4FMXcBFUCQxd43GIcPQHR8WjMKRQNAQOwcvp7oyz8QiESzTMvdP8Bm32Fu5KM/fr9Fy43p/j8AS8453uAGQAByq+WPPxFAMHO9Ni/t5D+w/Bv2Qab5P3g76JSTLw9AYHzNO6lrDkBMqIhQxwQPQDyYMY+xvAxAmB5KV1BXDECs0w5cRygKQLxHQI0TrQdAMCbh005kBEAYLdE+cHn6P0in5qmnbPk/HGaT4CGFAUCw6cmaXbEHQIyckdsTmg9AOGRqf5bUEUAtFJvc48UWQIq25YYEZB1AoqcZvi0XHkCCkE6WmDIcQGjgy2PTyxhA7On+UJCzFUDwuxN5HWUVQI2ltRZS+hVApLvZR+tOEUBsb3UiahcHQIgnD5AqvQJAOAHwXzm7AECQSwHvtMvwP3BssmTGv/E/+GzQDKwgCUCWw/Q7q/4QQCRsWCHBnAdAHOhVC5SaAECQNp/03Sf1P0Dl95iHu/c/0A2H2Vk5+j+4sJ1Ubj8JQGAVh7TtxAVAgC+H28zVD0BodBnHnp8PQPCBnzeeJgxA8EfNijUJAUDArDuVKmcBQACnmv+A1QRA0Eivw5Y1A0DY61pa0x8IQIhZVxoOSRhAOC30Idn0FEAotdnIQvgGQLitfpYPNQhAkCzyHDPlBUBAFZ0ss0kCQJgyGFkjJw5APMCxBIiXFkBkn5SxGZ0UQIDL/oXB1RVAAG4lMIa7H0CYwRdL+7sXQBDKIUkZ/xFAgFNmK+PT4T8olyznak3yPxB+elIyGwZA0Jnd5JXH7D8A9vF61PGKPwDO6hVzias/QIq7bflB7T9Q59qMKCn+PyB2cmF+bAJAptXkcRW8EEBSlUySiZIXQEC7KcfgAgAA\"},\"shape\":[92],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1822\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1823\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1818\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"value\",\"value\":0},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1819\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"value\",\"value\":0},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1820\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"bottom\":{\"type\":\"field\",\"field\":\"bottom\"},\"top\":{\"type\":\"value\",\"value\":0},\"line_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"lightgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1830\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1824\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1825\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1826\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3D5zaCAQAA0E+RJOMVlHFOf5JNw3qxyA5JVvqDEMqM93PvOTcIgqDHkGF77TNiv1EHjDlo3CGHHXHUMRMmHXfCSadMmXbajDPOOue8Cy665LIrZs2Zt+Cqa6674aZFt9y25I677rnvgYceWfbYE0+teGbVc2teeOmV195Y99aGd977YNNHn3y25Yuvvtm247sffvrltz92/fXPf01pGICAAQAA\"},\"shape\":[96],\"dtype\":\"int32\",\"order\":\"little\"}],[\"top\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wEAA//8WkXXw/ZYCMBXCfudj8cWwN+dsqlXwBnAGYs1DkCQF8AUpEyL8zYVwN0YdXuzCRbA5P+gTvKbGMBQ9m07EvYbwNqhkJSYixXA9uLabZAMCcBIdmdRW+zmvyCUTMNeb8y/gIbxkmy6ub8QJxm6QZ/nvzbOPmiR3gjALLCWJ/ZtAcAUbW3/tE3zv1gq+vpe3ea/wAPr9RtS2b8oB5P7LJfwv1TvO36aTfm/EFlHqyCb/b+0wYJT1Vbjv+DrmhjNLcG/IAryczEptb+Iy19ML4j7v9DXCQWejQbA2hevlcTiDMBX/iXYSAoSwKyC41EIiBTA8AJQ8DvyEsAmJ6i2q4YSwFL7MdSUohDAg9iwxY5rD8CbGl8NPSIRwHyArnZFQRDAYFr9oeCnBcBobfyLaoT+v0gQjOXUhxvAg3R7tHFmIMDPvIlsXvMgwOQuYWRiGBzAhI2s2b1gFsDQqPNHtXsOwBD3l22gxwDAgCCC8ucP0b+whUPNHzcJwLCoyCZZaRjAwP/EtmO3G8BMJjMjEn0gwHC/SqP9AyTA9Iv9Q+nZJMBcjKImb/snwOT9i5Gv5SjA6qPA32hYJsCIjyLPowcmwKABRNDRDSLAGuqJlTiYI8BI4Q08zpIiwAbBKg70lSDAPcvkAJu4FsAulVSwHTwPwFjfxA2EWwTA4J25CoLwAcCAQegspNEGwJrHunxlIAbASBHgpO5nCcDS3QHu5gAOwCE7iZyprRPATiMKdnkBFcCkaoQ4fesUwIOkEia61RLAbNoUAgIqCsCI2zwOHmUHwLi5bV5eJua/vhZIGBZtA8Aw2mIv6fUCwBTM8jTqqRDAdkoBwwmtE8CSdwFnEVEUwA56JUfEcBPASBOKfGszDsCgqlJ+SxMEwAAiYCeTPOW/oMGjYzZV4L+whxzGZz7qvyBGK4OwqOq/4GQcfPZo4r/I1elyUCwCwAgLX8cwVATAoFWhzpKLB8AAyY4ztIX3vwCInHnXu+m/YEaTeLcH5b/AY/lffL7RvwB+1O53Tq2/1CqLdQADAAA=\"},\"shape\":[96],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1831\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1832\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1827\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1828\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1829\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"width\":{\"type\":\"value\",\"value\":0.6},\"top\":{\"type\":\"field\",\"field\":\"top\"},\"line_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"darkgray\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1773\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1786\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1787\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1788\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1789\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1795\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1794\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1796\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1781\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1782\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1783\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1784\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1776\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1777\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1778\"},\"axis_label_standoff\":10,\"axis_label_text_color\":\"#5B5B5B\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_size\":\"1.25em\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1779\"},\"major_label_text_color\":\"#5B5B5B\",\"major_label_text_font\":\"Helvetica\",\"major_label_text_font_size\":\"1.025em\",\"axis_line_color\":\"#5B5B5B\",\"axis_line_alpha\":0,\"major_tick_line_color\":\"#5B5B5B\",\"major_tick_line_alpha\":0,\"minor_tick_line_color\":\"#5B5B5B\",\"minor_tick_line_alpha\":0}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1780\",\"attributes\":{\"axis\":{\"id\":\"p1776\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1785\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1781\"}}}]}}]}}]}};\n const render_items = [{\"docid\":\"d9bd6441-530e-4d45-bd06-ca2a5f61c54b\",\"roots\":{\"p1833\":\"ddd0f440-b85b-45ef-80b5-c268ec463920\"},\"root_ids\":[\"p1833\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);", "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { - "id": "p1449" + "id": "p1833" } }, "output_type": "display_data", @@ -1181,7 +1134,7 @@ } } ], - "execution_count": 9 + "execution_count": 18 } ], "metadata": { diff --git a/pyproject.toml b/pyproject.toml index 812895d..9049893 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,6 +4,7 @@ version = "0.1.0" description = "Stock analysis" requires-python = ">=3.14" dependencies = [ + "akshare>=1.18.20", "backtesting~=0.6.5", "duckdb>=1.4.4", "jupyter~=1.1.1", @@ -18,4 +19,5 @@ dependencies = [ "ta-lib>=0.6.8", "tabulate>=0.9.0", "tqdm>=4.67.1", + "tushare>=1.4.24", ] diff --git a/sql/initial.sql b/sql/initial.sql new file mode 100644 index 0000000..8170d8e --- /dev/null +++ b/sql/initial.sql @@ -0,0 +1,92 @@ +CREATE TABLE stock +( + code varchar primary key, + fullname varchar, + industry varchar, + listed_date date, + market varchar, + name varchar +); + + +CREATE TABLE daily +( + code varchar not null, + trade_date date not null, + open double not null, + close double not null, + high double not null, + low double not null, + previous_close double not null, + turnover double not null, + volume integer not null, + price_change_amount double not null, + factor double not null, + primary key (code, trade_date) +); + +CREATE TABLE finance_indicator +( + code varchar, + year integer, + accounts_payable double, + accounts_payable_to_total_assets_ratio double, + accounts_receivable double, + accounts_receivable_to_total_assets_ratio double, + accounts_receivable_turnover double, + capital_surplus double, + cash_and_cash_equivalents double, + cash_and_cash_equivalents_to_total_assets_ratio double, + cash_flow_adequacy_ratio double, + cash_flow_from_financing_activities double, + cash_flow_from_investing_activities double, + cash_flow_from_operating_activities double, + cash_flow_ratio double, + cash_reinvestment_ratio double, + current_assets double, + current_assets_to_total_assets_ratio double, + current_liabilities double, + current_liabilities_to_total_assets_ratio double, + current_liabilities_to_total_liabilities_ratio double, + current_ratio double, + days_accounts_receivable_turnover double, + days_fixed_assets_turnover double, + days_inventory_turnover double, + days_total_assets_turnover double, + earnings_per_share double, + fixed_assets double, + fixed_assets_to_total_assets_ratio double, + fixed_assets_turnover double, + goodwill double, + goodwill_to_total_assets_ratio double, + inventory double, + inventory_to_total_assets_ratio double, + inventory_turnover double, + liabilities_to_total_assets_ratio double, + long_term_funds_to_fixed_assets_ratio double, + long_term_liabilities double, + long_term_liabilities_to_total_assets_ratio double, + long_term_liabilities_to_total_liabilities_ratio double, + net_cash_flow_from_operating_activities double, + net_profit double, + net_profit_margin double, + operating_cost double, + operating_expenses double, + operating_gross_profit_margin double, + operating_profit double, + operating_profit_margin double, + operating_revenue double, + operating_safety_margin_ratio double, + quick_ratio double, + return_on_assets double, + return_on_equity double, + shareholders_equity double, + shareholders_equity_to_total_assets_ratio double, + surplus_reserve double, + total_assets double, + total_assets_turnover double, + total_liabilities double, + total_share_capital double, + undistributed_profit double, + primary key (code, year) +) \ No newline at end of file diff --git a/uv.lock b/uv.lock index bdaa119..691390e 100644 --- a/uv.lock +++ b/uv.lock @@ -2,6 +2,42 @@ version = 1 revision = 3 requires-python = ">=3.14" +[[package]] +name = "akracer" +version = "0.0.14" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/c6/f38feed5b961d73e1b4cb049fdb45338356e0f5b828b230c00d0e51f3137/akracer-0.0.14.tar.gz", hash = "sha256:e084c14bf6d9a02d5da375e3af1cba3d46f103aa1cf3a2010593b3e95bf1c29a", size = 10047643, upload-time = "2025-09-10T13:47:34.811Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/cb/1041355b14cd4b76ac082e8c676858f6eddb78f0ba37c59284adf36e5103/akracer-0.0.14-py3-none-any.whl", hash = "sha256:629eaccd0e1d18366804b797eb2692ed47bed0028f55b5a5af3cc277d521df04", size = 10076442, upload-time = "2025-09-10T13:47:29.061Z" }, +] + +[[package]] +name = "akshare" +version = "1.18.20" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "akracer", marker = "sys_platform == 'linux'" }, + { name = "beautifulsoup4" }, + { name = "curl-cffi" }, + { name = "decorator" }, + { name = "html5lib" }, + { name = "jsonpath" }, + { name = "lxml" }, + { name = "mini-racer", marker = "sys_platform != 'linux'" }, + { name = "openpyxl" }, + { name = "pandas" }, + { name = "py-mini-racer", marker = "sys_platform == 'linux'" }, + { name = "requests" }, + { name = "tabulate" }, + { name = "tqdm" }, + { name = "urllib3" }, + { name = "xlrd" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/e0/48c0d7fc2527787b3179960454037dbe5b8d3409aa00eab23748a34317be/akshare-1.18.20.tar.gz", hash = "sha256:f3797d454fd2bc9e75f85e24abdd2af2c29989d4f89379b3385998bbf1464d16", size = 855384, upload-time = "2026-01-27T14:35:25.261Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/b4/2743787e5366eb281b966f8c3fcc85d6e3a8456cefbac27d30ca7baafedd/akshare-1.18.20-py3-none-any.whl", hash = "sha256:9ba6cb3a17ee4cf957cf81e01cec59d55962a3fd867ab669d151a213bb5a9fc3", size = 1074968, upload-time = "2026-01-27T14:35:23.937Z" }, +] + [[package]] name = "anyio" version = "4.12.1" @@ -180,6 +216,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f6/a8/877f306720bc114c612579c5af36bcb359026b83d051226945499b306b1a/bokeh-3.8.2-py3-none-any.whl", hash = "sha256:5e2c0d84f75acb25d60efb9e4d2f434a791c4639b47d685534194c4e07bd0111", size = 7207131, upload-time = "2026-01-06T00:20:04.917Z" }, ] +[[package]] +name = "bs4" +version = "0.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "beautifulsoup4" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/aa/4acaf814ff901145da37332e05bb510452ebed97bc9602695059dd46ef39/bs4-0.0.2.tar.gz", hash = "sha256:a48685c58f50fe127722417bae83fe6badf500d54b55f7e39ffe43b798653925", size = 698, upload-time = "2024-01-17T18:15:47.371Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/bb/bf7aab772a159614954d84aa832c129624ba6c32faa559dfb200a534e50b/bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc", size = 1189, upload-time = "2024-01-17T18:15:48.613Z" }, +] + [[package]] name = "build" version = "1.4.0" @@ -312,6 +360,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, ] +[[package]] +name = "curl-cffi" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/c9/0067d9a25ed4592b022d4558157fcdb6e123516083700786d38091688767/curl_cffi-0.14.0.tar.gz", hash = "sha256:5ffbc82e59f05008ec08ea432f0e535418823cda44178ee518906a54f27a5f0f", size = 162633, upload-time = "2025-12-16T03:25:07.931Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/aa/f0/0f21e9688eaac85e705537b3a87a5588d0cefb2f09d83e83e0e8be93aa99/curl_cffi-0.14.0-cp39-abi3-macosx_14_0_arm64.whl", hash = "sha256:e35e89c6a69872f9749d6d5fda642ed4fc159619329e99d577d0104c9aad5893", size = 3087277, upload-time = "2025-12-16T03:24:49.607Z" }, + { url = "https://files.pythonhosted.org/packages/ba/a3/0419bd48fce5b145cb6a2344c6ac17efa588f5b0061f212c88e0723da026/curl_cffi-0.14.0-cp39-abi3-macosx_15_0_x86_64.whl", hash = "sha256:5945478cd28ad7dfb5c54473bcfb6743ee1d66554d57951fdf8fc0e7d8cf4e45", size = 5804650, upload-time = "2025-12-16T03:24:51.518Z" }, + { url = "https://files.pythonhosted.org/packages/e2/07/a238dd062b7841b8caa2fa8a359eb997147ff3161288f0dd46654d898b4d/curl_cffi-0.14.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c42e8fa3c667db9ccd2e696ee47adcd3cd5b0838d7282f3fc45f6c0ef3cfdfa7", size = 8231918, upload-time = "2025-12-16T03:24:52.862Z" }, + { url = "https://files.pythonhosted.org/packages/7c/d2/ce907c9b37b5caf76ac08db40cc4ce3d9f94c5500db68a195af3513eacbc/curl_cffi-0.14.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:060fe2c99c41d3cb7f894de318ddf4b0301b08dca70453d769bd4e74b36b8483", size = 8654624, upload-time = "2025-12-16T03:24:54.579Z" }, + { url = "https://files.pythonhosted.org/packages/f2/ae/6256995b18c75e6ef76b30753a5109e786813aa79088b27c8eabb1ef85c9/curl_cffi-0.14.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b158c41a25388690dd0d40b5bc38d1e0f512135f17fdb8029868cbc1993d2e5b", size = 8010654, upload-time = "2025-12-16T03:24:56.507Z" }, + { url = "https://files.pythonhosted.org/packages/fb/10/ff64249e516b103cb762e0a9dca3ee0f04cf25e2a1d5d9838e0f1273d071/curl_cffi-0.14.0-cp39-abi3-manylinux_2_28_i686.whl", hash = "sha256:1439fbef3500fb723333c826adf0efb0e2e5065a703fb5eccce637a2250db34a", size = 7781969, upload-time = "2025-12-16T03:24:57.885Z" }, + { url = "https://files.pythonhosted.org/packages/51/76/d6f7bb76c2d12811aa7ff16f5e17b678abdd1b357b9a8ac56310ceccabd5/curl_cffi-0.14.0-cp39-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e7176f2c2d22b542e3cf261072a81deb018cfa7688930f95dddef215caddb469", size = 7969133, upload-time = "2025-12-16T03:24:59.261Z" }, + { url = "https://files.pythonhosted.org/packages/23/7c/cca39c0ed4e1772613d3cba13091c0e9d3b89365e84b9bf9838259a3cd8f/curl_cffi-0.14.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:03f21ade2d72978c2bb8670e9b6de5260e2755092b02d94b70b906813662998d", size = 9080167, upload-time = "2025-12-16T03:25:00.946Z" }, + { url = "https://files.pythonhosted.org/packages/75/03/a942d7119d3e8911094d157598ae0169b1c6ca1bd3f27d7991b279bcc45b/curl_cffi-0.14.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:58ebf02de64ee5c95613209ddacb014c2d2f86298d7080c0a1c12ed876ee0690", size = 9520464, upload-time = "2025-12-16T03:25:02.922Z" }, + { url = "https://files.pythonhosted.org/packages/a2/77/78900e9b0833066d2274bda75cba426fdb4cef7fbf6a4f6a6ca447607bec/curl_cffi-0.14.0-cp39-abi3-win_amd64.whl", hash = "sha256:6e503f9a103f6ae7acfb3890c843b53ec030785a22ae7682a22cc43afb94123e", size = 1677416, upload-time = "2025-12-16T03:25:04.902Z" }, + { url = "https://files.pythonhosted.org/packages/5c/7c/d2ba86b0b3e1e2830bd94163d047de122c69a8df03c5c7c36326c456ad82/curl_cffi-0.14.0-cp39-abi3-win_arm64.whl", hash = "sha256:2eed50a969201605c863c4c31269dfc3e0da52916086ac54553cfa353022425c", size = 1425067, upload-time = "2025-12-16T03:25:06.454Z" }, +] + [[package]] name = "cycler" version = "0.12.1" @@ -367,6 +438,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dd/2d/13e6024e613679d8a489dd922f199ef4b1d08a456a58eadd96dc2f05171f/duckdb-1.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:53cd6423136ab44383ec9955aefe7599b3fb3dd1fe006161e6396d8167e0e0d4", size = 13458633, upload-time = "2026-01-26T11:50:17.657Z" }, ] +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + [[package]] name = "executing" version = "2.2.1" @@ -451,6 +531,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] +[[package]] +name = "html5lib" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ac/b6/b55c3f49042f1df3dcd422b7f224f939892ee94f22abcf503a9b7339eaf2/html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f", size = 272215, upload-time = "2020-06-22T23:32:38.834Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/dd/a834df6482147d48e225a49515aabc28974ad5a4ca3215c18a882565b028/html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", size = 112173, upload-time = "2020-06-22T23:32:36.781Z" }, +] + [[package]] name = "httpcore" version = "1.0.9" @@ -606,6 +699,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl", hash = "sha256:9a08e1dd65f6a4d4c6fa82d216cf2477349ec2346a38fd70cc11d2557499fbcc", size = 36163, upload-time = "2026-01-01T19:42:13.962Z" }, ] +[[package]] +name = "jsonpath" +version = "0.82.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/a1/693351acd0a9edca4de9153372a65e75398898ea7f8a5c722ab00f464929/jsonpath-0.82.2.tar.gz", hash = "sha256:d87ef2bcbcded68ee96bc34c1809b69457ecec9b0c4dd471658a12bd391002d1", size = 10353, upload-time = "2023-08-24T18:57:55.459Z" } + [[package]] name = "jsonpointer" version = "3.0.0" @@ -914,6 +1013,7 @@ name = "leopard-analysis" version = "0.1.0" source = { virtual = "." } dependencies = [ + { name = "akshare" }, { name = "backtesting" }, { name = "duckdb" }, { name = "jupyter" }, @@ -928,10 +1028,12 @@ dependencies = [ { name = "ta-lib" }, { name = "tabulate" }, { name = "tqdm" }, + { name = "tushare" }, ] [package.metadata] requires-dist = [ + { name = "akshare", specifier = ">=1.18.20" }, { name = "backtesting", specifier = "~=0.6.5" }, { name = "duckdb", specifier = ">=1.4.4" }, { name = "jupyter", specifier = "~=1.1.1" }, @@ -946,6 +1048,51 @@ requires-dist = [ { name = "ta-lib", specifier = ">=0.6.8" }, { name = "tabulate", specifier = ">=0.9.0" }, { name = "tqdm", specifier = ">=4.67.1" }, + { name = "tushare", specifier = ">=1.4.24" }, +] + +[[package]] +name = "lxml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801, upload-time = "2025-09-22T04:02:30.113Z" }, + { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403, upload-time = "2025-09-22T04:02:32.119Z" }, + { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload-time = "2025-09-22T04:02:34.155Z" }, + { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload-time = "2025-09-22T04:02:36.054Z" }, + { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload-time = "2025-09-22T04:02:38.154Z" }, + { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload-time = "2025-09-22T04:02:40.413Z" }, + { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload-time = "2025-09-22T04:02:42.288Z" }, + { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload-time = "2025-09-22T04:02:44.165Z" }, + { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload-time = "2025-09-22T04:02:46.524Z" }, + { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload-time = "2025-09-22T04:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload-time = "2025-09-22T04:02:50.746Z" }, + { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload-time = "2025-09-22T04:02:52.968Z" }, + { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload-time = "2025-09-22T04:02:54.798Z" }, + { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload-time = "2025-09-22T04:02:57.058Z" }, + { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload-time = "2025-09-22T04:02:58.966Z" }, + { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload-time = "2025-09-22T04:03:38.05Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload-time = "2025-09-22T04:03:39.835Z" }, + { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload-time = "2025-09-22T04:03:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380, upload-time = "2025-09-22T04:03:01.645Z" }, + { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632, upload-time = "2025-09-22T04:03:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload-time = "2025-09-22T04:03:05.651Z" }, + { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload-time = "2025-09-22T04:03:07.452Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload-time = "2025-09-22T04:03:09.297Z" }, + { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload-time = "2025-09-22T04:03:11.651Z" }, + { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload-time = "2025-09-22T04:03:13.592Z" }, + { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload-time = "2025-09-22T04:03:15.408Z" }, + { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload-time = "2025-09-22T04:03:17.262Z" }, + { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload-time = "2025-09-22T04:03:19.14Z" }, + { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload-time = "2025-09-22T04:03:21.436Z" }, + { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload-time = "2025-09-22T04:03:23.27Z" }, + { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload-time = "2025-09-22T04:03:25.767Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload-time = "2025-09-22T04:03:27.62Z" }, + { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload-time = "2025-09-22T04:03:30.056Z" }, + { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload-time = "2025-09-22T04:03:32.198Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload-time = "2025-09-22T04:03:34.027Z" }, + { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload-time = "2025-09-22T04:03:36.249Z" }, ] [[package]] @@ -1023,6 +1170,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, ] +[[package]] +name = "mini-racer" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/55/7b/2f417069fb8fcb85c1458e51ea83c12d37f892a41544ef28479e37a315a3/mini_racer-0.14.0.tar.gz", hash = "sha256:7f812d6f21a8828e99e986bf4bb184c04bd906c845061aa43d7dd3edc8b8e6f5", size = 41238, upload-time = "2026-01-05T07:28:50.336Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/b5/d184a34787edae8301ec5bd1a454c9bfdce2c58fb3c887f8d12416589057/mini_racer-0.14.0-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:b02b3e15c548958a75afec12b9c21afa01c4a3aacbea66f5856036ff9b6c1a36", size = 19847149, upload-time = "2026-01-05T07:28:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/d4/09/f7afb45b4e54ccacc88fb543d7d87040904c7bbcbeed3f944959189f93c1/mini_racer-0.14.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:049a239a1174d40e2a38da71b55aa0ad73a1a7be90956d4ab9ddf9a1dcfa8178", size = 18396834, upload-time = "2026-01-05T07:28:27.653Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c5/305d16ea858e9be168e00b2cd5d4e7b74524d9c4b1349b1267386c25964e/mini_racer-0.14.0-py3-none-win_amd64.whl", hash = "sha256:7e4cd3fef3df603c0d1feea6e258cf02c6c09e8619d43d4ff0f0a8595cf96715", size = 15474619, upload-time = "2026-01-05T07:28:45.059Z" }, + { url = "https://files.pythonhosted.org/packages/bd/27/e313b5ff8f6583253e5f9fee64ab88476a570c7307554acb0e2899668a97/mini_racer-0.14.0-py3-none-win_arm64.whl", hash = "sha256:2cb21a959c7045c46d727db015e614903217f3648d24fcdbde6de3b4bd17a498", size = 14795219, upload-time = "2026-01-05T07:28:48.25Z" }, +] + [[package]] name = "mistune" version = "3.2.0" @@ -1175,6 +1334,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ad/0d/eca3d962f9eef265f01a8e0d20085c6dd1f443cbffc11b6dede81fd82356/numpy-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:6436cffb4f2bf26c974344439439c95e152c9a527013f26b3577be6c2ca64295", size = 10667121, upload-time = "2026-01-10T06:44:41.644Z" }, ] +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + [[package]] name = "packaging" version = "25.0" @@ -1385,6 +1556,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] +[[package]] +name = "py-mini-racer" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/97/a578b918b2e5923dd754cb60bb8b8aeffc85255ffb92566e3c65b148ff72/py_mini_racer-0.6.0.tar.gz", hash = "sha256:f71e36b643d947ba698c57cd9bd2232c83ca997b0802fc2f7f79582377040c11", size = 5994836, upload-time = "2021-04-22T07:58:35.993Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/a9/8ce0ca222ef04d602924a1e099be93f5435ca6f3294182a30574d4159ca2/py_mini_racer-0.6.0-py2.py3-none-manylinux1_x86_64.whl", hash = "sha256:42896c24968481dd953eeeb11de331f6870917811961c9b26ba09071e07180e2", size = 5416149, upload-time = "2021-04-22T07:58:25.615Z" }, +] + [[package]] name = "pycparser" version = "2.23" @@ -1634,6 +1814,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, ] +[[package]] +name = "simplejson" +version = "3.20.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/41/f4/a1ac5ed32f7ed9a088d62a59d410d4c204b3b3815722e2ccfb491fa8251b/simplejson-3.20.2.tar.gz", hash = "sha256:5fe7a6ce14d1c300d80d08695b7f7e633de6cd72c80644021874d985b3393649", size = 85784, upload-time = "2025-09-26T16:29:36.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/5b/83e1ff87eb60ca706972f7e02e15c0b33396e7bdbd080069a5d1b53cf0d8/simplejson-3.20.2-py3-none-any.whl", hash = "sha256:3b6bb7fb96efd673eac2e4235200bfffdc2353ad12c54117e1e4e2fc485ac017", size = 57309, upload-time = "2025-09-26T16:29:35.312Z" }, +] + [[package]] name = "six" version = "1.17.0" @@ -1786,6 +1975,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, ] +[[package]] +name = "tushare" +version = "1.4.24" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bs4" }, + { name = "lxml" }, + { name = "pandas" }, + { name = "requests" }, + { name = "simplejson" }, + { name = "tqdm" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/09/2141aaccb90a8249edb42d6b31330606d8cf9345237773775a3aa4c71986/tushare-1.4.24.tar.gz", hash = "sha256:786acbf6ee7dfb0b152bdd570b673f74e58b86a0d9908a221c6bdc4254a4e0ea", size = 128539, upload-time = "2025-08-25T02:02:05.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/75/63810958023595b460f2a5ef6baf5a60ffd8166e5fc06a3c2f22e9ca7b34/tushare-1.4.24-py3-none-any.whl", hash = "sha256:778e3128262747cb0cdadac2e5a5e6cd1a520c239b4ffbde2776652424451b08", size = 143587, upload-time = "2025-08-25T02:02:03.554Z" }, +] + [[package]] name = "types-pytz" version = "2025.2.0.20251108" @@ -1876,6 +2083,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/0e/fa3b193432cfc60c93b42f3be03365f5f909d2b3ea410295cf36df739e31/widgetsnbextension-4.0.15-py3-none-any.whl", hash = "sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366", size = 2196503, upload-time = "2025-11-01T21:15:53.565Z" }, ] +[[package]] +name = "xlrd" +version = "2.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d1990d7af382c79f3b2372e880b65de21b01b1a2b78691e/xlrd-2.0.2.tar.gz", hash = "sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9", size = 100167, upload-time = "2025-06-14T08:46:39.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload-time = "2025-06-14T08:46:37.766Z" }, +] + [[package]] name = "xyzservices" version = "2025.11.0"