Copy disabled (too large)
Download .txt
Showing preview only (51,838K chars total). Download the full file to get everything.
Repository: rabernat/intro_to_physical_oceanography
Branch: master
Commit: 1cd76829d94d
Files: 44
Total size: 98.0 MB
Directory structure:
gitextract_hfw27rs6/
├── .github/
│ └── workflows/
│ └── deploy.yml
├── .gitignore
├── LICENSE
├── README.md
├── argo/
│ └── plot_argo.ipynb
├── book/
│ ├── 01_ocean_bathymetry.ipynb
│ ├── 02-a_thermodynamics_of_seawater.ipynb
│ ├── 02-b_the_water_column.ipynb
│ ├── 02-c_ocean_temperature_salinity_stratification.ipynb
│ ├── 03_air_sea_exchange.ipynb
│ ├── 04_advection_diffusion_continuity.ipynb
│ ├── 05_equations_of_motion.ipynb
│ ├── 06_hydrostatic_geostrophic.ipynb
│ ├── 07_ekman.ipynb
│ ├── AMOC_theory.ipynb
│ ├── ECCO-state-estimate.ipynb
│ ├── _config.yml
│ ├── _toc.yml
│ ├── assignments/
│ │ ├── geostrophy_ekman.ipynb
│ │ ├── heat_and_salt_fluxes.ipynb
│ │ └── thermodynamics.ipynb
│ ├── barotropic_circulation.ipynb
│ ├── heat-transport.ipynb
│ ├── intro.md
│ ├── overturning_circulation.ipynb
│ ├── rise.css
│ ├── southern_ocean.ipynb
│ └── vorticity_sverdrup_transport_and_gyres.ipynb
├── data.md
├── homework-2017/
│ ├── 01_thermodynamics.ipynb
│ ├── 03_thermal_wind_and_ekman.ipynb
│ └── 05_mixing_and_Southern_Ocean.ipynb
├── homework-2018/
│ ├── po-hw-1.ipynb
│ ├── po-hw-2.ipynb
│ └── po-hw-4.ipynb
├── homework-2019/
│ ├── po-hw-1.ipynb
│ └── po-southern-ocean-problem.ipynb
├── lectures/
│ ├── mesoscale_mixing.ipynb
│ ├── southern_ocean/
│ │ └── SO_circulation.tex
│ └── test_mathjax.ipynb
├── phys_ocean_env.yml
├── random_walk/
│ ├── take_a_walk.py
│ └── walkers.py
└── requirements.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/deploy.yml
================================================
name: deploy-book
# Trigger the workflow on push to main branch and PRs
on:
push:
branches:
- master
pull_request:
branches:
- master
# This job installs dependencies, builds the book, and deploys the html
jobs:
build-and-deploy-book:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
python-version: [3.8]
steps:
- uses: actions/checkout@v2
# Install dependencies
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
pip install -r requirements.txt
# Build the book
- name: Build the book
run: |
jupyter-book build book
# Deploy the book's html to earth-env-data-science.github.io
- name: GitHub Pages action
if: github.ref == 'refs/heads/master'
uses: peaceiris/actions-gh-pages@v3
with:
publish_branch: gh-pages
publish_dir: book/_build/html
full_commit_message: "GitHub action book deploy"
github_token: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
book/_build/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2020 Ryan Abernathey
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Intro to Physical Oceanography
This repository contains course materials for EESC4925. The lecture notes are in the form of interactive Jupyter Notebooks.
**New** The class notes are now compiled as a Jupyter Book: http://rabernat.github.io/intro_to_physical_oceanography
Github source: https://github.com/rabernat/intro_to_physical_oceanography
================================================
FILE: argo/plot_argo.ipynb
================================================
{
"cells": [
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import xarray as xr\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"<xarray.Dataset>\n",
"Dimensions: (n_calib: 1, n_history: 0, n_param: 3, pres_mean: 54, time: 162)\n",
"Coordinates:\n",
" * time (time) datetime64[ns] 2013-05-14T04:05:19.017600 ...\n",
" * pres_mean (pres_mean) float64 44.35 30.05 35.1 40.08 ...\n",
"Dimensions without coordinates: n_calib, n_history, n_param\n",
"Data variables:\n",
" data_type object b'Argo profile '\n",
" format_version object b'3.1 '\n",
" handbook_version object b'1.2 '\n",
" reference_date_time object b'19500101000000'\n",
" date_creation object b'20130520055359'\n",
" date_update object b'20171020134709'\n",
" platform_number (time) object b'6901147 ' b'6901147 ' ...\n",
" project_name (time) object b'Argo UK ' ...\n",
" pi_name (time) object b'Jon Turton ' ...\n",
" station_parameters (time, n_param) object b'PRES ' ...\n",
" cycle_number (time) float64 1.0 2.0 3.0 4.0 5.0 6.0 7.0 ...\n",
" direction (time) object b'A' b'A' b'A' b'A' b'A' ...\n",
" data_centre (time) object b'BO' b'BO' b'BO' b'BO' ...\n",
" dc_reference (time) object b'48313 ' ...\n",
" data_state_indicator (time) object b'2B+ ' b'2B+ ' b'2B+ ' ...\n",
" data_mode (time) object b'A' b'A' b'A' b'A' b'A' ...\n",
" platform_type (time) object b'APEX ' ...\n",
" float_serial_no (time) object b'6249 ' ...\n",
" firmware_version (time) object b'060408 ' ...\n",
" wmo_inst_type (time) object b'846 ' b'846 ' b'846 ' ...\n",
" juld_qc (time) object b'1' b'1' b'1' b'1' b'1' ...\n",
" juld_location (time) datetime64[ns] 2013-05-14T04:05:19.017600 ...\n",
" latitude (time) float64 61.25 60.7 60.88 61.05 ...\n",
" longitude (time) float64 -20.01 -20.8 -18.77 -18.17 ...\n",
" position_qc (time) object b'1' b'1' b'1' b'1' b'1' ...\n",
" positioning_system (time) object b'ARGOS ' b'ARGOS ' ...\n",
" profile_pres_qc (time) object b'F' b'A' b'A' b'A' b'A' ...\n",
" profile_temp_qc (time) object b'F' b'A' b'B' b'B' b'B' ...\n",
" profile_psal_qc (time) object nan b'A' b'B' b'B' b'B' b'B' ...\n",
" vertical_sampling_scheme (time) object b'Primary sampling: discrete ' ...\n",
" config_mission_number (time) float64 -1.0 -1.0 -1.0 -1.0 -1.0 ...\n",
" pres (time, pres_mean) float64 3.277e+03 nan ...\n",
" pres_qc (time, pres_mean) object b'4' nan nan nan ...\n",
" pres_adjusted (time, pres_mean) float64 nan nan nan nan ...\n",
" pres_adjusted_qc (time, pres_mean) object b'4' nan nan nan ...\n",
" pres_adjusted_error (time, pres_mean) float64 nan nan nan nan ...\n",
" temp (time, pres_mean) float64 -4.096 nan nan ...\n",
" temp_qc (time, pres_mean) object b'4' nan nan nan ...\n",
" temp_adjusted (time, pres_mean) float64 nan nan nan nan ...\n",
" temp_adjusted_qc (time, pres_mean) object b'4' nan nan nan ...\n",
" temp_adjusted_error (time, pres_mean) float64 nan nan nan nan ...\n",
" psal (time, pres_mean) float64 nan nan nan nan ...\n",
" psal_qc (time, pres_mean) object b'9' nan nan nan ...\n",
" psal_adjusted (time, pres_mean) float64 nan nan nan nan ...\n",
" psal_adjusted_qc (time, pres_mean) object b'9' nan nan nan ...\n",
" psal_adjusted_error (time, pres_mean) float64 nan nan nan nan ...\n",
" parameter (time, n_calib, n_param) object b'PRES ' ...\n",
" scientific_calib_equation (time, n_calib, n_param) object b'PRES_ADJUSTED = PRES - dP, where dP is SURFACE PRESSURE from current cycle. ' ...\n",
" scientific_calib_coefficient (time, n_calib, n_param) object b'dP = -0.9 ' ...\n",
" scientific_calib_comment (time, n_calib, n_param) object b'null ' ...\n",
" scientific_calib_date (time, n_calib, n_param) object b'20130516114540' ...\n",
" history_institution (n_history, time) object \n",
" history_step (n_history, time) object \n",
" history_software (n_history, time) object \n",
" history_software_release (n_history, time) object \n",
" history_reference (n_history, time) object \n",
" history_date (n_history, time) object \n",
" history_action (n_history, time) object \n",
" history_parameter (n_history, time) object \n",
" history_start_pres (n_history, time) float64 \n",
" history_stop_pres (n_history, time) float64 \n",
" history_previous_value (n_history, time) float64 \n",
" history_qctest (n_history, time) object \n",
" crs int32 -2147483647\n",
"Attributes:\n",
" title: Argo float vertical profile\n",
" institution: FR GDAC\n",
" source: Argo float\n",
" history: 2017-10-21T06:42:47Z csun convAGDAC.f90 ...\n",
" references: http://www.nodc.noaa.gov/argo/\n",
" user_manual_version: 3.1\n",
" Conventions: GADR-3.0 Argo-3.0 CF-1.6\n",
" featureType: trajectoryProfile\n",
" uuid: c3e1fef3-74de-42f1-898a-d47d6d0817b4\n",
" summary: The U.S. National Oceanographic Data Cen...\n",
" file_source: The Argo Global Data Assembly Center FTP...\n",
" keywords: temperature, salinity, sea_water_tempera...\n",
" keywords_vocabulary: NODC Data Types, CF Standard Names\n",
" creator_name: Charles Sun\n",
" creator_url: http://www.nodc.noaa.gov\n",
" creator_email: Charles.Sun@noaa.gov\n",
" id: 0042682\n",
" naming_authority: gov.noaa.nodc\n",
" standard_name_vocabulary: CF-1.6\n",
" Metadata_Conventions: Unidata Dataset Discovery v1.0\n",
" publisher_name: US DOC; NESDIS; NATIONAL OCEANOGRAPHIC D...\n",
" publisher_url: http://www.nodc.noaa.gov/\n",
" publisher_email: NODC.Services@noaa.gov\n",
" date_created: 2017-10-21T06:42:47Z\n",
" date_modified: 2017-10-21T06:42:47Z\n",
" date_issued: 2017-10-21T06:42:47Z\n",
" acknowledgment: These data were acquired from the US NOA...\n",
" license: These data are openly available to the p...\n",
" cdm_data_type: trajectoryProfile\n",
" geospatial_lat_min: 52.9892\n",
" geospatial_lat_max: 64.903\n",
" geospatial_lon_min: -60.416\n",
" geospatial_lon_max: -16.838\n",
" geospatial_vertical_min: 22.2\n",
" geospatial_vertical_max: 3276.8\n",
" geospatial_lat_units: degrees_north\n",
" geospatial_lat_resolution: point\n",
" geospatial_lon_units: degrees_east\n",
" geospatial_lon_resolution: point\n",
" geospatial_vertical_units: decibars\n",
" geospatial_vertical_resolution: point\n",
" geospatial_vertical_positive: down\n",
" time_coverage_start: 2013-05-14T04:05:19Z\n",
" time_coverage_end: 2017-10-20T07:59:39Z\n",
" time_coverage_duration: point\n",
" time_coverage_resolution: point\n",
" gadr_ConventionVersion: GADR-3.0\n",
" gadr_program: convAGDAC.f90\n",
" gadr_programVersion: 1.0"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# open the dataset\n",
"ds = xr.open_dataset('/Users/rpa/Downloads/nodc_6901147_prof.nc')\n",
"# calculate the mean pressure across all profiles.\n",
"# we will use this as our vertical coordinate.\n",
"# (This is not a perfect solution, but it's good enough for us here.)\n",
"ds['pres_mean'] = ds.pres.mean(dim='n_prof')\n",
"# swap and rename dimensions for easier plotting\n",
"ds = ds.swap_dims({'n_prof': 'juld', 'n_levels': 'pres_mean'}).rename({'juld': 'time'})\n",
"ds"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.QuadMesh at 0x118810ba8>"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nNTMzM7Na+H8iPA4i6OJxPgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1187be1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(12,5))\n",
"ds.temp.transpose().plot(vmin=-2, vmax=10, yincrease=False, cmap='RdBu_r')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
================================================
FILE: book/01_ocean_bathymetry.ipynb
================================================
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# The Boundaries of the Ocean #"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "-"
}
},
"source": [
"Before dealing with the water itself, let's first examine the space that the water lives in.\n",
"This space is defined by the ocean bottom (the bathymetry) and the top (the free surface).\n",
"\n",
"### Spatial Coordinates\n",
"\n",
"Longitude: $\\varphi$, Latitude: $\\lambda$\n",
"\n",
"### Boundaries\n",
"\n",
"Bottom: $H = H(\\varphi, \\lambda)$, Surface: $\\eta = \\eta(\\varphi, \\lambda, t)$\n",
"\n",
"_The ocean has no side boundaries!_"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## The vertical coordinate: z\n",
"\n",
"$z = 0$ at sea level\n",
"\n",
"But what is sea level? Determined by the **geoid**: isosurfaces of gravitational + centrifugal potential.\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### The Geoid\n",
"\n",
"- Determined by distribution of mass within the Earth + planetary rotation rate\n",
"- Always perpendicular to gravity vector\n",
"- Varies on O(100 m) over Earth's surface"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## The Free Surface\n",
"\n",
"- Deviates from the geoid due to ocean mean circulation, waves, etc\n",
"- Varies on O(1 m)\n",
"- Negligible contribution to overall ocean volume"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## The Bottom\n",
"\n",
"To look at the bottom boundary of the ocean, we will load data from the\n",
"[NGDC ETOPO5 database](http://iridl.ldeo.columbia.edu/SOURCES/.NOAA/.NGDC/.ETOPO5/.dataset_documentation.html) from the IRI Data Library."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"data": {
"application/javascript": [
"\n",
"(function(root) {\n",
" function now() {\n",
" return new Date();\n",
" }\n",
"\n",
" var 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",
" if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
" root._bokeh_timeout = Date.now() + 5000;\n",
" root._bokeh_failed_load = false;\n",
" }\n",
"\n",
" function run_callbacks() {\n",
" try {\n",
" root._bokeh_onload_callbacks.forEach(function(callback) {\n",
" if (callback != null)\n",
" callback();\n",
" });\n",
" } finally {\n",
" delete root._bokeh_onload_callbacks\n",
" }\n",
" console.debug(\"Bokeh: all callbacks have finished\");\n",
" }\n",
"\n",
" function load_libs(css_urls, js_urls, js_modules, callback) {\n",
" if (css_urls == null) css_urls = [];\n",
" if (js_urls == null) js_urls = [];\n",
" if (js_modules == null) js_modules = [];\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.length === 0 && js_modules.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 + js_modules.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() {\n",
" console.error(\"failed to load \" + url);\n",
" }\n",
"\n",
" for (var i = 0; i < css_urls.length; i++) {\n",
" var url = css_urls[i];\n",
" const element = document.createElement(\"link\");\n",
" element.onload = on_load;\n",
" element.onerror = on_error;\n",
" element.rel = \"stylesheet\";\n",
" element.type = \"text/css\";\n",
" element.href = url;\n",
" console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" var skip = [];\n",
" if (window.requirejs) {\n",
" window.requirejs.config({'paths': {'tabulator': 'https://unpkg.com/tabulator-tables@4.9.3/dist/js/tabulator'}});\n",
" require([\"tabulator\"], function(Tabulator,) {\n",
" window.Tabulator = Tabulator;\n",
" })\n",
" }\n",
" if (((window['tabulator'] !== undefined) && (!(window['tabulator'] instanceof HTMLElement))) || window.requirejs) {\n",
" var urls = ['https://unpkg.com/tabulator-tables@4.9.3/dist/js/tabulator.js', 'https://unpkg.com/moment@2.27.0/moment.js'];\n",
" for (var i = 0; i < urls.length; i++) {\n",
" skip.push(urls[i])\n",
" }\n",
" }\n",
" for (var i = 0; i < js_urls.length; i++) {\n",
" var url = js_urls[i];\n",
" if (skip.indexOf(url) >= 0) { on_load(); continue; }\n",
" var element = document.createElement('script');\n",
" element.onload = on_load;\n",
" element.onerror = on_error;\n",
" element.async = false;\n",
" element.src = url;\n",
" console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.head.appendChild(element);\n",
" }\n",
" for (var i = 0; i < js_modules.length; i++) {\n",
" var url = js_modules[i];\n",
" if (skip.indexOf(url) >= 0) { on_load(); continue; }\n",
" var element = document.createElement('script');\n",
" element.onload = on_load;\n",
" element.onerror = on_error;\n",
" element.async = false;\n",
" element.src = url;\n",
" element.type = \"module\";\n",
" console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
" document.head.appendChild(element);\n",
" }\n",
" if (!js_urls.length && !js_modules.length) {\n",
" on_load()\n",
" }\n",
" };\n",
"\n",
" function inject_raw_css(css) {\n",
" const element = document.createElement(\"style\");\n",
" element.appendChild(document.createTextNode(css));\n",
" document.body.appendChild(element);\n",
" }\n",
"\n",
" var js_urls = [\"https://unpkg.com/tabulator-tables@4.9.3/dist/js/tabulator.js\", \"https://unpkg.com/moment@2.27.0/moment.js\"];\n",
" var js_modules = [];\n",
" var css_urls = [\"https://unpkg.com/tabulator-tables@4.9.3/dist/css/tabulator_simple.min.css\"];\n",
" var inline_js = [\n",
" function(Bokeh) {\n",
" inject_raw_css(\".bk.card {\\n border: 1px solid rgba(0,0,0,.125);\\n border-radius: 0.25rem;\\n}\\n.bk.accordion {\\n border: 1px solid rgba(0,0,0,.125);\\n}\\n.bk.card-header {\\n align-items: center;\\n background-color: rgba(0, 0, 0, 0.03);\\n border-radius: 0.25rem;\\n display: flex;\\n justify-content: space-between;\\n padding: 0 1.25rem 0 0;\\n width: 100%;\\n}\\n.bk.accordion-header {\\n align-items: center;\\n background-color: rgba(0, 0, 0, 0.03);\\n border-radius: 0;\\n display: flex;\\n justify-content: space-between;\\n padding: 0 1.25rem 0 0;\\n width: 100%;\\n}\\np.bk.card-button {\\n background-color: transparent;\\n font-size: 1.25rem;\\n font-weight: 700;\\n margin: 0;\\n margin-left: -15px;\\n}\\n.bk.card-header-row {\\n position: relative !important;\\n}\\n.bk.card-title {\\n align-items: center;\\n display: flex !important;\\n font-size: 1.4em;\\n font-weight: bold;\\n padding: 0.25em;\\n position: relative !important;\\n}\\n\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\"table.panel-df {\\n margin-left: auto;\\n margin-right: auto;\\n border: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n color: black;\\n font-size: 12px;\\n table-layout: fixed;\\n width: 100%;\\n}\\n\\n.panel-df tr, .panel-df th, .panel-df td {\\n text-align: right;\\n vertical-align: middle;\\n padding: 0.5em 0.5em !important;\\n line-height: normal;\\n white-space: normal;\\n max-width: none;\\n border: none;\\n}\\n\\n.panel-df tbody {\\n display: table-row-group;\\n vertical-align: middle;\\n border-color: inherit;\\n}\\n\\n.panel-df tbody tr:nth-child(odd) {\\n background: #f5f5f5;\\n}\\n\\n.panel-df thead {\\n border-bottom: 1px solid black;\\n vertical-align: bottom;\\n}\\n\\n.panel-df tr:hover {\\n background: lightblue !important;\\n cursor: pointer;\\n}\\n\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\".json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\".bk.pn-loading:before {\\n position: absolute;\\n height: 100%;\\n width: 100%;\\n content: '';\\n z-index: 1000;\\n background-color: rgb(255,255,255,0.50);\\n border-color: lightgray;\\n background-repeat: no-repeat;\\n background-position: center;\\n background-size: auto 50%;\\n border-width: 1px;\\n cursor: progress;\\n}\\n.bk.pn-loading.arcs:hover:before {\\n cursor: progress;\\n}\\n\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\".bk.panel-widget-box {\\n min-height: 20px;\\n background-color: #f5f5f5;\\n border: 1px solid #e3e3e3;\\n border-radius: 4px;\\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n overflow-x: hidden;\\n overflow-y: hidden;\\n}\\n\\n.scrollable {\\n overflow: scroll;\\n}\\n\\nprogress {\\n appearance: none;\\n -moz-appearance: none;\\n -webkit-appearance: none;\\n border: none;\\n height: 20px;\\n background-color: whiteSmoke;\\n border-radius: 3px;\\n box-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n color: royalblue;\\n position: relative;\\n margin: 0 0 1.5em;\\n}\\n\\nprogress[value]::-webkit-progress-bar {\\n background-color: whiteSmoke;\\n border-radius: 3px;\\n box-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n}\\n\\nprogress[value]::-webkit-progress-value {\\n position: relative;\\n background-size: 35px 20px, 100% 100%, 100% 100%;\\n border-radius:3px;\\n}\\n\\nprogress.active:not([value])::before {\\n background-position: 10%;\\n animation-name: stripes;\\n animation-duration: 3s;\\n animation-timing-function: linear;\\n animation-iteration-count: infinite;\\n}\\n\\nprogress[value]::-moz-progress-bar {\\n background-size: 35px 20px, 100% 100%, 100% 100%;\\n border-radius:3px;\\n}\\n\\nprogress:not([value])::-moz-progress-bar {\\n border-radius:3px;\\n background: linear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\nprogress.active:not([value])::-moz-progress-bar {\\n background-position: 10%;\\n animation-name: stripes;\\n animation-duration: 3s;\\n animation-timing-function: linear;\\n animation-iteration-count: infinite;\\n}\\n\\nprogress.active:not([value])::-webkit-progress-bar {\\n background-position: 10%;\\n animation-name: stripes;\\n animation-duration: 3s;\\n animation-timing-function: linear;\\n animation-iteration-count: infinite;\\n}\\n\\nprogress.primary[value]::-webkit-progress-value { background-color: #007bff; }\\nprogress.primary:not([value])::before { background-color: #007bff; }\\nprogress.primary:not([value])::-webkit-progress-bar { background-color: #007bff; }\\nprogress.primary::-moz-progress-bar { background-color: #007bff; }\\n\\nprogress.secondary[value]::-webkit-progress-value { background-color: #6c757d; }\\nprogress.secondary:not([value])::before { background-color: #6c757d; }\\nprogress.secondary:not([value])::-webkit-progress-bar { background-color: #6c757d; }\\nprogress.secondary::-moz-progress-bar { background-color: #6c757d; }\\n\\nprogress.success[value]::-webkit-progress-value { background-color: #28a745; }\\nprogress.success:not([value])::before { background-color: #28a745; }\\nprogress.success:not([value])::-webkit-progress-bar { background-color: #28a745; }\\nprogress.success::-moz-progress-bar { background-color: #28a745; }\\n\\nprogress.danger[value]::-webkit-progress-value { background-color: #dc3545; }\\nprogress.danger:not([value])::before { background-color: #dc3545; }\\nprogress.danger:not([value])::-webkit-progress-bar { background-color: #dc3545; }\\nprogress.danger::-moz-progress-bar { background-color: #dc3545; }\\n\\nprogress.warning[value]::-webkit-progress-value { background-color: #ffc107; }\\nprogress.warning:not([value])::before { background-color: #ffc107; }\\nprogress.warning:not([value])::-webkit-progress-bar { background-color: #ffc107; }\\nprogress.warning::-moz-progress-bar { background-color: #ffc107; }\\n\\nprogress.info[value]::-webkit-progress-value { background-color: #17a2b8; }\\nprogress.info:not([value])::before { background-color: #17a2b8; }\\nprogress.info:not([value])::-webkit-progress-bar { background-color: #17a2b8; }\\nprogress.info::-moz-progress-bar { background-color: #17a2b8; }\\n\\nprogress.light[value]::-webkit-progress-value { background-color: #f8f9fa; }\\nprogress.light:not([value])::before { background-color: #f8f9fa; }\\nprogress.light:not([value])::-webkit-progress-bar { background-color: #f8f9fa; }\\nprogress.light::-moz-progress-bar { background-color: #f8f9fa; }\\n\\nprogress.dark[value]::-webkit-progress-value { background-color: #343a40; }\\nprogress.dark:not([value])::-webkit-progress-bar { background-color: #343a40; }\\nprogress.dark:not([value])::before { background-color: #343a40; }\\nprogress.dark::-moz-progress-bar { background-color: #343a40; }\\n\\nprogress:not([value])::-webkit-progress-bar {\\n border-radius: 3px;\\n background: linear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\nprogress:not([value])::before {\\n content:\\\" \\\";\\n position:absolute;\\n height: 20px;\\n top:0;\\n left:0;\\n right:0;\\n bottom:0;\\n border-radius: 3px;\\n background: linear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\n@keyframes stripes {\\n from {background-position: 0%}\\n to {background-position: 100%}\\n}\\n\\n.bk-root .bk.loader {\\n overflow: hidden;\\n}\\n\\n.bk.loader::after {\\n content: \\\"\\\";\\n border-radius: 50%;\\n -webkit-mask-image: radial-gradient(transparent 50%, rgba(0, 0, 0, 1) 54%);\\n width: 100%;\\n height: 100%;\\n left: 0;\\n top: 0;\\n position: absolute;\\n}\\n\\n.bk-root .bk.loader.dark::after {\\n background: #0f0f0f;\\n}\\n\\n.bk-root .bk.loader.light::after {\\n background: #f0f0f0;\\n}\\n\\n.bk-root .bk.loader.spin::after {\\n animation: spin 2s linear infinite;\\n}\\n\\n.bk-root div.bk.loader.spin.primary-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #007bff 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.secondary-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #6c757d 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.success-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #28a745 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.danger-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #dc3545 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.warning-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #ffc107 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.info-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #17a2b8 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.light-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #f8f9fa 50%);\\n}\\n\\n.bk-root div.bk.loader.dark-light::after {\\n background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #343a40 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.primary-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #007bff 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.secondary-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #6c757d 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.success-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #28a745 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.danger-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #dc3545 50%)\\n}\\n\\n.bk-root div.bk.loader.spin.warning-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #ffc107 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.info-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #17a2b8 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.light-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #f8f9fa 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.dark-dark::after {\\n background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #343a40 50%);\\n}\\n\\n/* Safari */\\n@-webkit-keyframes spin {\\n 0% { -webkit-transform: rotate(0deg); }\\n 100% { -webkit-transform: rotate(360deg); }\\n}\\n\\n@keyframes spin {\\n 0% { transform: rotate(0deg); }\\n 100% { transform: rotate(360deg); }\\n}\\n\\n.dot div {\\n height: 100%;\\n width: 100%;\\n border: 1px solid #000 !important;\\n background-color: #fff;\\n border-radius: 50%;\\n display: inline-block;\\n}\\n\\n.dot-filled div {\\n height: 100%;\\n width: 100%;\\n border: 1px solid #000 !important;\\n border-radius: 50%;\\n display: inline-block;\\n}\\n\\n.dot-filled.primary div {\\n background-color: #007bff;\\n}\\n\\n.dot-filled.secondary div {\\n background-color: #6c757d;\\n}\\n\\n.dot-filled.success div {\\n background-color: #28a745;\\n}\\n\\n.dot-filled.danger div {\\n background-color: #dc3545;\\n}\\n\\n.dot-filled.warning div {\\n background-color: #ffc107;\\n}\\n\\n.dot-filled.info div {\\n background-color: #17a2b8;\\n}\\n\\n.dot-filled.dark div {\\n background-color: #343a40;\\n}\\n\\n.dot-filled.light div {\\n background-color: #f8f9fa;\\n}\\n\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\".codehilite .hll { background-color: #ffffcc }\\n.codehilite { background: #f8f8f8; }\\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\\n.codehilite .o { color: #666666 } /* Operator */\\n.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\\n.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\\n.codehilite .ge { font-style: italic } /* Generic.Emph */\\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\\n.codehilite .go { color: #888888 } /* Generic.Output */\\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\\n.codehilite .gt { color: #0044DD } /* Generic.Traceback */\\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\\n.codehilite .m { color: #666666 } /* Literal.Number */\\n.codehilite .s { color: #BA2121 } /* Literal.String */\\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\\n.codehilite .nb { color: #008000 } /* Name.Builtin */\\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\\n.codehilite .no { color: #880000 } /* Name.Constant */\\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\\n.codehilite .nf { color: #0000FF } /* Name.Function */\\n.codehilite .nl { color: #A0A000 } /* Name.Label */\\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\\n.codehilite .nv { color: #19177C } /* Name.Variable */\\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\\n.codehilite .mb { color: #666666 } /* Literal.Number.Bin */\\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\\n.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */\\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\\n.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */\\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\\n.codehilite .fm { color: #0000FF } /* Name.Function.Magic */\\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\\n.codehilite .vm { color: #19177C } /* Name.Variable.Magic */\\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\\n\\n.markdown h1 { margin-block-start: 0.34em }\\n.markdown h2 { margin-block-start: 0.42em }\\n.markdown h3 { margin-block-start: 0.5em }\\n.markdown h4 { margin-block-start: 0.67em }\\n.markdown h5 { margin-block-start: 0.84em }\\n.markdown h6 { margin-block-start: 1.17em }\\n.markdown ul { padding-inline-start: 2em }\\n.markdown ol { padding-inline-start: 2em }\\n.markdown strong { font-weight: 600 }\\n.markdown a { color: -webkit-link }\\n.markdown a { color: -moz-hyperlinkText }\\n\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\".bk.alert {\\n padding: 0.75rem 1.25rem;\\n border: 1px solid transparent;\\n border-radius: 0.25rem;\\n /* Don't set margin because that will not render correctly! */\\n /* margin-bottom: 1rem; */\\n margin-top: 15px;\\n margin-bottom: 15px;\\n}\\n.bk.alert a {\\n color: rgb(11, 46, 19); /* #002752; */\\n font-weight: 700;\\n text-decoration: rgb(11, 46, 19);\\n text-decoration-color: rgb(11, 46, 19);\\n text-decoration-line: none;\\n text-decoration-style: solid;\\n text-decoration-thickness: auto;\\n }\\n.bk.alert a:hover {\\n color: rgb(11, 46, 19);\\n font-weight: 700;\\n text-decoration: underline;\\n}\\n\\n.bk.alert-primary {\\n color: #004085;\\n background-color: #cce5ff;\\n border-color: #b8daff;\\n}\\n.bk.alert-primary hr {\\n border-top-color: #9fcdff;\\n}\\n\\n.bk.alert-secondary {\\n color: #383d41;\\n background-color: #e2e3e5;\\n border-color: #d6d8db;\\n }\\n.bk.alert-secondary hr {\\n border-top-color: #c8cbcf;\\n}\\n\\n.bk.alert-success {\\n color: #155724;\\n background-color: #d4edda;\\n border-color: #c3e6cb;\\n }\\n\\n.bk.alert-success hr {\\n border-top-color: #b1dfbb;\\n}\\n\\n.bk.alert-info {\\n color: #0c5460;\\n background-color: #d1ecf1;\\n border-color: #bee5eb;\\n }\\n.bk.alert-info hr {\\n border-top-color: #abdde5;\\n}\\n\\n.bk.alert-warning {\\n color: #856404;\\n background-color: #fff3cd;\\n border-color: #ffeeba;\\n }\\n\\n.bk.alert-warning hr {\\n border-top-color: #ffe8a1;\\n}\\n\\n.bk.alert-danger {\\n color: #721c24;\\n background-color: #f8d7da;\\n border-color: #f5c6cb;\\n}\\n.bk.alert-danger hr {\\n border-top-color: #f1b0b7;\\n}\\n\\n.bk.alert-light {\\n color: #818182;\\n background-color: #fefefe;\\n border-color: #fdfdfe;\\n }\\n.bk.alert-light hr {\\n border-top-color: #ececf6;\\n}\\n\\n.bk.alert-dark {\\n color: #1b1e21;\\n background-color: #d6d8d9;\\n border-color: #c6c8ca;\\n }\\n.bk.alert-dark hr {\\n border-top-color: #b9bbbe;\\n}\\n\\n\\n/* adjf\\u00e6l */\\n\\n.bk.alert-primary a {\\n color: #002752;\\n}\\n\\n.bk.alert-secondary a {\\n color: #202326;\\n}\\n\\n\\n.bk.alert-success a {\\n color: #0b2e13;\\n}\\n\\n\\n.bk.alert-info a {\\n color: #062c33;\\n}\\n\\n\\n.bk.alert-warning a {\\n color: #533f03;\\n}\\n\\n\\n.bk.alert-danger a {\\n color: #491217;\\n}\\n\\n.bk.alert-light a {\\n color: #686868;\\n}\\n\\n.bk.alert-dark a {\\n color: #040505;\\n}\");\n",
" },\n",
" function(Bokeh) {\n",
" inject_raw_css(\"\\n .bk.pn-loading.arcs:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBzdHlsZT0ibWFyZ2luOiBhdXRvOyBiYWNrZ3JvdW5kOiBub25lOyBkaXNwbGF5OiBibG9jazsgc2hhcGUtcmVuZGVyaW5nOiBhdXRvOyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4gIDxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjMyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZT0iI2MzYzNjMyIgc3Ryb2tlLWRhc2hhcnJheT0iNTAuMjY1NDgyNDU3NDM2NjkgNTAuMjY1NDgyNDU3NDM2NjkiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+ICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxcyIga2V5VGltZXM9IjA7MSIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCI+PC9hbmltYXRlVHJhbnNmb3JtPiAgPC9jaXJjbGU+PC9zdmc+\\\")\\n }\\n \");\n",
" },\n",
" function(Bokeh) {\n",
" /* BEGIN bokeh.min.js */\n",
" /*!\n",
" * Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors\n",
" * All rights reserved.\n",
" * \n",
" * Redistribution and use in source and binary forms, with or without modification,\n",
" * are permitted provided that the following conditions are met:\n",
" * \n",
" * Redistributions of source code must retain the above copyright notice,\n",
" * this list of conditions and the following disclaimer.\n",
" * \n",
" * Redistributions in binary form must reproduce the above copyright notice,\n",
" * this list of conditions and the following disclaimer in the documentation\n",
" * and/or other materials provided with the distribution.\n",
" * \n",
" * Neither the name of Anaconda nor the names of any contributors\n",
" * may be used to endorse or promote products derived from this software\n",
" * without specific prior written permission.\n",
" * \n",
" * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n",
" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n",
" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n",
" * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n",
" * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n",
" * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n",
" * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n",
" * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n",
" * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n",
" * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n",
" * THE POSSIBILITY OF SUCH DAMAGE.\n",
" */\n",
" (function(root, factory) {\n",
" const bokeh = factory();\n",
" bokeh.__bokeh__ = true;\n",
" if (typeof root.Bokeh === \"undefined\" || typeof root.Bokeh.__bokeh__ === \"undefined\") {\n",
" root.Bokeh = bokeh;\n",
" }\n",
" const Bokeh = root.Bokeh;\n",
" Bokeh[bokeh.version] = bokeh;\n",
" })(this, function() {\n",
" var define;\n",
" var parent_require = typeof require === \"function\" && require\n",
" return (function(modules, entry, aliases, externals) {\n",
" if (aliases === undefined) aliases = {};\n",
" if (externals === undefined) externals = {};\n",
"\n",
" var cache = {};\n",
"\n",
" var normalize = function(name) {\n",
" if (typeof name === \"number\")\n",
" return name;\n",
"\n",
" if (name === \"bokehjs\")\n",
" return entry;\n",
"\n",
" if (!externals[name]) {\n",
" var prefix = \"@bokehjs/\"\n",
" if (name.slice(0, prefix.length) === prefix)\n",
" name = name.slice(prefix.length)\n",
" }\n",
"\n",
" var alias = aliases[name]\n",
" if (alias != null)\n",
" return alias;\n",
"\n",
" var trailing = name.length > 0 && name[name.lenght-1] === \"/\";\n",
" var index = aliases[name + (trailing ? \"\" : \"/\") + \"index\"];\n",
" if (index != null)\n",
" return index;\n",
"\n",
" return name;\n",
" }\n",
"\n",
" var require = function(name) {\n",
" var mod = cache[name];\n",
" if (!mod) {\n",
" var id = normalize(name);\n",
"\n",
" mod = cache[id];\n",
" if (!mod) {\n",
" if (!modules[id]) {\n",
" if (externals[id] === false || (externals[id] == true && parent_require)) {\n",
" try {\n",
" mod = {exports: externals[id] ? parent_require(id) : {}};\n",
" cache[id] = cache[name] = mod;\n",
" return mod.exports;\n",
" } catch (e) {}\n",
" }\n",
"\n",
" var err = new Error(\"Cannot find module '\" + name + \"'\");\n",
" err.code = 'MODULE_NOT_FOUND';\n",
" throw err;\n",
" }\n",
"\n",
" mod = {exports: {}};\n",
" cache[id] = cache[name] = mod;\n",
"\n",
" function __esModule() {\n",
" Object.defineProperty(mod.exports, \"__esModule\", {value: true});\n",
" }\n",
"\n",
" function __esExport(name, value) {\n",
" Object.defineProperty(mod.exports, name, {\n",
" enumerable: true, get: function () { return value; }\n",
" });\n",
" }\n",
"\n",
" modules[id].call(mod.exports, require, mod, mod.exports, __esModule, __esExport);\n",
" } else {\n",
" cache[name] = mod;\n",
" }\n",
" }\n",
"\n",
" return mod.exports;\n",
" }\n",
" require.resolve = function(name) {\n",
" return \"\"\n",
" }\n",
"\n",
" var main = require(entry);\n",
" main.require = require;\n",
"\n",
" if (typeof Proxy !== \"undefined\") {\n",
" // allow Bokeh.loader[\"@bokehjs/module/name\"] syntax\n",
" main.loader = new Proxy({}, {\n",
" get: function(_obj, module) {\n",
" return require(module);\n",
" }\n",
" });\n",
" }\n",
"\n",
" main.register_plugin = function(plugin_modules, plugin_entry, plugin_aliases, plugin_externals) {\n",
" if (plugin_aliases === undefined) plugin_aliases = {};\n",
" if (plugin_externals === undefined) plugin_externals = {};\n",
"\n",
" for (var name in plugin_modules) {\n",
" modules[name] = plugin_modules[name];\n",
" }\n",
"\n",
" for (var name in plugin_aliases) {\n",
" aliases[name] = plugin_aliases[name];\n",
" }\n",
"\n",
" for (var name in plugin_externals) {\n",
" externals[name] = plugin_externals[name];\n",
" }\n",
"\n",
" var plugin = require(plugin_entry);\n",
"\n",
" for (var name in plugin) {\n",
" main[name] = plugin[name];\n",
" }\n",
"\n",
" return plugin;\n",
" }\n",
"\n",
" return main;\n",
" })\n",
" ([\n",
" function _(t,_,n,o,r){o();t(1).__exportStar(t(2),n)},\n",
" function _(t,e,n,r,o){r();var a=function(t,e){return(a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])})(t,e)};n.__extends=function(t,e){function n(){this.constructor=t}a(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)};function i(t){var e=\"function\"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&\"number\"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function c(t,e){var n=\"function\"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,a=n.call(t),i=[];try{for(;(void 0===e||e-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function u(t){return this instanceof u?(this.v=t,this):new u(t)}n.__assign=function(){return n.__assign=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.__assign.apply(this,arguments)},n.__rest=function(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n},n.__decorate=function(t,e,n,r){var o,a=arguments.length,i=a<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)i=Reflect.decorate(t,e,n,r);else for(var c=t.length-1;c>=0;c--)(o=t[c])&&(i=(a<3?o(i):a>3?o(e,n,i):o(e,n))||i);return a>3&&i&&Object.defineProperty(e,n,i),i},n.__param=function(t,e){return function(n,r){e(n,r,t)}},n.__metadata=function(t,e){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(t,e)},n.__awaiter=function(t,e,n,r){return new(n||(n=Promise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function c(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,c)}u((r=r.apply(t,e||[])).next())}))},n.__generator=function(t,e){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:c(0),throw:c(1),return:c(2)},\"function\"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function c(a){return function(c){return function(a){if(n)throw new TypeError(\"Generator is already executing.\");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=e.call(t,i)}catch(t){a=[6,t],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}},n.__createBinding=Object.create?function(t,e,n,r){void 0===r&&(r=n),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){void 0===r&&(r=n),t[r]=e[n]},n.__exportStar=function(t,e){for(var r in t)\"default\"===r||Object.prototype.hasOwnProperty.call(e,r)||n.__createBinding(e,t,r)},n.__values=i,n.__read=c,n.__spread=function(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(c(arguments[e]));return t},n.__spreadArrays=function(){for(var t=0,e=0,n=arguments.length;e<n;e++)t+=arguments[e].length;var r=Array(t),o=0;for(e=0;e<n;e++)for(var a=arguments[e],i=0,c=a.length;i<c;i++,o++)r[o]=a[i];return r},n.__await=u,n.__asyncGenerator=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var r,o=n.apply(t,e||[]),a=[];return r={},i(\"next\"),i(\"throw\"),i(\"return\"),r[Symbol.asyncIterator]=function(){return this},r;function i(t){o[t]&&(r[t]=function(e){return new Promise((function(n,r){a.push([t,e,n,r])>1||c(t,e)}))})}function c(t,e){try{(n=o[t](e)).value instanceof u?Promise.resolve(n.value.v).then(f,l):s(a[0][2],n)}catch(t){s(a[0][3],t)}var n}function f(t){c(\"next\",t)}function l(t){c(\"throw\",t)}function s(t,e){t(e),a.shift(),a.length&&c(a[0][0],a[0][1])}},n.__asyncDelegator=function(t){var e,n;return e={},r(\"next\"),r(\"throw\",(function(t){throw t})),r(\"return\"),e[Symbol.iterator]=function(){return this},e;function r(r,o){e[r]=t[r]?function(e){return(n=!n)?{value:u(t[r](e)),done:\"return\"===r}:o?o(e):e}:o}},n.__asyncValues=function(t){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var e,n=t[Symbol.asyncIterator];return n?n.call(t):(t=i(t),e={},r(\"next\"),r(\"throw\"),r(\"return\"),e[Symbol.asyncIterator]=function(){return this},e);function r(n){e[n]=t[n]&&function(e){return new Promise((function(r,o){(function(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)})(r,o,(e=t[n](e)).done,e.value)}))}}},n.__makeTemplateObject=function(t,e){return Object.defineProperty?Object.defineProperty(t,\"raw\",{value:e}):t.raw=e,t};var f=Object.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default=e};n.__importStar=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)\"default\"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n.__createBinding(e,t,r);return f(e,t),e},n.__importDefault=function(t){return t&&t.__esModule?t:{default:t}},n.__classPrivateFieldGet=function(t,e){if(!e.has(t))throw new TypeError(\"attempted to get private field on non-instance\");return e.get(t)},n.__classPrivateFieldSet=function(t,e,n){if(!e.has(t))throw new TypeError(\"attempted to set private field on non-instance\");return e.set(t,n),n}},\n",
" function _(e,t,o,s,l){s();const n=e(1);l(\"version\",e(3).version),l(\"index\",e(4).index),o.embed=n.__importStar(e(4)),o.protocol=n.__importStar(e(404)),o._testing=n.__importStar(e(405));var r=e(19);l(\"logger\",r.logger),l(\"set_log_level\",r.set_log_level),l(\"settings\",e(28).settings),l(\"Models\",e(7).Models),l(\"documents\",e(5).documents),l(\"safely\",e(406).safely)},\n",
" function _(n,i,o,c,e){c(),o.version=\"2.3.3\"},\n",
" function _(e,o,t,n,s){n();const d=e(5),r=e(19),_=e(34),c=e(13),i=e(8),a=e(16),u=e(395),l=e(397),m=e(396);var f=e(395);s(\"add_document_standalone\",f.add_document_standalone),s(\"index\",f.index),s(\"add_document_from_session\",e(397).add_document_from_session);var g=e(402);async function w(e,o,t,n){i.isString(e)&&(e=JSON.parse(_.unescape(e)));const s={};for(const[o,t]of c.entries(e))s[o]=d.Document.from_json(t);const a=[];for(const e of o){const o=m._resolve_element(e),d=m._resolve_root_elements(e);if(null!=e.docid)a.push(await u.add_document_standalone(s[e.docid],o,d,e.use_for_title));else{if(null==e.token)throw new Error(\"Error rendering Bokeh items: either 'docid' or 'token' was expected.\");{const s=l._get_ws_url(t,n);r.logger.debug(`embed: computed ws url: ${s}`);try{a.push(await l.add_document_from_session(s,e.token,o,d,e.use_for_title)),console.log(\"Bokeh items were rendered successfully\")}catch(e){console.log(\"Error rendering Bokeh items:\",e)}}}}return a}s(\"embed_items_notebook\",g.embed_items_notebook),s(\"kernels\",g.kernels),s(\"BOKEH_ROOT\",e(396).BOKEH_ROOT),t.embed_item=async function(e,o){const t={},n=_.uuid4();t[n]=e.doc,null==o&&(o=e.target_id);const s=document.getElementById(o);null!=s&&s.classList.add(m.BOKEH_ROOT);const d={roots:{[e.root_id]:o},root_ids:[e.root_id],docid:n};await a.defer();const[r]=await w(t,[d]);return r},t.embed_items=async function(e,o,t,n){return await a.defer(),w(e,o,t,n)}},\n",
" function _(t,_,o,r,n){r();const a=t(1);a.__exportStar(t(6),o),a.__exportStar(t(35),o)},\n",
" function _(e,t,s,o,n){o();const r=e(1),i=e(7),l=e(3),_=e(19),a=e(264),c=e(14),d=e(30),h=e(15),f=e(17),u=e(31),m=e(9),g=e(13),v=r.__importStar(e(132)),w=e(26),p=e(8),b=e(319),y=e(130),k=e(53),M=e(394),j=e(35);class S{constructor(e){this.document=e,this.session=null,this.subscribed_models=new Set}send_event(e){const t=new j.MessageSentEvent(this.document,\"bokeh_event\",e.to_json());this.document._trigger_on_change(t)}trigger(e){for(const t of this.subscribed_models)null!=e.origin&&e.origin!=t||t._process_event(e)}}s.EventManager=S,S.__name__=\"EventManager\",s.documents=[],s.DEFAULT_TITLE=\"Bokeh Application\";class E{constructor(e){var t;s.documents.push(this),this._init_timestamp=Date.now(),this._resolver=null!==(t=null==e?void 0:e.resolver)&&void 0!==t?t:new i.ModelResolver,this._title=s.DEFAULT_TITLE,this._roots=[],this._all_models=new Map,this._all_models_freeze_count=0,this._callbacks=new Map,this._message_callbacks=new Map,this.event_manager=new S(this),this.idle=new h.Signal0(this,\"idle\"),this._idle_roots=new WeakMap,this._interactive_timestamp=null,this._interactive_plot=null}get layoutables(){return this._roots.filter((e=>e instanceof b.LayoutDOM))}get is_idle(){for(const e of this.layoutables)if(!this._idle_roots.has(e))return!1;return!0}notify_idle(e){this._idle_roots.set(e,!0),this.is_idle&&(_.logger.info(`document idle at ${Date.now()-this._init_timestamp} ms`),this.event_manager.send_event(new a.DocumentReady),this.idle.emit())}clear(){this._push_all_models_freeze();try{for(;this._roots.length>0;)this.remove_root(this._roots[0])}finally{this._pop_all_models_freeze()}}interactive_start(e){null==this._interactive_plot&&(this._interactive_plot=e,this._interactive_plot.trigger_event(new a.LODStart)),this._interactive_timestamp=Date.now()}interactive_stop(){null!=this._interactive_plot&&this._interactive_plot.trigger_event(new a.LODEnd),this._interactive_plot=null,this._interactive_timestamp=null}interactive_duration(){return null==this._interactive_timestamp?-1:Date.now()-this._interactive_timestamp}destructively_move(e){if(e===this)throw new Error(\"Attempted to overwrite a document with itself\");e.clear();const t=m.copy(this._roots);this.clear();for(const e of t)if(null!=e.document)throw new Error(`Somehow we didn't detach ${e}`);if(0!=this._all_models.size)throw new Error(`this._all_models still had stuff in it: ${this._all_models}`);for(const s of t)e.add_root(s);e.set_title(this._title)}_push_all_models_freeze(){this._all_models_freeze_count+=1}_pop_all_models_freeze(){this._all_models_freeze_count-=1,0===this._all_models_freeze_count&&this._recompute_all_models()}_invalidate_all_models(){_.logger.debug(\"invalidating document models\"),0===this._all_models_freeze_count&&this._recompute_all_models()}_recompute_all_models(){let e=new Set;for(const t of this._roots)e=v.union(e,t.references());const t=new Set(this._all_models.values()),s=v.difference(t,e),o=v.difference(e,t),n=new Map;for(const t of e)n.set(t.id,t);for(const e of s)e.detach_document();for(const e of o)e.attach_document(this);this._all_models=n}roots(){return this._roots}add_root(e,t){if(_.logger.debug(`Adding root: ${e}`),!m.includes(this._roots,e)){this._push_all_models_freeze();try{this._roots.push(e)}finally{this._pop_all_models_freeze()}this._trigger_on_change(new j.RootAddedEvent(this,e,t))}}remove_root(e,t){const s=this._roots.indexOf(e);if(!(s<0)){this._push_all_models_freeze();try{this._roots.splice(s,1)}finally{this._pop_all_models_freeze()}this._trigger_on_change(new j.RootRemovedEvent(this,e,t))}}title(){return this._title}set_title(e,t){e!==this._title&&(this._title=e,this._trigger_on_change(new j.TitleChangedEvent(this,e,t)))}get_model_by_id(e){var t;return null!==(t=this._all_models.get(e))&&void 0!==t?t:null}get_model_by_name(e){const t=[];for(const s of this._all_models.values())s instanceof k.Model&&s.name==e&&t.push(s);switch(t.length){case 0:return null;case 1:return t[0];default:throw new Error(`Multiple models are named '${e}'`)}}on_message(e,t){const s=this._message_callbacks.get(e);null==s?this._message_callbacks.set(e,new Set([t])):s.add(t)}remove_on_message(e,t){var s;null===(s=this._message_callbacks.get(e))||void 0===s||s.delete(t)}_trigger_on_message(e,t){const s=this._message_callbacks.get(e);if(null!=s)for(const e of s)e(t)}on_change(e,t=!1){this._callbacks.has(e)||this._callbacks.set(e,t)}remove_on_change(e){this._callbacks.delete(e)}_trigger_on_change(e){for(const[t,s]of this._callbacks)if(!s&&e instanceof j.DocumentEventBatch)for(const s of e.events)t(s);else t(e)}_notify_change(e,t,s,o,n){this._trigger_on_change(new j.ModelChangedEvent(this,e,t,s,o,null==n?void 0:n.setter_id,null==n?void 0:n.hint))}static _instantiate_object(e,t,s,o){const n=Object.assign(Object.assign({},s),{id:e,__deferred__:!0});return new(o.get(t))(n)}static _instantiate_references_json(e,t,s){var o;const n=new Map;for(const r of e){const e=r.id,i=r.type,l=null!==(o=r.attributes)&&void 0!==o?o:{};let _=t.get(e);null==_&&(_=E._instantiate_object(e,i,l,s),null!=r.subtype&&_.set_subtype(r.subtype)),n.set(_.id,_)}return n}static _resolve_refs(e,t,s,o){function n(e){var r;if(f.is_ref(e)){const o=null!==(r=t.get(e.id))&&void 0!==r?r:s.get(e.id);if(null!=o)return o;throw new Error(`reference ${JSON.stringify(e)} isn't known (not in Document?)`)}return u.is_NDArray_ref(e)?u.decode_NDArray(e,o):p.isArray(e)?function(e){const t=[];for(const s of e)t.push(n(s));return t}(e):p.isPlainObject(e)?function(e){const t={};for(const[s,o]of g.entries(e))t[s]=n(o);return t}(e):e}return n(e)}static _initialize_references_json(e,t,s,o){const n=new Map;for(const{id:r,attributes:i}of e){const e=!t.has(r),l=e?s.get(r):t.get(r),_=E._resolve_refs(i,t,s,o);l.setv(_,{silent:!0}),n.set(r,{instance:l,is_new:e})}const r=[],i=new Set;function l(e){if(e instanceof c.HasProps){if(n.has(e.id)&&!i.has(e.id)){i.add(e.id);const{instance:t,is_new:s}=n.get(e.id),{attributes:o}=t;for(const e of g.values(o))l(e);s&&(t.finalize(),r.push(t))}}else if(p.isArray(e))for(const t of e)l(t);else if(p.isPlainObject(e))for(const t of g.values(e))l(t)}for(const e of n.values())l(e.instance);for(const e of r)e.connect_signals()}static _event_for_attribute_change(e,t,s,o,n){if(o.get_model_by_id(e.id).property(t).syncable){const r={kind:\"ModelChanged\",model:{id:e.id},attr:t,new:s};return c.HasProps._json_record_references(o,s,n,{recursive:!0}),r}return null}static _events_to_sync_objects(e,t,s,o){const n=Object.keys(e.attributes),r=Object.keys(t.attributes),i=m.difference(n,r),l=m.difference(r,n),a=m.intersection(n,r),c=[];for(const e of i)_.logger.warn(`Server sent key ${e} but we don't seem to have it in our JSON`);for(const n of l){const r=t.attributes[n];c.push(E._event_for_attribute_change(e,n,r,s,o))}for(const n of a){const r=e.attributes[n],i=t.attributes[n];null==r&&null==i||(null==r||null==i?c.push(E._event_for_attribute_change(e,n,i,s,o)):w.is_equal(r,i)||c.push(E._event_for_attribute_change(e,n,i,s,o)))}return c.filter((e=>null!=e))}static _compute_patch_since_json(e,t){const s=t.to_json(!1);function o(e){const t=new Map;for(const s of e.roots.references)t.set(s.id,s);return t}const n=o(e),r=new Map,i=[];for(const t of e.roots.root_ids)r.set(t,n.get(t)),i.push(t);const l=o(s),_=new Map,a=[];for(const e of s.roots.root_ids)_.set(e,l.get(e)),a.push(e);if(i.sort(),a.sort(),m.difference(i,a).length>0||m.difference(a,i).length>0)throw new Error(\"Not implemented: computing add/remove of document roots\");const c=new Set;let h=[];for(const e of t._all_models.keys())if(n.has(e)){const s=E._events_to_sync_objects(n.get(e),l.get(e),t,c);h=h.concat(s)}const f=new d.Serializer({include_defaults:!1});return f.to_serializable([...c]),{references:[...f.definitions],events:h}}to_json_string(e=!0){return JSON.stringify(this.to_json(e))}to_json(e=!0){const t=new d.Serializer({include_defaults:e}),s=t.to_serializable(this._roots);return{version:l.version,title:this._title,roots:{root_ids:s.map((e=>e.id)),references:[...t.definitions]}}}static from_json_string(e){const t=JSON.parse(e);return E.from_json(t)}static from_json(e){_.logger.debug(\"Creating Document from JSON\");const t=e.version,s=-1!==t.indexOf(\"+\")||-1!==t.indexOf(\"-\"),o=`Library versions: JS (${l.version}) / Python (${t})`;s||l.version.replace(/-(dev|rc)\\./,\"$1\")==t?_.logger.debug(o):(_.logger.warn(\"JS/Python version mismatch\"),_.logger.warn(o));const n=new i.ModelResolver;null!=e.defs&&M.resolve_defs(e.defs,n);const r=e.roots,a=r.root_ids,c=r.references,d=E._instantiate_references_json(c,new Map,n);E._initialize_references_json(c,new Map,d,new Map);const h=new E({resolver:n});for(const e of a){const t=d.get(e);null!=t&&h.add_root(t)}return h.set_title(e.title),h}replace_with_json(e){E.from_json(e).destructively_move(this)}create_json_patch_string(e){return JSON.stringify(this.create_json_patch(e))}create_json_patch(e){for(const t of e)if(t.document!=this)throw new Error(\"Cannot create a patch using events from a different document\");const t=new d.Serializer,s=t.to_serializable(e);for(const e of this._all_models.values())t.remove_def(e);return{events:s,references:[...t.definitions]}}apply_json_patch(e,t=new Map,s){const o=e.references,n=e.events,r=E._instantiate_references_json(o,this._all_models,this._resolver);t instanceof Map||(t=new Map(t));for(const e of n)switch(e.kind){case\"RootAdded\":case\"RootRemoved\":case\"ModelChanged\":{const t=e.model.id,s=this._all_models.get(t);if(null!=s)r.set(t,s);else if(!r.has(t))throw _.logger.warn(`Got an event for unknown model ${e.model}\"`),new Error(\"event model wasn't known\");break}}const i=new Map(this._all_models),l=new Map;for(const[e,t]of r)i.has(e)||l.set(e,t);E._initialize_references_json(o,i,l,t);for(const e of n)switch(e.kind){case\"MessageSent\":{const{msg_type:s,msg_data:o}=e;let n;if(void 0===o){if(1!=t.size)throw new Error(\"expected exactly one buffer\");{const[[,e]]=t;n=e}}else n=E._resolve_refs(o,i,l,t);this._trigger_on_message(s,n);break}case\"ModelChanged\":{const o=e.model.id,n=this._all_models.get(o);if(null==n)throw new Error(`Cannot apply patch to ${o} which is not in the document`);const r=e.attr,_=E._resolve_refs(e.new,i,l,t);n.setv({[r]:_},{setter_id:s});break}case\"ColumnDataChanged\":{const o=e.column_source.id,n=this._all_models.get(o);if(null==n)throw new Error(`Cannot stream to ${o} which is not in the document`);const r=E._resolve_refs(e.new,new Map,new Map,t);if(null!=e.cols)for(const e in n.data)e in r||(r[e]=n.data[e]);n.setv({data:r},{setter_id:s,check_eq:!1});break}case\"ColumnsStreamed\":{const t=e.column_source.id,o=this._all_models.get(t);if(null==o)throw new Error(`Cannot stream to ${t} which is not in the document`);if(!(o instanceof y.ColumnDataSource))throw new Error(\"Cannot stream to non-ColumnDataSource\");const n=e.data,r=e.rollover;o.stream(n,r,s);break}case\"ColumnsPatched\":{const t=e.column_source.id,o=this._all_models.get(t);if(null==o)throw new Error(`Cannot patch ${t} which is not in the document`);if(!(o instanceof y.ColumnDataSource))throw new Error(\"Cannot patch non-ColumnDataSource\");const n=e.patches;o.patch(n,s);break}case\"RootAdded\":{const t=e.model.id,o=r.get(t);this.add_root(o,s);break}case\"RootRemoved\":{const t=e.model.id,o=r.get(t);this.remove_root(o,s);break}case\"TitleChanged\":this.set_title(e.title,s);break;default:throw new Error(\"Unknown patch event \"+JSON.stringify(e))}}}s.Document=E,E.__name__=\"Document\"},\n",
" function _(e,o,s,r,t){r();const l=e(1),d=e(8),i=e(13),n=e(14);s.overrides={};const a=new Map;s.Models=e=>{const o=s.Models.get(e);if(null!=o)return o;throw new Error(`Model '${e}' does not exist. This could be due to a widget or a custom model not being registered before first usage.`)},s.Models.get=e=>{var o;return null!==(o=s.overrides[e])&&void 0!==o?o:a.get(e)},s.Models.register=(e,o)=>{s.overrides[e]=o},s.Models.unregister=e=>{delete s.overrides[e]},s.Models.register_models=(e,o=!1,s)=>{var r;if(null!=e)for(const t of d.isArray(e)?e:i.values(e))if(r=t,d.isObject(r)&&r.prototype instanceof n.HasProps){const e=t.__qualified__;o||!a.has(e)?a.set(e,t):null!=s?s(e):console.warn(`Model '${e}' was already registered`)}},s.register_models=s.Models.register_models,s.Models.registered_names=()=>[...a.keys()];class u{constructor(){this._known_models=new Map}get(e,o){var r;const t=null!==(r=s.Models.get(e))&&void 0!==r?r:this._known_models.get(e);if(null!=t)return t;if(void 0!==o)return o;throw new Error(`Model '${e}' does not exist. This could be due to a widget or a custom model not being registered before first usage.`)}register(e){const o=e.__qualified__;null==this.get(o,null)?this._known_models.set(o,e):console.warn(`Model '${o}' was already registered with this resolver`)}}s.ModelResolver=u,u.__name__=\"ModelResolver\";const _=l.__importStar(e(38));s.register_models(_)},\n",
" function _(n,r,t,e,i){e();\n",
" // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n",
" // Underscore may be freely distributed under the MIT license.\n",
" const o=n(9),u=Object.prototype.toString;function c(n){return!0===n||!1===n||\"[object Boolean]\"===u.call(n)}function f(n){return\"[object Number]\"===u.call(n)}function a(n){return\"[object String]\"===u.call(n)}function l(n){const r=typeof n;return\"function\"===r||\"object\"===r&&!!n}function s(n){return l(n)&&void 0!==n[Symbol.iterator]}t.isBoolean=c,t.isNumber=f,t.isInteger=function(n){return f(n)&&Number.isInteger(n)},t.isString=a,t.isPrimitive=function(n){return null===n||c(n)||f(n)||a(n)},t.isFunction=function(n){return\"[object Function]\"===u.call(n)},t.isArray=function(n){return Array.isArray(n)},t.isArrayOf=function(n,r){return o.every(n,r)},t.isArrayableOf=function(n,r){for(let t=0,e=n.length;t<e;t++)if(!r(n[t]))return!1;return!0},t.isTypedArray=function(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)},t.isObject=l,t.isPlainObject=function(n){return l(n)&&(null==n.constructor||n.constructor===Object)},t.isIterable=s,t.isArrayable=function(n){return s(n)&&\"length\"in n}},\n",
" function _(n,t,e,r,o){r();\n",
" // (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n",
" // Underscore may be freely distributed under the MIT license.\n",
" const i=n(10),u=n(11),c=n(12);o(\"map\",c.map),o(\"reduce\",c.reduce),o(\"min\",c.min),o(\"min_by\",c.min_by),o(\"max\",c.max),o(\"max_by\",c.max_by),o(\"sum\",c.sum),o(\"cumsum\",c.cumsum),o(\"every\",c.every),o(\"some\",c.some),o(\"find\",c.find),o(\"find_last\",c.find_last),o(\"find_index\",c.find_index),o(\"find_last_index\",c.find_last_index),o(\"sorted_index\",c.sorted_index),o(\"is_empty\",c.is_empty);const f=Array.prototype.slice;function s(n){return f.call(n)}function a(n){return[].concat(...n)}function l(n,t){return-1!==n.indexOf(t)}function m(n,t,e=1){u.assert(e>0,\"'step' must be a positive number\"),null==t&&(t=n,n=0);const{max:r,ceil:o,abs:i}=Math,c=n<=t?e:-e,f=r(o(i(t-n)/e),0),s=new Array(f);for(let t=0;t<f;t++,n+=c)s[t]=n;return s}e.head=function(n){return n[0]},e.tail=function(n){return n[n.length-1]},e.last=function(n){return n[n.length-1]},e.copy=s,e.concat=a,e.includes=l,e.contains=l,e.nth=function(n,t){return n[t>=0?t:n.length+t]},e.zip=function(...n){if(0==n.length)return[];const t=c.min(n.map((n=>n.length))),e=n.length,r=new Array(t);for(let o=0;o<t;o++){r[o]=new Array(e);for(let t=0;t<e;t++)r[o][t]=n[t][o]}return r},e.unzip=function(n){const t=n.length,e=c.min(n.map((n=>n.length))),r=Array(e);for(let n=0;n<e;n++)r[n]=new Array(t);for(let o=0;o<t;o++)for(let t=0;t<e;t++)r[t][o]=n[o][t];return r},e.range=m,e.linspace=function(n,t,e=100){const r=(t-n)/(e-1),o=new Array(e);for(let t=0;t<e;t++)o[t]=n+r*t;return o},e.transpose=function(n){const t=n.length,e=n[0].length,r=[];for(let o=0;o<e;o++){r[o]=[];for(let e=0;e<t;e++)r[o][e]=n[e][o]}return r},e.argmin=function(n){return c.min_by(m(n.length),(t=>n[t]))},e.argmax=function(n){return c.max_by(m(n.length),(t=>n[t]))},e.sort_by=function(n,t){const e=n.map(((n,e)=>({value:n,index:e,key:t(n)})));return e.sort(((n,t)=>{const e=n.key,r=t.key;if(e!==r){if(e>r||void 0===e)return 1;if(e<r||void 0===r)return-1}return n.index-t.index})),e.map((n=>n.value))},e.uniq=function(n){const t=new Set;for(const e of n)t.add(e);return[...t]},e.uniq_by=function(n,t){const e=[],r=[];for(const o of n){const n=t(o);l(r,n)||(r.push(n),e.push(o))}return e},e.union=function(...n){const t=new Set;for(const e of n)for(const n of e)t.add(n);return[...t]},e.intersection=function(n,...t){const e=[];n:for(const r of n)if(!l(e,r)){for(const n of t)if(!l(n,r))continue n;e.push(r)}return e},e.difference=function(n,...t){const e=a(t);return n.filter((n=>!l(e,n)))},e.remove_at=function(n,t){const e=s(n);return e.splice(t,1),e},e.remove_by=function(n,t){for(let e=0;e<n.length;)t(n[e])?n.splice(e,1):e++},e.shuffle=function(n){const t=n.length,e=new Array(t);for(let r=0;r<t;r++){const t=i.randomIn(0,r);t!==r&&(e[r]=e[t]),e[t]=n[r]}return e},e.pairwise=function(n,t){const e=n.length,r=new Array(e-1);for(let o=0;o<e-1;o++)r[o]=t(n[o],n[o+1]);return r},e.reversed=function(n){const t=n.length,e=new Array(t);for(let r=0;r<t;r++)e[t-r-1]=n[r];return e},e.repeat=function(n,t){const e=new Array(t);for(let r=0;r<t;r++)e[r]=n;return e}},\n",
" function _(n,r,t,e,o){e();const{PI:u}=Math;function a(n){if(0==n)return 0;for(;n<=0;)n+=2*u;for(;n>2*u;)n-=2*u;return n}function c(n,r){return a(n-r)}function f(){return Math.random()}function i(n){switch(n){case\"deg\":return u/180;case\"rad\":return 1;case\"grad\":return u/200;case\"turn\":return 2*u}}t.angle_norm=a,t.angle_dist=c,t.angle_between=function(n,r,t,e=!1){const o=c(r,t);if(0==o)return!1;if(o==2*u)return!0;const f=a(n),i=c(r,f)<=o&&c(f,t)<=o;return e?!i:i},t.random=f,t.randomIn=function(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))},t.atan2=function(n,r){return Math.atan2(r[1]-n[1],r[0]-n[0])},t.radians=function(n){return n*(u/180)},t.degrees=function(n){return n/(u/180)},t.resolve_angle=function(n,r){return-i(r)*n},t.to_radians_coeff=i,t.rnorm=function(n,r){let t,e;for(;t=f(),e=f(),e=(2*e-1)*Math.sqrt(1/Math.E*2),!(-4*t*t*Math.log(t)>=e*e););let o=e/t;return o=n+r*o,o},t.clamp=function(n,r,t){return n<r?r:n>t?t:n},t.log=function(n,r=Math.E){return Math.log(n)/Math.log(r)}},\n",
" function _(r,n,e,o,s){o();class t extends Error{}e.AssertionError=t,t.__name__=\"AssertionError\",e.assert=function(r,n){if(!(!0===r||!1!==r&&r()))throw new t(null!=n?n:\"Assertion failed\")},e.unreachable=function(){throw new Error(\"unreachable code\")}},\n",
" function _(n,t,e,r,o){r();const i=n(10);function l(n,t,e,...r){const o=n.length;t<0&&(t+=o),t<0?t=0:t>o&&(t=o),null==e||e>o-t?e=o-t:e<0&&(e=0);const i=o-e+r.length,l=new n.constructor(i);let u=0;for(;u<t;u++)l[u]=n[u];for(const n of r)l[u++]=n;for(let r=t+e;r<o;r++)l[u++]=n[r];return l}function u(n,t){return l(n,t,n.length-t)}function c(n,t){const e=n.length,r=new n.constructor(e);for(let o=0;o<e;o++)r[o]=t(n[o],o,n);return r}function f(n,t,e){const r=n.length;if(void 0===e&&0==r)throw new Error(\"can't reduce an empty array without an initial value\");let o,i;for(void 0===e?(o=n[0],i=1):(o=e,i=0);i<r;i++)o=t(o,n[i],i,n);return o}function s(n){return function(t,e){const r=t.length;let o=n>0?0:r-1;for(;o>=0&&o<r;o+=n)if(e(t[o]))return o;return-1}}function h(n,t){let e=0,r=n.length;for(;e<r;){const o=Math.floor((e+r)/2);n[o]<t?e=o+1:r=o}return e}function a(n,t,e,r,o){const i=(o-e)/(r-t);let l=i*(n-t)+e;return isFinite(l)||(l=i*(n-r)+o,isFinite(l)||e!=o||(l=e)),l}function g(n,t){if(n<t[0])return-1;if(n>t[t.length-1])return t.length;let e=0,r=t.length-1;for(;r-e!=1;){const o=e+Math.floor((r-e)/2);n>=t[o]?e=o:r=o}return e}e.is_empty=function(n){return 0==n.length},e.copy=function(n){return Array.isArray(n)?n.slice():new n.constructor(n)},e.splice=l,e.head=u,e.insert=function(n,t,e){return l(n,e,0,t)},e.append=function(n,t){return l(n,n.length,0,t)},e.prepend=function(n,t){return l(n,0,0,t)},e.indexOf=function(n,t){for(let e=0,r=n.length;e<r;e++)if(n[e]===t)return e;return-1},e.subselect=function(n,t){const e=t.length,r=new n.constructor(e);for(let o=0;o<e;o++)r[o]=n[t[o]];return r},e.mul=function(n,t,e){const r=n.length,o=null!=e?e:new n.constructor(r);for(let e=0;e<r;e++)o[e]=n[e]*t;return o},e.map=c,e.inplace_map=function(n,t,e){const r=n.length,o=null!=e?e:n;for(let e=0;e<r;e++)o[e]=t(n[e],e)},e.filter=function(n,t){const e=n.length,r=new n.constructor(e);let o=0;for(let i=0;i<e;i++){const e=n[i];t(e,i,n)&&(r[o++]=e)}return u(r,o)},e.reduce=f,e.min=function(n){let t,e=1/0;for(let r=0,o=n.length;r<o;r++)t=n[r],!isNaN(t)&&t<e&&(e=t);return e},e.max=function(n){let t,e=-1/0;for(let r=0,o=n.length;r<o;r++)t=n[r],!isNaN(t)&&t>e&&(e=t);return e},e.minmax=function(n){let t,e=1/0,r=-1/0;for(let o=0,i=n.length;o<i;o++)t=n[o],isNaN(t)||(t<e&&(e=t),t>r&&(r=t));return[e,r]},e.min_by=function(n,t){if(0==n.length)throw new Error(\"min_by() called with an empty array\");let e=n[0],r=t(e);for(let o=1,i=n.length;o<i;o++){const i=n[o],l=t(i);l<r&&(e=i,r=l)}return e},e.max_by=function(n,t){if(0==n.length)throw new Error(\"max_by() called with an empty array\");let e=n[0],r=t(e);for(let o=1,i=n.length;o<i;o++){const i=n[o],l=t(i);l>r&&(e=i,r=l)}return e},e.sum=function(n){let t=0;for(let e=0,r=n.length;e<r;e++)t+=n[e];return t},e.cumsum=function(n){const t=new n.constructor(n.length);return f(n,((n,e,r)=>t[r]=n+e),0),t},e.every=function(n,t){for(let e=0,r=n.length;e<r;e++)if(!t(n[e]))return!1;return!0},e.some=function(n,t){for(let e=0,r=n.length;e<r;e++)if(t(n[e]))return!0;return!1},e.index_of=function(n,t){for(let e=0,r=n.length;e<r;e++)if(n[e]===t)return e;return-1},e.find_index=s(1),e.find_last_index=s(-1),e.find=function(n,t){const r=e.find_index(n,t);return-1==r?void 0:n[r]},e.find_last=function(n,t){const r=e.find_last_index(n,t);return-1==r?void 0:n[r]},e.sorted_index=h,e.bin_counts=function(n,t){const e=t.length-1,r=Array(e).fill(0);for(let o=0;o<n.length;o++){const l=h(t,n[o]);r[i.clamp(l-1,0,e-1)]+=1}return r},e.interpolate=function(n,t,e){const r=n.length,o=new Array(r);for(let i=0;i<r;i++){const r=n[i];if(isNaN(r)){o[i]=r;continue}const l=g(r,t);if(-1==l)o[i]=e[0];else if(l==t.length)o[i]=e[e.length-1];else if(l==t.length-1||t[l]==r)o[i]=e[l];else{const n=t[l],u=e[l],c=t[l+1],f=e[l+1];o[i]=a(r,n,u,c,f)}}return o},e.left_edge_index=g,e.norm=function(n,t,e){const r=e-t;return c(n,(n=>(n-t)/r))}},\n",
" function _(t,e,n,c,o){c();const s=t(9),{hasOwnProperty:r}=Object.prototype;function u(t){return Object.keys(t).length}n.keys=Object.keys,n.values=Object.values,n.entries=Object.entries,n.extend=Object.assign,n.clone=function(t){return Object.assign({},t)},n.merge=function(t,e){const n=Object.create(Object.prototype),c=s.concat([Object.keys(t),Object.keys(e)]);for(const o of c){const c=r.call(t,o)?t[o]:[],u=r.call(e,o)?e[o]:[];n[o]=s.union(c,u)}return n},n.size=u,n.isEmpty=function(t){return 0==u(t)},n.to_object=function(t){const e={};for(const[n,c]of t)e[n]=c;return e}},\n",
" function _(t,e,s,n,r){n();const i=t(1),o=t(15),c=t(17),a=i.__importStar(t(18)),_=i.__importStar(t(21)),h=t(34),u=t(13),l=t(8),f=t(26),p=t(30),d=t(35),g=t(26),y=t(36),v=t(37),m=i.__importStar(t(21));class b extends(o.Signalable()){constructor(t={}){var e,s;super(),this._subtype=void 0,this.document=null,this.destroyed=new o.Signal0(this,\"destroyed\"),this.change=new o.Signal0(this,\"change\"),this.transformchange=new o.Signal0(this,\"transformchange\"),this.exprchange=new o.Signal0(this,\"exprchange\"),this.properties={},this._pending=!1,this._changing=!1;const n=t instanceof Map?t.get.bind(t):e=>t[e];this.id=null!==(e=n(\"id\"))&&void 0!==e?e:h.uniqueId();for(const[t,{type:e,default_value:s,options:r}]of u.entries(this._props)){let i;e instanceof a.PropertyAlias?Object.defineProperty(this.properties,t,{get:()=>this.properties[e.attr],configurable:!1,enumerable:!1}):(i=e instanceof _.Kind?new a.PrimitiveProperty(this,t,e,s,n(t),r):new e(this,t,_.Any,s,n(t),r),this.properties[t]=i)}null!==(s=n(\"__deferred__\"))&&void 0!==s&&s||(this.finalize(),this.connect_signals())}get is_syncable(){return!0}set type(t){console.warn(\"prototype.type = 'ModelName' is deprecated, use static __name__ instead\"),this.constructor.__name__=t}get type(){return this.constructor.__qualified__}static get __qualified__(){const{__module__:t,__name__:e}=this;return null!=t?`${t}.${e}`:e}static get[Symbol.toStringTag](){return this.__name__}static init_HasProps(){this.prototype._props={},this.prototype._mixins=[]}static _fix_default(t,e){if(void 0===t||l.isFunction(t))return t;if(l.isPrimitive(t))return()=>t;{const e=new v.Cloner;return()=>e.clone(t)}}static define(t){for(const[e,s]of u.entries(l.isFunction(t)?t(m):t)){if(null!=this.prototype._props[e])throw new Error(`attempted to redefine property '${this.prototype.type}.${e}'`);if(null!=this.prototype[e])throw new Error(`attempted to redefine attribute '${this.prototype.type}.${e}'`);Object.defineProperty(this.prototype,e,{get(){return this.properties[e].get_value()},set(t){return this.setv({[e]:t}),this},configurable:!1,enumerable:!0});const[t,n,r={}]=s,i={type:t,default_value:this._fix_default(n,e),options:r},o=Object.assign({},this.prototype._props);o[e]=i,this.prototype._props=o}}static internal(t){const e={};for(const[s,n]of u.entries(l.isFunction(t)?t(m):t)){const[t,r,i={}]=n;e[s]=[t,r,Object.assign(Object.assign({},i),{internal:!0})]}this.define(e)}static mixins(t){function e(t,e){const s={};for(const[n,r]of u.entries(e))s[t+n]=r;return s}const s={},n=[];for(const r of l.isArray(t)?t:[t])if(l.isArray(r)){const[t,i]=r;u.extend(s,e(t,i)),n.push([t,i])}else{const t=r;u.extend(s,t),n.push([\"\",t])}this.define(s),this.prototype._mixins=[...this.prototype._mixins,...n]}static override(t){for(const[e,s]of u.entries(t)){const t=this._fix_default(s,e),n=this.prototype._props[e];if(null==n)throw new Error(`attempted to override nonexistent '${this.prototype.type}.${e}'`);const r=Object.assign({},this.prototype._props);r[e]=Object.assign(Object.assign({},n),{default_value:t}),this.prototype._props=r}}toString(){return`${this.type}(${this.id})`}property(t){const e=this.properties[t];if(null!=e)return e;throw new Error(`unknown property ${this.type}.${t}`)}get attributes(){const t={};for(const e of this)t[e.attr]=e.get_value();return t}[v.clone](t){const e=new Map;for(const s of this)s.dirty&&e.set(s.attr,t.clone(s.get_value()));return new this.constructor(e)}[g.equals](t,e){for(const s of this){const n=t.property(s.attr);if(e.eq(s.get_value(),n.get_value()))return!1}return!0}[y.pretty](t){const e=t.token,s=[];for(const n of this)if(n.dirty){const r=n.get_value();s.push(`${n.attr}${e(\":\")} ${t.to_string(r)}`)}return`${this.constructor.__qualified__}${e(\"(\")}${e(\"{\")}${s.join(`${e(\",\")} `)}${e(\"}\")}${e(\")\")}`}[p.serialize](t){const e=this.ref();t.add_ref(this,e);const s=this.struct();for(const e of this)e.syncable&&(t.include_defaults||e.dirty)&&(s.attributes[e.attr]=t.to_serializable(e.get_value()));return t.add_def(this,s),e}finalize(){for(const t of this){if(!(t instanceof a.VectorSpec||t instanceof a.ScalarSpec))continue;const e=t.get_value();if(null!=e){const{transform:t,expr:s}=e;null!=t&&this.connect(t.change,(()=>this.transformchange.emit())),null!=s&&this.connect(s.change,(()=>this.exprchange.emit()))}}this.initialize()}initialize(){}connect_signals(){}disconnect_signals(){o.Signal.disconnectReceiver(this)}destroy(){this.disconnect_signals(),this.destroyed.emit()}clone(){return(new v.Cloner).clone(this)}_setv(t,e){const s=e.check_eq,n=[],r=this._changing;this._changing=!0;for(const[e,r]of t)!1!==s&&f.is_equal(e.get_value(),r)||(e.set_value(r),n.push(e));n.length>0&&(this._pending=!0);for(const t of n)t.change.emit();if(!r){if(!e.no_change)for(;this._pending;)this._pending=!1,this.change.emit();this._pending=!1,this._changing=!1}}setv(t,e={}){const s=u.entries(t);if(0==s.length)return;if(!0===e.silent){for(const[t,e]of s)this.properties[t].set_value(e);return}const n=new Map,r=new Map;for(const[t,e]of s){const s=this.properties[t];n.set(s,e),r.set(s,s.get_value())}this._setv(n,e);const{document:i}=this;if(null!=i){const t=[];for(const[e,s]of r)t.push([e,s,e.get_value()]);for(const[,e,s]of t)if(this._needs_invalidate(e,s)){i._invalidate_all_models();break}this._push_changes(t,e)}}getv(t){return this.property(t).get_value()}ref(){return{id:this.id}}struct(){const t={type:this.type,id:this.id,attributes:{}};return null!=this._subtype&&(t.subtype=this._subtype),t}set_subtype(t){this._subtype=t}*[Symbol.iterator](){yield*u.values(this.properties)}*syncable_properties(){for(const t of this)t.syncable&&(yield t)}serializable_attributes(){const t={};for(const e of this.syncable_properties())t[e.attr]=e.get_value();return t}static _json_record_references(t,e,s,n){const{recursive:r}=n;if(c.is_ref(e)){const n=t.get_model_by_id(e.id);null==n||s.has(n)||b._value_record_references(n,s,{recursive:r})}else if(l.isArray(e))for(const n of e)b._json_record_references(t,n,s,{recursive:r});else if(l.isPlainObject(e))for(const n of u.values(e))b._json_record_references(t,n,s,{recursive:r})}static _value_record_references(t,e,s){const{recursive:n}=s;if(t instanceof b){if(!e.has(t)&&(e.add(t),n))for(const s of t.syncable_properties()){const t=s.get_value();b._value_record_references(t,e,{recursive:n})}}else if(l.isArray(t))for(const s of t)b._value_record_references(s,e,{recursive:n});else if(l.isPlainObject(t))for(const s of u.values(t))b._value_record_references(s,e,{recursive:n})}references(){const t=new Set;return b._value_record_references(this,t,{recursive:!0}),t}_doc_attached(){}_doc_detached(){}attach_document(t){if(null!=this.document&&this.document!=t)throw new Error(\"models must be owned by only a single document\");this.document=t,this._doc_attached()}detach_document(){this._doc_detached(),this.document=null}_needs_invalidate(t,e){const s=new Set;b._value_record_references(e,s,{recursive:!1});const n=new Set;b._value_record_references(t,n,{recursive:!1});for(const t of s)if(!n.has(t))return!0;for(const t of n)if(!s.has(t))return!0;return!1}_push_changes(t,e={}){if(!this.is_syncable)return;const{document:s}=this;if(null==s)return;const{setter_id:n}=e,r=[];for(const[e,i,o]of t)e.syncable&&r.push(new d.ModelChangedEvent(s,this,e.attr,i,o,n));if(0!=r.length){let t;1==r.length?[t]=r:t=new d.DocumentEventBatch(s,r,n),s._trigger_on_change(t)}}on_change(t,e){for(const s of l.isArray(t)?t:[t])this.connect(s.change,e)}}s.HasProps=b,b.init_HasProps()},\n",
" function _(n,t,e,l,s){l();const i=n(16),o=n(9);class c{constructor(n,t){this.sender=n,this.name=t}connect(n,t=null){u.has(this.sender)||u.set(this.sender,[]);const e=u.get(this.sender);if(null!=g(e,this,n,t))return!1;const l=null!=t?t:n;a.has(l)||a.set(l,[]);const s=a.get(l),i={signal:this,slot:n,context:t};return e.push(i),s.push(i),!0}disconnect(n,t=null){const e=u.get(this.sender);if(null==e||0===e.length)return!1;const l=g(e,this,n,t);if(null==l)return!1;const s=null!=t?t:n,i=a.get(s);return l.signal=null,d(e),d(i),!0}emit(n){var t;const e=null!==(t=u.get(this.sender))&&void 0!==t?t:[];for(const{signal:t,slot:l,context:s}of e)t===this&&l.call(s,n,this.sender)}}e.Signal=c,c.__name__=\"Signal\";class r extends c{emit(){super.emit(void 0)}}e.Signal0=r,r.__name__=\"Signal0\",function(n){function t(n,t){const e=u.get(n);if(null==e||0===e.length)return;const l=a.get(t);if(null!=l&&0!==l.length){for(const t of l){if(null==t.signal)return;t.signal.sender===n&&(t.signal=null)}d(e),d(l)}}function e(n){var t;const e=u.get(n);if(null!=e&&0!==e.length){for(const n of e){if(null==n.signal)return;const e=null!==(t=n.context)&&void 0!==t?t:n.slot;n.signal=null,d(a.get(e))}d(e)}}function l(n,t,e){const l=a.get(n);if(null!=l&&0!==l.length){for(const n of l){if(null==n.signal)return;if(null!=t&&n.slot!=t)continue;const l=n.signal.sender;null!=e&&e.has(l)||(n.signal=null,d(u.get(l)))}d(l)}}function s(n){const t=u.get(n);if(null!=t&&0!==t.length){for(const n of t)n.signal=null;d(t)}const e=a.get(n);if(null!=e&&0!==e.length){for(const n of e)n.signal=null;d(e)}}n.disconnect_between=t,n.disconnect_sender=e,n.disconnect_receiver=l,n.disconnect_all=s,n.disconnectBetween=t,n.disconnectSender=e,n.disconnectReceiver=l,n.disconnectAll=s}(c||(e.Signal=c={})),e.Signalable=function(){return class{connect(n,t){return n.connect(t,this)}disconnect(n,t){return n.disconnect(t,this)}}};const u=new WeakMap,a=new WeakMap;function g(n,t,e,l){return o.find(n,(n=>n.signal===t&&n.slot===e&&n.context===l))}const f=new Set;function d(n){0===f.size&&(async()=>{await i.defer(),function(){for(const n of f)o.remove_by(n,(n=>null==n.signal));f.clear()}()})(),f.add(n)}},\n",
" function _(e,n,t,s,o){s();const a=new MessageChannel,l=new Map;a.port1.onmessage=e=>{const n=e.data,t=l.get(n);if(null!=t)try{t()}finally{l.delete(n)}};let r=1;t.defer=function(){return new Promise((e=>{const n=r++;l.set(n,e),a.port2.postMessage(n)}))}},\n",
" function _(n,t,i,e,c){e();const r=n(8),s=n(13);i.is_ref=function(n){if(r.isPlainObject(n)){const t=s.keys(n);return 1==t.length&&\"id\"==t[0]}return!1}},\n",
" function _(e,t,n,a,r){a(),n.YCoordinateSeqSeqSeqSpec=n.XCoordinateSeqSeqSeqSpec=n.YCoordinateSeqSpec=n.XCoordinateSeqSpec=n.YCoordinateSpec=n.XCoordinateSpec=n.CoordinateSeqSeqSeqSpec=n.CoordinateSeqSpec=n.CoordinateSpec=n.BaseCoordinateSpec=n.NumberUnitsSpec=n.UnitsSpec=n.DataSpec=n.VectorSpec=n.TextBaselineScalar=n.TextAlignScalar=n.FontStyleScalar=n.FontSizeScalar=n.FontScalar=n.LineDashScalar=n.LineCapScalar=n.LineJoinScalar=n.ArrayScalar=n.NullStringScalar=n.StringScalar=n.NumberScalar=n.ColorScalar=n.AnyScalar=n.ScalarSpec=n.VerticalAlign=n.UpdateMode=n.TooltipAttachment=n.TickLabelOrientation=n.TextureRepetition=n.TextBaseline=n.TextAlign=n.TapBehavior=n.StepMode=n.StartEnd=n.SpatialUnits=n.Sort=n.SizingMode=n.Side=n.RoundingFunction=n.ResetPolicy=n.RenderMode=n.RenderLevel=n.RadiusDimension=n.PointPolicy=n.Place=void 0,n.TextBaselineSpec=n.TextAlignSpec=n.FontStyleSpec=n.FontSizeSpec=n.FontSpec=n.LineDashSpec=n.LineCapSpec=n.LineJoinSpec=n.MarkerSpec=n.ArraySpec=n.NullStringSpec=n.StringSpec=n.AnySpec=n.NDArraySpec=n.ColorSpec=n.NumberSpec=n.BooleanSpec=n.ScreenDistanceSpec=n.NullDistanceSpec=n.DistanceSpec=n.AngleSpec=void 0;const i=e(1),s=e(15),l=e(19),o=i.__importStar(e(20)),c=e(24),_=e(9),u=e(12),d=e(10),S=e(22),p=e(27),m=e(8),h=e(28),v=e(29),y=e(33);function x(e){try{return JSON.stringify(e)}catch(t){return e.toString()}}function g(e){return m.isPlainObject(e)&&(void 0===e.value?0:1)+(void 0===e.field?0:1)+(void 0===e.expr?0:1)==1}r(\"Uniform\",y.Uniform),r(\"UniformScalar\",y.UniformScalar),r(\"UniformVector\",y.UniformVector),n.isSpec=g;class f{constructor(e,t,n,a,r,i={}){var l;let o;if(this.obj=e,this.attr=t,this.kind=n,this.default_value=a,this._dirty=!1,this.change=new s.Signal0(this.obj,\"change\"),this.internal=null!==(l=i.internal)&&void 0!==l&&l,this.on_update=i.on_update,void 0!==r)o=r,this._dirty=!0;else{const t=this._default_override();if(void 0!==t)o=t;else{if(void 0===a)return void(this.spec={value:null});o=a(e)}}this._update(o)}get is_value(){return void 0!==this.spec.value}get syncable(){return!this.internal}get_value(){return this.spec.value}set_value(e){this._update(e),this._dirty=!0}_default_override(){}get dirty(){return this._dirty}_update(e){var t;this.validate(e),this.spec={value:e},null===(t=this.on_update)||void 0===t||t.call(this,e,this.obj)}toString(){return`Prop(${this.obj}.${this.attr}, spec: ${x(this.spec)})`}normalize(e){return e}validate(e){if(!this.valid(e))throw new Error(`${this.obj}.${this.attr} given invalid value: ${x(e)}`)}valid(e){return this.kind.valid(e)}_value(e=!0){if(!this.is_value)throw new Error(\"attempted to retrieve property value for property without value specification\");let t=this.normalize([this.spec.value])[0];return null!=this.spec.transform&&e&&(t=this.spec.transform.compute(t)),t}}n.Property=f,f.__name__=\"Property\";class A{constructor(e){this.attr=e}}n.PropertyAlias=A,A.__name__=\"PropertyAlias\",n.Alias=function(e){return new A(e)};class C extends f{}n.PrimitiveProperty=C,C.__name__=\"PrimitiveProperty\";class L extends f{}n.Any=L,L.__name__=\"Any\";class T extends f{valid(e){return m.isArray(e)||m.isTypedArray(e)}}n.Array=T,T.__name__=\"Array\";class P extends f{valid(e){return m.isBoolean(e)}}n.Boolean=P,P.__name__=\"Boolean\";class b extends f{valid(e){return S.is_Color(e)}}n.Color=b,b.__name__=\"Color\";class w extends f{}n.Instance=w,w.__name__=\"Instance\";class q extends f{valid(e){return m.isNumber(e)}}n.Number=q,q.__name__=\"Number\";class N extends q{valid(e){return m.isNumber(e)&&(0|e)==e}}n.Int=N,N.__name__=\"Int\";class B extends q{}n.Angle=B,B.__name__=\"Angle\";class D extends q{valid(e){return m.isNumber(e)&&0<=e&&e<=1}}n.Percent=D,D.__name__=\"Percent\";class F extends f{valid(e){return m.isString(e)}}n.String=F,F.__name__=\"String\";class z extends f{valid(e){return null===e||m.isString(e)}}n.NullString=z,z.__name__=\"NullString\";class U extends F{}n.FontSize=U,U.__name__=\"FontSize\";class M extends F{_default_override(){return h.settings.dev?\"Bokeh\":void 0}}n.Font=M,M.__name__=\"Font\";class R extends f{valid(e){return m.isString(e)&&_.includes(this.enum_values,e)}}function k(e){return class extends R{get enum_values(){return[...e]}}}n.EnumProperty=R,R.__name__=\"EnumProperty\",n.Enum=k;class O extends R{get enum_values(){return[...o.Direction]}normalize(e){const t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)switch(e[n]){case\"clock\":t[n]=0;break;case\"anticlock\":t[n]=1}return t}}n.Direction=O,O.__name__=\"Direction\",n.Anchor=k(o.Anchor),n.AngleUnits=k(o.AngleUnits),n.BoxOrigin=k(o.BoxOrigin),n.ButtonType=k(o.ButtonType),n.CalendarPosition=k(o.CalendarPosition),n.Dimension=k(o.Dimension),n.Dimensions=k(o.Dimensions),n.Distribution=k(o.Distribution),n.FontStyle=k(o.FontStyle),n.HatchPatternType=k(o.HatchPatternType),n.HTTPMethod=k(o.HTTPMethod),n.HexTileOrientation=k(o.HexTileOrientation),n.HoverMode=k(o.HoverMode),n.LatLon=k(o.LatLon),n.LegendClickPolicy=k(o.LegendClickPolicy),n.LegendLocation=k(o.LegendLocation),n.LineCap=k(o.LineCap),n.LineJoin=k(o.LineJoin),n.LinePolicy=k(o.LinePolicy),n.Location=k(o.Location),n.Logo=k(o.Logo),n.MarkerType=k(o.MarkerType),n.MutedPolicy=k(o.MutedPolicy),n.Orientation=k(o.Orientation),n.OutputBackend=k(o.OutputBackend),n.PaddingUnits=k(o.PaddingUnits),n.Place=k(o.Place),n.PointPolicy=k(o.PointPolicy),n.RadiusDimension=k(o.RadiusDimension),n.RenderLevel=k(o.RenderLevel),n.RenderMode=k(o.RenderMode),n.ResetPolicy=k(o.ResetPolicy),n.RoundingFunction=k(o.RoundingFunction),n.Side=k(o.Side),n.SizingMode=k(o.SizingMode),n.Sort=k(o.Sort),n.SpatialUnits=k(o.SpatialUnits),n.StartEnd=k(o.StartEnd),n.StepMode=k(o.StepMode),n.TapBehavior=k(o.TapBehavior),n.TextAlign=k(o.TextAlign),n.TextBaseline=k(o.TextBaseline),n.TextureRepetition=k(o.TextureRepetition),n.TickLabelOrientation=k(o.TickLabelOrientation),n.TooltipAttachment=k(o.TooltipAttachment),n.UpdateMode=k(o.UpdateMode),n.VerticalAlign=k(o.VerticalAlign);class E extends f{get_value(){const{value:e,expr:t,transform:n}=this.spec;return null!=t||null!=n?this.spec:e}_update(e){g(e)?this.spec=e:this.spec={value:e},null!=this.spec.value&&this.validate(this.spec.value)}materialize(e){return e}scalar(e,t){return new y.UniformScalar(e,t)}uniform(e){var t;const{expr:n,value:a,transform:r}=this.spec,i=null!==(t=e.get_length())&&void 0!==t?t:1;if(null!=n){let t=n.compute(e);return null!=r&&(t=r.compute(t)),t=this.materialize(t),this.scalar(t,i)}{let e=a;return null!=r&&(e=r.compute(e)),e=this.materialize(e),this.scalar(e,i)}}}n.ScalarSpec=E,E.__name__=\"ScalarSpec\";class V extends E{}n.AnyScalar=V,V.__name__=\"AnyScalar\";class $ extends E{}n.ColorScalar=$,$.__name__=\"ColorScalar\";class J extends E{}n.NumberScalar=J,J.__name__=\"NumberScalar\";class X extends E{}n.StringScalar=X,X.__name__=\"StringScalar\";class Y extends E{}n.NullStringScalar=Y,Y.__name__=\"NullStringScalar\";class H extends E{}n.ArrayScalar=H,H.__name__=\"ArrayScalar\";class j extends E{}n.LineJoinScalar=j,j.__name__=\"LineJoinScalar\";class G extends E{}n.LineCapScalar=G,G.__name__=\"LineCapScalar\";class I extends E{}n.LineDashScalar=I,I.__name__=\"LineDashScalar\";class K extends E{_default_override(){return h.settings.dev?\"Bokeh\":void 0}}n.FontScalar=K,K.__name__=\"FontScalar\";class Q extends E{}n.FontSizeScalar=Q,Q.__name__=\"FontSizeScalar\";class W extends E{}n.FontStyleScalar=W,W.__name__=\"FontStyleScalar\";class Z extends E{}n.TextAlignScalar=Z,Z.__name__=\"TextAlignScalar\";class ee extends E{}n.TextBaselineScalar=ee,ee.__name__=\"TextBaselineScalar\";class te extends f{get_value(){return null===this.spec.value?null:this.spec}_update(e){g(e)?this.spec=e:this.spec={value:e},null!=this.spec.value&&this.validate(this.spec.value)}materialize(e){return e}v_materialize(e){return e}scalar(e,t){return new y.UniformScalar(e,t)}vector(e){return new y.UniformVector(e)}uniform(e){var t;const{field:n,expr:a,value:r,transform:i}=this.spec,s=null!==(t=e.get_length())&&void 0!==t?t:1;if(null!=n){let t=e.get_column(n);return null!=t?(null!=i&&(t=i.v_compute(t)),t=this.v_materialize(t),this.vector(t)):(l.logger.warn(`attempted to retrieve property array for nonexistent field '${n}'`),this.scalar(null,s))}if(null!=a){let t=a.v_compute(e);return null!=i&&(t=i.v_compute(t)),t=this.v_materialize(t),this.vector(t)}{let e=r;return null!=i&&(e=i.compute(e)),e=this.materialize(e),this.scalar(e,s)}}array(e){var t;let n;const a=null!==(t=e.get_length())&&void 0!==t?t:1;if(null!=this.spec.field){const t=e.get_column(this.spec.field);if(null!=t)n=this.normalize(t);else{l.logger.warn(`attempted to retrieve property array for nonexistent field '${this.spec.field}'`);const e=new Float64Array(a);e.fill(NaN),n=e}}else if(null!=this.spec.expr)n=this.normalize(this.spec.expr.v_compute(e));else{const e=this._value(!1);if(m.isNumber(e)){const t=new Float64Array(a);t.fill(e),n=t}else n=_.repeat(e,a)}return null!=this.spec.transform&&(n=this.spec.transform.v_compute(n)),n}}n.VectorSpec=te,te.__name__=\"VectorSpec\";class ne extends te{}n.DataSpec=ne,ne.__name__=\"DataSpec\";class ae extends te{_update(e){super._update(e);const{units:t}=this.spec;if(null!=t&&!_.includes(this.valid_units,t))throw new Error(`units must be one of ${this.valid_units.join(\", \")}; got: ${t}`)}get units(){var e;return null!==(e=this.spec.units)&&void 0!==e?e:this.default_units}set units(e){e!=this.default_units?this.spec.units=e:delete this.spec.units}}n.UnitsSpec=ae,ae.__name__=\"UnitsSpec\";class re extends ae{array(e){return new Float64Array(super.array(e))}}n.NumberUnitsSpec=re,re.__name__=\"NumberUnitsSpec\";class ie extends ne{}n.BaseCoordinateSpec=ie,ie.__name__=\"BaseCoordinateSpec\";class se extends ie{}n.CoordinateSpec=se,se.__name__=\"CoordinateSpec\";class le extends ie{}n.CoordinateSeqSpec=le,le.__name__=\"CoordinateSeqSpec\";class oe extends ie{}n.CoordinateSeqSeqSeqSpec=oe,oe.__name__=\"CoordinateSeqSeqSeqSpec\";class ce extends se{constructor(){super(...arguments),this.dimension=\"x\"}}n.XCoordinateSpec=ce,ce.__name__=\"XCoordinateSpec\";class _e extends se{constructor(){super(...arguments),this.dimension=\"y\"}}n.YCoordinateSpec=_e,_e.__name__=\"YCoordinateSpec\";class ue extends le{constructor(){super(...arguments),this.dimension=\"x\"}}n.XCoordinateSeqSpec=ue,ue.__name__=\"XCoordinateSeqSpec\";class de extends le{constructor(){super(...arguments),this.dimension=\"y\"}}n.YCoordinateSeqSpec=de,de.__name__=\"YCoordinateSeqSpec\";class Se extends oe{constructor(){super(...arguments),this.dimension=\"x\"}}n.XCoordinateSeqSeqSeqSpec=Se,Se.__name__=\"XCoordinateSeqSeqSeqSpec\";class pe extends oe{constructor(){super(...arguments),this.dimension=\"y\"}}n.YCoordinateSeqSeqSeqSpec=pe,pe.__name__=\"YCoordinateSeqSeqSeqSpec\";class me extends re{get default_units(){return\"rad\"}get valid_units(){return[...o.AngleUnits]}materialize(e){return e*-d.to_radians_coeff(this.units)}v_materialize(e){const t=-d.to_radians_coeff(this.units),n=new Float32Array(e.length);return u.mul(e,t,n),n}array(e){throw new Error(\"not supported\")}}n.AngleSpec=me,me.__name__=\"AngleSpec\";class he extends re{get default_units(){return\"data\"}get valid_units(){return[...o.SpatialUnits]}}n.DistanceSpec=he,he.__name__=\"DistanceSpec\";class ve extends he{materialize(e){return null!=e?e:NaN}}n.NullDistanceSpec=ve,ve.__name__=\"NullDistanceSpec\";class ye extends he{get default_units(){return\"screen\"}}n.ScreenDistanceSpec=ye,ye.__name__=\"ScreenDistanceSpec\";class xe extends ne{v_materialize(e){return new Uint8Array(e)}array(e){return new Uint8Array(super.array(e))}}n.BooleanSpec=xe,xe.__name__=\"BooleanSpec\";class ge extends ne{v_materialize(e){return m.isTypedArray(e)?e:new Float64Array(e)}array(e){return new Float64Array(super.array(e))}}n.NumberSpec=ge,ge.__name__=\"NumberSpec\";class fe extends ne{materialize(e){return S.encode_rgba(S.color2rgba(e))}v_materialize(e){if(!v.is_NDArray(e)){const t=e.length,n=new c.RGBAArray(4*t);let a=0;for(const t of e){const[e,r,i,s]=S.color2rgba(t);n[a++]=e,n[a++]=r,n[a++]=i,n[a++]=s}return new c.ColorArray(n.buffer)}if(\"uint32\"==e.dtype&&1==e.dimension)return p.to_big_endian(e);if(\"uint8\"==e.dtype&&1==e.dimension){const[t]=e.shape,n=new c.RGBAArray(4*t);let a=0;for(const t of e)n[a++]=t,n[a++]=t,n[a++]=t,n[a++]=255;return new c.ColorArray(n.buffer)}if(\"uint8\"==e.dtype&&2==e.dimension){const[t,n]=e.shape;if(4==n)return new c.ColorArray(e.buffer);if(3==n){const a=new c.RGBAArray(4*t);for(let r=0,i=0;r<n*t;)a[i++]=e[r++],a[i++]=e[r++],a[i++]=e[r++],a[i++]=255;return new c.ColorArray(a.buffer)}}else if((\"float32\"==e.dtype||\"float64\"==e.dtype)&&2==e.dimension){const[t,n]=e.shape;if(3==n||4==n){const a=new c.RGBAArray(4*t);for(let r=0,i=0;r<n*t;)a[i++]=255*e[r++],a[i++]=255*e[r++],a[i++]=255*e[r++],a[i++]=255*(3==n?1:e[r++]);return new c.ColorArray(a.buffer)}}throw new Error(\"invalid color array\")}vector(e){return new y.ColorUniformVector(e)}}n.ColorSpec=fe,fe.__name__=\"ColorSpec\";class Ae extends ne{}n.NDArraySpec=Ae,Ae.__name__=\"NDArraySpec\";class Ce extends ne{}n.AnySpec=Ce,Ce.__name__=\"AnySpec\";class Le extends ne{}n.StringSpec=Le,Le.__name__=\"StringSpec\";class Te extends ne{}n.NullStringSpec=Te,Te.__name__=\"NullStringSpec\";class Pe extends ne{}n.ArraySpec=Pe,Pe.__name__=\"ArraySpec\";class be extends ne{}n.MarkerSpec=be,be.__name__=\"MarkerSpec\";class we extends ne{}n.LineJoinSpec=we,we.__name__=\"LineJoinSpec\";class qe extends ne{}n.LineCapSpec=qe,qe.__name__=\"LineCapSpec\";class Ne extends ne{}n.LineDashSpec=Ne,Ne.__name__=\"LineDashSpec\";class Be extends ne{_default_override(){return h.settings.dev?\"Bokeh\":void 0}}n.FontSpec=Be,Be.__name__=\"FontSpec\";class De extends ne{}n.FontSizeSpec=De,De.__name__=\"FontSizeSpec\";class Fe extends ne{}n.FontStyleSpec=Fe,Fe.__name__=\"FontStyleSpec\";class ze extends ne{}n.TextAlignSpec=ze,ze.__name__=\"TextAlignSpec\";class Ue extends ne{}n.TextBaselineSpec=Ue,Ue.__name__=\"TextBaselineSpec\"},\n",
" function _(e,l,o,n,t){n();const s=e(8),g=e(13),r={};class i{constructor(e,l){this.name=e,this.level=l}}o.LogLevel=i,i.__name__=\"LogLevel\";class v{constructor(e,l=v.INFO){this._name=e,this.set_level(l)}static get levels(){return Object.keys(v.log_levels)}static get(e,l=v.INFO){if(e.length>0){let o=r[e];return null==o&&(r[e]=o=new v(e,l)),o}throw new TypeError(\"Logger.get() expects a non-empty string name and an optional log-level\")}get level(){return this.get_level()}get_level(){return this._log_level}set_level(e){if(e instanceof i)this._log_level=e;else{if(!s.isString(e)||null==v.log_levels[e])throw new Error(\"Logger.set_level() expects a log-level object or a string name of a log-level\");this._log_level=v.log_levels[e]}const l=`[${this._name}]`;for(const[e,o]of g.entries(v.log_levels))o.level<this._log_level.level||this._log_level.level===v.OFF.level?this[e]=function(){}:this[e]=_(e,l)}trace(...e){}debug(...e){}info(...e){}warn(...e){}error(...e){}}function _(e,l){return null!=console[e]?console[e].bind(console,l):null!=console.log?console.log.bind(console,l):function(){}}function c(e){const l=o.logger.level;return s.isString(e)&&null==v.log_levels[e]?(console.log(`[bokeh] unrecognized logging level '${e}' passed to Bokeh.set_log_level(), ignoring`),console.log(`[bokeh] valid log levels are: ${v.levels.join(\", \")}`)):(console.log(`[bokeh] setting log level to: '${s.isString(e)?e:e.level}'`),o.logger.set_level(e)),l}o.Logger=v,v.__name__=\"Logger\",v.TRACE=new i(\"trace\",0),v.DEBUG=new i(\"debug\",1),v.INFO=new i(\"info\",2),v.WARN=new i(\"warn\",6),v.ERROR=new i(\"error\",7),v.FATAL=new i(\"fatal\",8),v.OFF=new i(\"off\",9),v.log_levels={trace:v.TRACE,debug:v.DEBUG,info:v.INFO,warn:v.WARN,error:v.ERROR,fatal:v.FATAL,off:v.OFF},o.logger=v.get(\"bokeh\"),o.set_log_level=c,o.with_log_level=function(e,l){const o=c(e);try{l()}finally{c(o)}}},\n",
" function _(e,n,t,o,i){o(),t.VerticalAlign=void 0;const a=e(21);t.Align=a.Enum(\"start\",\"center\",\"end\"),t.Anchor=a.Enum(\"top_left\",\"top_center\",\"top_right\",\"center_left\",\"center_center\",\"center_right\",\"bottom_left\",\"bottom_center\",\"bottom_right\",\"top\",\"left\",\"center\",\"right\",\"bottom\"),t.AngleUnits=a.Enum(\"deg\",\"rad\",\"grad\",\"turn\"),t.BoxOrigin=a.Enum(\"corner\",\"center\"),t.ButtonType=a.Enum(\"default\",\"primary\",\"success\",\"warning\",\"danger\",\"light\"),t.CalendarPosition=a.Enum(\"auto\",\"above\",\"below\"),t.Dimension=a.Enum(\"width\",\"height\"),t.Dimensions=a.Enum(\"width\",\"height\",\"both\"),t.Direction=a.Enum(\"clock\",\"anticlock\"),t.Distribution=a.Enum(\"uniform\",\"normal\"),t.FontStyle=a.Enum(\"normal\",\"italic\",\"bold\",\"bold italic\"),t.HatchPatternType=a.Enum(\"blank\",\"dot\",\"ring\",\"horizontal_line\",\"vertical_line\",\"cross\",\"horizontal_dash\",\"vertical_dash\",\"spiral\",\"right_diagonal_line\",\"left_diagonal_line\",\"diagonal_cross\",\"right_diagonal_dash\",\"left_diagonal_dash\",\"horizontal_wave\",\"vertical_wave\",\"criss_cross\",\" \",\".\",\"o\",\"-\",\"|\",\"+\",'\"',\":\",\"@\",\"/\",\"\\\\\",\"x\",\",\",\"`\",\"v\",\">\",\"*\"),t.HTTPMethod=a.Enum(\"POST\",\"GET\"),t.HexTileOrientation=a.Enum(\"pointytop\",\"flattop\"),t.HoverMode=a.Enum(\"mouse\",\"hline\",\"vline\"),t.LatLon=a.Enum(\"lat\",\"lon\"),t.LegendClickPolicy=a.Enum(\"none\",\"hide\",\"mute\"),t.LegendLocation=t.Anchor,t.LineCap=a.Enum(\"butt\",\"round\",\"square\"),t.LineJoin=a.Enum(\"miter\",\"round\",\"bevel\"),t.LineDash=a.Enum(\"solid\",\"dashed\",\"dotted\",\"dotdash\",\"dashdot\"),t.LinePolicy=a.Enum(\"prev\",\"next\",\"nearest\",\"interp\",\"none\"),t.Location=a.Enum(\"above\",\"below\",\"left\",\"right\"),t.Logo=a.Enum(\"normal\",\"grey\"),t.MarkerType=a.Enum(\"asterisk\",\"circle\",\"circle_cross\",\"circle_dot\",\"circle_x\",\"circle_y\",\"cross\",\"dash\",\"diamond\",\"diamond_cross\",\"diamond_dot\",\"dot\",\"hex\",\"hex_dot\",\"inverted_triangle\",\"plus\",\"square\",\"square_cross\",\"square_dot\",\"square_pin\",\"square_x\",\"star\",\"star_dot\",\"triangle\",\"triangle_dot\",\"triangle_pin\",\"x\",\"y\"),t.MutedPolicy=a.Enum(\"show\",\"ignore\"),t.Orientation=a.Enum(\"vertical\",\"horizontal\"),t.OutputBackend=a.Enum(\"canvas\",\"svg\",\"webgl\"),t.PaddingUnits=a.Enum(\"percent\",\"absolute\"),t.Place=a.Enum(\"above\",\"below\",\"left\",\"right\",\"center\"),t.PointPolicy=a.Enum(\"snap_to_data\",\"follow_mouse\",\"none\"),t.RadiusDimension=a.Enum(\"x\",\"y\",\"max\",\"min\"),t.RenderLevel=a.Enum(\"image\",\"underlay\",\"glyph\",\"guide\",\"annotation\",\"overlay\"),t.RenderMode=a.Enum(\"canvas\",\"css\"),t.ResetPolicy=a.Enum(\"standard\",\"event_only\"),t.RoundingFunction=a.Enum(\"round\",\"nearest\",\"floor\",\"rounddown\",\"ceil\",\"roundup\"),t.SelectionMode=a.Enum(\"replace\",\"append\",\"intersect\",\"subtract\"),t.Side=a.Enum(\"above\",\"below\",\"left\",\"right\"),t.SizingMode=a.Enum(\"stretch_width\",\"stretch_height\",\"stretch_both\",\"scale_width\",\"scale_height\",\"scale_both\",\"fixed\"),t.Sort=a.Enum(\"ascending\",\"descending\"),t.SpatialUnits=a.Enum(\"screen\",\"data\"),t.StartEnd=a.Enum(\"start\",\"end\"),t.StepMode=a.Enum(\"after\",\"before\",\"center\"),t.TapBehavior=a.Enum(\"select\",\"inspect\"),t.TextAlign=a.Enum(\"left\",\"right\",\"center\"),t.TextBaseline=a.Enum(\"top\",\"middle\",\"bottom\",\"alphabetic\",\"hanging\",\"ideographic\"),t.TextureRepetition=a.Enum(\"repeat\",\"repeat_x\",\"repeat_y\",\"no_repeat\"),t.TickLabelOrientation=a.Enum(\"vertical\",\"horizontal\",\"parallel\",\"normal\"),t.TooltipAttachment=a.Enum(\"horizontal\",\"vertical\",\"left\",\"right\",\"above\",\"below\"),t.UpdateMode=a.Enum(\"replace\",\"append\"),t.VerticalAlign=a.Enum(\"top\",\"middle\",\"bottom\")},\n",
" function _(e,n,t,s,r){s();const i=e(1).__importStar(e(8)),a=e(22),l=e(13),_=window.Map,{hasOwnProperty:u}=Object.prototype;class d{}t.Kind=d,d.__name__=\"Kind\",function(e){class n extends d{valid(e){return!0}}n.__name__=\"Any\",e.Any=n;class t extends d{valid(e){return!0}}t.__name__=\"Unknown\",e.Unknown=t;class s extends d{valid(e){return i.isBoolean(e)}}s.__name__=\"Boolean\",e.Boolean=s;class r extends d{constructor(e){super(),this.obj_type=e}valid(e){return!0}}r.__name__=\"Ref\",e.Ref=r;class c extends d{valid(e){return!0}}c.__name__=\"AnyRef\",e.AnyRef=c;class o extends d{valid(e){return i.isNumber(e)}}o.__name__=\"Number\",e.Number=o;class p extends o{valid(e){return super.valid(e)&&i.isInteger(e)}}p.__name__=\"Int\",e.Int=p;class y extends o{valid(e){return super.valid(e)&&0<=e&&e<=1}}y.__name__=\"Percent\",e.Percent=y;class m extends d{constructor(e){super(),this.types=e,this.types=e}valid(e){return this.types.some((n=>n.valid(e)))}}m.__name__=\"Or\",e.Or=m;class v extends d{constructor(e){super(),this.types=e,this.types=e}valid(e){if(!i.isArray(e))return!1;for(let n=0;n<this.types.length;n++){const t=this.types[n],s=e[n];if(!t.valid(s))return!1}return!0}}v.__name__=\"Tuple\",e.Tuple=v;class w extends d{constructor(e){super(),this.struct_type=e}valid(e){if(!i.isPlainObject(e))return!1;const{struct_type:n}=this;if(l.size(n)!=l.size(e))return!1;for(const t in n)if(u.call(n,t)){if(!u.call(e,t))return!1;const s=n[t],r=e[t];if(!s.valid(r))return!1}return!0}}w.__name__=\"Struct\",e.Struct=w;class h extends d{valid(e){return i.isArray(e)||i.isTypedArray(e)}}h.__name__=\"Arrayable\",e.Arrayable=h;class f extends d{constructor(e){super(),this.item_type=e}valid(e){return i.isArray(e)&&e.every((e=>this.item_type.valid(e)))}}f.__name__=\"Array\",e.Array=f;class K extends d{valid(e){return null===e}}K.__name__=\"Null\",e.Null=K;class b extends d{constructor(e){super(),this.base_type=e}valid(e){return null===e||this.base_type.valid(e)}}b.__name__=\"Nullable\",e.Nullable=b;class A extends d{constructor(e){super(),this.base_type=e}valid(e){return void 0===e||this.base_type.valid(e)}}A.__name__=\"Opt\",e.Opt=A;class x extends d{valid(e){return i.isString(e)}}x.__name__=\"String\",e.String=x;class S extends d{constructor(e){super(),this.values=new Set(e)}valid(e){return this.values.has(e)}*[Symbol.iterator](){yield*this.values}}S.__name__=\"Enum\",e.Enum=S;class N extends d{constructor(e){super(),this.item_type=e}valid(e){if(!i.isPlainObject(e))return!1;for(const n in e)if(u.call(e,n)){const t=e[n];if(!this.item_type.valid(t))return!1}return!0}}N.__name__=\"Dict\",e.Dict=N;class O extends d{constructor(e,n){super(),this.key_type=e,this.item_type=n}valid(e){if(!(e instanceof _))return!1;for(const[n,t]of e.entries())if(!this.key_type.valid(n)||!this.item_type.valid(t))return!1;return!0}}O.__name__=\"Map\",e.Map=O;class g extends d{valid(e){return a.is_Color(e)}}g.__name__=\"Color\",e.Color=g;class P extends d{valid(e){return i.isFunction(e)}}P.__name__=\"Function\",e.Function=P}(t.Kinds||(t.Kinds={})),t.Any=new t.Kinds.Any,t.Unknown=new t.Kinds.Unknown,t.Boolean=new t.Kinds.Boolean,t.Number=new t.Kinds.Number,t.Int=new t.Kinds.Int,t.String=new t.Kinds.String,t.Null=new t.Kinds.Null;t.Nullable=e=>new t.Kinds.Nullable(e);t.Opt=e=>new t.Kinds.Opt(e);t.Or=(...e)=>new t.Kinds.Or(e);t.Tuple=(...e)=>new t.Kinds.Tuple(e);t.Struct=e=>new t.Kinds.Struct(e),t.Arrayable=new t.Kinds.Arrayable;t.Array=e=>new t.Kinds.Array(e);t.Dict=e=>new t.Kinds.Dict(e);t.Map=(e,n)=>new t.Kinds.Map(e,n);t.Enum=(...e)=>new t.Kinds.Enum(e);t.Ref=e=>new t.Kinds.Ref(e);t.AnyRef=()=>new t.Kinds.AnyRef;t.Function=()=>new t.Kinds.Function,t.Percent=new t.Kinds.Percent,t.Alpha=t.Percent,t.Color=new t.Kinds.Color,t.Auto=t.Enum(\"auto\"),t.FontSize=t.String,t.Font=t.String,t.Angle=t.Number},\n",
" function _(n,t,r,e,s){e();const u=n(23),c=n(10),l=n(8),{round:i}=Math;function o(n){return c.clamp(i(n),0,255)}function a(){return[0,0,0,0]}function f(n){return[n>>24&255,n>>16&255,n>>8&255,255&n]}function d(n,t){var r;let e,s,u,c;return null==n?[e,s,u,c]=[0,0,0,0]:l.isInteger(n)?[e,s,u,c]=f(n):l.isString(n)?[e,s,u,c]=null!==(r=_(n))&&void 0!==r?r:[0,0,0,0]:([e,s,u,c=1]=n,c=o(255*c)),255==c&&null!=t&&(c=o(255*t)),[e,s,u,c]}r.transparent=a,r.encode_rgba=function([n,t,r,e]){return n<<24|t<<16|r<<8|e},r.decode_rgba=f,r.compose_alpha=function(n,t){return 255==(255&n)?4294967040&n|o(255*t):n},r.color2rgba=d;const h={0:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"a\",11:\"b\",12:\"c\",13:\"d\",14:\"e\",15:\"f\"};function g(n){return h[n>>4]+h[15&n]}r.color2css=function(n,t){const[r,e,s,u]=d(n,t);return`rgba(${r}, ${e}, ${s}, ${u/255})`},r.color2hex=function(n,t){const[r,e,s,u]=d(n,t),c=`#${g(r)}${g(e)}${g(s)}`;return 255==u?c:`${c}${g(u)}`},r.color2hexrgb=function(n){const[t,r,e]=d(n);return`#${g(t)}${g(r)}${g(e)}`};const b=/^rgba?\\(\\s*([^\\s,]+?)\\s+([^\\s,]+?)\\s+([^\\s,]+?)(?:\\s*\\/\\s*([^\\s,]+?))?\\s*\\)$/,m=/^rgba?\\(\\s*([^\\s,]+?)\\s*,\\s*([^\\s,]+?)\\s*,\\s*([^\\s,]+?)(?:\\s*,\\s*([^\\s,]+?))?\\s*\\)$/,$=(()=>{const n=document.createElement(\"canvas\");n.width=1,n.height=1;const t=n.getContext(\"2d\"),r=t.createLinearGradient(0,0,1,1);return n=>{t.fillStyle=r,t.fillStyle=n;const e=t.fillStyle;return e!=r?e:null}})();function _(n){var t;if(!(n=n.trim().toLowerCase()))return null;if(\"transparent\"==n)return[0,0,0,0];if(u.is_named_color(n))return f(u.named_colors[n]);if(\"#\"==n[0]){const t=Number(\"0x\"+n.substr(1));if(isNaN(t))return null;switch(n.length-1){case 3:{const n=t>>8&15,r=t>>4&15,e=t>>0&15;return[n<<4|n,r<<4|r,e<<4|e,255]}case 4:{const n=t>>12&15,r=t>>8&15,e=t>>4&15,s=t>>0&15;return[n<<4|n,r<<4|r,e<<4|e,s<<4|s]}case 6:return[t>>16&255,t>>8&255,t>>0&255,255];case 8:return[t>>24&255,t>>16&255,t>>8&255,t>>0&255]}}else if(n.startsWith(\"rgb\")){const r=null!==(t=n.match(b))&&void 0!==t?t:n.match(m);if(null!=r){let[,n,t,e,s=\"1\"]=r;const u=n.endsWith(\"%\"),c=t.endsWith(\"%\"),l=e.endsWith(\"%\"),i=s.endsWith(\"%\");if(!(u&&c&&l)&&(u||c||l))return null;u&&(n=n.slice(0,-1)),c&&(t=t.slice(0,-1)),l&&(e=e.slice(0,-1)),i&&(s=s.slice(0,-1));let a=Number(n),f=Number(t),d=Number(e),h=Number(s);return isNaN(a+f+d+h)?null:(u&&(a=a/100*255),c&&(f=f/100*255),l&&(d=d/100*255),h=255*(i?h/100:h),a=o(a),f=o(f),d=o(d),h=o(h),[a,f,d,h])}}else{const t=$(n);if(null!=t)return _(t)}return null}r.css4_parse=_,r.is_Color=function(n){return!!l.isInteger(n)||(!(!l.isString(n)||null==_(n))||!(!l.isArray(n)||3!=n.length&&4!=n.length))},r.is_dark=function([n,t,r]){return 1-(.299*n+.587*t+.114*r)/255>=.6}},\n",
" function _(e,r,l,a,i){a();l.named_colors={aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199},l.is_named_color=function(e){return e in l.named_colors}},\n",
" function _(r,t,n,a,o){a(),n.GeneratorFunction=Object.getPrototypeOf((function*(){})).constructor,n.ColorArray=Uint32Array,n.RGBAArray=Uint8ClampedArray,n.infer_type=function(r,t){return r instanceof Float64Array||r instanceof Array||t instanceof Float64Array||t instanceof Array?Float64Array:Float32Array},n.ScreenArray=Float32Array,n.to_screen=function(r){return r instanceof Float32Array?r:new Float32Array(r)},o(\"Indices\",r(25).BitSet)},\n",
" function _(t,s,r,e,i){e();const n=t(26),o=t(11);class a{constructor(t,s=0){this.size=t,this[Symbol.toStringTag]=\"BitSet\",this._count=null,this._nwords=Math.ceil(t/32),0==s||1==s?(this._array=new Uint32Array(this._nwords),1==s&&this._array.fill(4294967295)):(o.assert(s.length==this._nwords,\"Initializer size mismatch\"),this._array=s)}clone(){return new a(this.size,new Uint32Array(this._array))}[n.equals](t,s){if(!s.eq(this.size,t.size))return!1;const{_nwords:r}=this,e=this.size%r,i=0==e?r:r-1;for(let s=0;s<i;s++)if(this._array[s]!=t._array[s])return!1;if(0==e)return!0;{const s=1<<e-1,r=s-1^s;return(this._array[i]&r)==(t._array[i]&r)}}static all_set(t){return new a(t,1)}static all_unset(t){return new a(t,0)}static from_indices(t,s){const r=new a(t);for(const t of s)r.set(t);return r}static from_booleans(t,s){const r=new a(t),e=Math.min(t,s.length);for(let t=0;t<e;t++)s[t]&&r.set(t);return r}_check_bounds(t){o.assert(0<=t&&t<this.size,`Out of bounds: 0 <= ${t} < ${this.size}`)}get(t){this._check_bounds(t);const s=t>>>5,r=31&t;return!!(this._array[s]>>r&1)}set(t,s=!0){this._check_bounds(t),this._count=null;const r=t>>>5,e=31&t;s?this._array[r]|=1<<e:this._array[r]&=~(1<<e)}unset(t){this.set(t,!1)}*[Symbol.iterator](){yield*this.ones()}get count(){let t=this._count;return null==t&&(this._count=t=this._get_count()),t}_get_count(){const{_array:t,_nwords:s,size:r}=this;let e=0;for(let i=0,n=0;n<s;n++){const s=t[n];if(0==s)i+=32;else for(let t=0;t<32&&i<r;t++,i++)s>>>t&1&&(e+=1)}return e}*ones(){const{_array:t,_nwords:s,size:r}=this;for(let e=0,i=0;i<s;i++){const s=t[i];if(0!=s)for(let t=0;t<32&&e<r;t++,e++)s>>>t&1&&(yield e);else e+=32}}*zeros(){const{_array:t,_nwords:s,size:r}=this;for(let e=0,i=0;i<s;i++){const s=t[i];if(4294967295!=s)for(let t=0;t<32&&e<r;t++,e++)s>>>t&1||(yield e);else e+=32}}_check_size(t){o.assert(this.size==t.size,\"Size mismatch\")}add(t){this._check_size(t);for(let s=0;s<this._nwords;s++)this._array[s]|=t._array[s]}intersect(t){this._check_size(t);for(let s=0;s<this._nwords;s++)this._array[s]&=t._array[s]}subtract(t){this._check_size(t);for(let s=0;s<this._nwords;s++){const r=this._array[s],e=t._array[s];this._array[s]=(r^e)&r}}union(t){this._check_size(t);const s=this.clone();for(let r=0;r<this._nwords;r++)s._array[r]|=t._array[r];return s}intersection(t){this._check_size(t);const s=this.clone();for(let r=0;r<this._nwords;r++)s._array[r]&=t._array[r];return s}difference(t){this._check_size(t);const s=this.clone();for(let r=0;r<this._nwords;r++){const e=this._array[r],i=t._array[r];s._array[r]=(e^i)&e}return s}select(t){o.assert(this.size<=t.length,\"Size mismatch\");const s=this.count,r=new t.constructor(s);let e=0;for(const s of this)r[e++]=t[s];return r}}r.BitSet=a,a.__name__=\"BitSet\"},\n",
" function _(t,e,r,n,s){n();const o=t(8),{hasOwnProperty:c}=Object.prototype;function a(t){return o.isObject(t)&&void 0!==t[r.equals]}r.equals=Symbol(\"equals\"),r.wildcard=Symbol(\"wildcard\");const i=Object.prototype.toString;class u{constructor(){this.a_stack=[],this.b_stack=[]}eq(t,e){if(Object.is(t,e))return!0;if(t===r.wildcard||e===r.wildcard)return!0;if(null==t||null==e)return t===e;const n=i.call(t);if(n!=i.call(e))return!1;switch(n){case\"[object Number]\":return this.numbers(t,e);case\"[object RegExp]\":case\"[object String]\":return`${t}`==`${e}`;case\"[object Date]\":case\"[object Boolean]\":return+t==+e}const{a_stack:s,b_stack:o}=this;let c=s.length;for(;c--;)if(s[c]===t)return o[c]===e;s.push(t),o.push(e);const u=(()=>{if(a(t)&&a(e))return t[r.equals](e,this);switch(n){case\"[object Array]\":case\"[object Uint8Array]\":case\"[object Int8Array]\":case\"[object Uint16Array]\":case\"[object Int16Array]\":case\"[object Uint32Array]\":case\"[object Int32Array]\":case\"[object Float32Array]\":case\"[object Float64Array]\":return this.arrays(t,e);case\"[object Map]\":return this.maps(t,e);case\"[object Set]\":return this.sets(t,e);case\"[object Object]\":if(t.constructor==e.constructor&&(null==t.constructor||t.constructor===Object))return this.objects(t,e);case\"[object Function]\":if(t.constructor==e.constructor&&t.constructor===Function)return this.eq(`${t}`,`${e}`)}if(t instanceof Node)return this.nodes(t,e);throw Error(`can't compare objects of type ${n}`)})();return s.pop(),o.pop(),u}numbers(t,e){return Object.is(t,e)}arrays(t,e){const{length:r}=t;if(r!=e.length)return!1;for(let n=0;n<r;n++)if(!this.eq(t[n],e[n]))return!1;return!0}iterables(t,e){const r=t[Symbol.iterator](),n=e[Symbol.iterator]();for(;;){const t=r.next(),e=n.next();if(t.done&&e.done)return!0;if(t.done||e.done)return!1;if(!this.eq(t.value,e.value))return!1}}maps(t,e){if(t.size!=e.size)return!1;for(const[r,n]of t)if(!e.has(r)||!this.eq(n,e.get(r)))return!1;return!0}sets(t,e){if(t.size!=e.size)return!1;for(const r of t)if(!e.has(r))return!1;return!0}objects(t,e){const r=Object.keys(t);if(r.length!=Object.keys(e).length)return!1;for(const n of r)if(!c.call(e,n)||!this.eq(t[n],e[n]))return!1;return!0}nodes(t,e){return t.nodeType==e.nodeType&&(t.textContent==e.textContent&&!!this.iterables(t.childNodes,e.childNodes))}}r.Comparator=u,u.__name__=\"Comparator\";const{abs:l}=Math;class b extends u{constructor(t=1e-4){super(),this.tolerance=t}numbers(t,e){return super.numbers(t,e)||l(t-e)<this.tolerance}}function f(t,e){return(new u).eq(t,e)}r.SimilarComparator=b,b.__name__=\"SimilarComparator\",r.is_equal=f,r.is_similar=function(t,e,r){return new b(r).eq(t,e)},r.isEqual=f},\n",
" function _(n,i,e,t,r){t(),e.is_windows=navigator.appVersion.includes(\"Windows\"),e.is_ie=(()=>{const n=navigator.userAgent;return n.includes(\"MSIE\")||n.includes(\"Trident\")||n.includes(\"Edge\")})(),e.is_mobile=\"undefined\"!=typeof window&&(\"ontouchstart\"in window||navigator.maxTouchPoints>0),e.is_little_endian=(()=>{const n=new ArrayBuffer(4),i=new Uint8Array(n);new Uint32Array(n)[1]=168496141;let e=!0;return 10==i[4]&&11==i[5]&&12==i[6]&&13==i[7]&&(e=!1),e})(),e.BYTE_ORDER=e.is_little_endian?\"little\":\"big\",e.to_big_endian=function(n){if(e.is_little_endian){const i=new Uint32Array(n.length),e=new DataView(i.buffer);let t=0;for(const i of n)e.setUint32(t,i),t+=4;return i}return n}},\n",
" function _(e,t,r,i,s){i();class _{constructor(){this._dev=!1,this._wireframe=!1}set dev(e){this._dev=e}get dev(){return this._dev}set wireframe(e){this._wireframe=e}get wireframe(){return this._wireframe}}r.Settings=_,_.__name__=\"Settings\",r.settings=new _},\n",
" function _(t,e,s,r,n){var a,i,h,u,l,c,o,y;r();const p=t(8),_=t(11),A=t(26),d=t(30),D=t(31),N=Symbol(\"__ndarray__\");class f extends Uint8Array{constructor(t,e){super(t),this[a]=!0,this.dtype=\"uint8\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(a=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Uint8NDArray=f,f.__name__=\"Uint8NDArray\";class m extends Int8Array{constructor(t,e){super(t),this[i]=!0,this.dtype=\"int8\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(i=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Int8NDArray=m,m.__name__=\"Int8NDArray\";class g extends Uint16Array{constructor(t,e){super(t),this[h]=!0,this.dtype=\"uint16\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(h=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Uint16NDArray=g,g.__name__=\"Uint16NDArray\";class q extends Int16Array{constructor(t,e){super(t),this[u]=!0,this.dtype=\"int16\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(u=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Int16NDArray=q,q.__name__=\"Int16NDArray\";class I extends Uint32Array{constructor(t,e){super(t),this[l]=!0,this.dtype=\"uint32\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(l=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Uint32NDArray=I,I.__name__=\"Uint32NDArray\";class U extends Int32Array{constructor(t,e){super(t),this[c]=!0,this.dtype=\"int32\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(c=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Int32NDArray=U,U.__name__=\"Int32NDArray\";class w extends Float32Array{constructor(t,e){super(t),this[o]=!0,this.dtype=\"float32\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(o=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Float32NDArray=w,w.__name__=\"Float32NDArray\";class x extends Float64Array{constructor(t,e){super(t),this[y]=!0,this.dtype=\"float64\",this.shape=null!=e?e:z(t)?t.shape:[this.length],this.dimension=this.shape.length}[(y=N,A.equals)](t,e){return e.eq(this.shape,t.shape)&&e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}function z(t){return p.isObject(t)&&void 0!==t[N]}s.Float64NDArray=x,x.__name__=\"Float64NDArray\",s.is_NDArray=z,s.ndarray=function(t,e={}){let{dtype:s}=e;null==s&&(s=t instanceof ArrayBuffer||p.isArray(t)?\"float64\":(()=>{switch(!0){case t instanceof Uint8Array:return\"uint8\";case t instanceof Int8Array:return\"int8\";case t instanceof Uint16Array:return\"uint16\";case t instanceof Int16Array:return\"int16\";case t instanceof Uint32Array:return\"uint32\";case t instanceof Int32Array:return\"int32\";case t instanceof Float32Array:return\"float32\";case t instanceof Float64Array:return\"float64\";default:_.unreachable()}})());const{shape:r}=e;switch(s){case\"uint8\":return new f(t,r);case\"int8\":return new m(t,r);case\"uint16\":return new g(t,r);case\"int16\":return new q(t,r);case\"uint32\":return new I(t,r);case\"int32\":return new U(t,r);case\"float32\":return new w(t,r);case\"float64\":return new x(t,r)}}},\n",
" function _(e,r,t,i,s){i();const n=e(11),a=e(13),l=e(8);t.serialize=Symbol(\"serialize\");class o extends Error{}t.SerializationError=o,o.__name__=\"SerializationError\";class f{constructor(e){var r;this._references=new Map,this._definitions=new Map,this._refmap=new Map,this.include_defaults=null===(r=null==e?void 0:e.include_defaults)||void 0===r||r}get_ref(e){return this._references.get(e)}add_ref(e,r){n.assert(!this._references.has(e)),this._references.set(e,r)}add_def(e,r){const t=this.get_ref(e);n.assert(null!=t),this._definitions.set(e,r),this._refmap.set(t,r)}get objects(){return new Set(this._references.keys())}get references(){return new Set(this._references.values())}get definitions(){return new Set(this._definitions.values())}resolve_ref(e){return this._refmap.get(e)}remove_ref(e){return this._references.delete(e)}remove_def(e){return this._definitions.delete(e)}to_serializable(e){const r=this.get_ref(e);if(null!=r)return r;if(function(e){return l.isObject(e)&&void 0!==e[t.serialize]}(e))return e[t.serialize](this);if(l.isArray(e)||l.isTypedArray(e)){const r=e.length,t=new Array(r);for(let i=0;i<r;i++){const r=e[i];t[i]=this.to_serializable(r)}return t}if(l.isPlainObject(e)){const r={};for(const[t,i]of a.entries(e))r[t]=this.to_serializable(i);return r}if(null===e||l.isBoolean(e)||l.isNumber(e)||l.isString(e))return e;throw new o(`${Object.prototype.toString.call(e)} is not serializable`)}}t.Serializer=f,f.__name__=\"Serializer\"},\n",
" function _(r,e,n,t,_){t();const a=r(1),f=r(8),u=a.__importStar(r(29)),s=r(27),o=r(32);n.is_NDArray_ref=function(r){return f.isPlainObject(r)&&(\"__buffer__\"in r||\"__ndarray__\"in r)},n.decode_NDArray=function(r,e){const{shape:n,dtype:t,order:_}=r;let a;if(\"__buffer__\"in r){const n=e.get(r.__buffer__);if(null==n)throw new Error(`buffer for ${r.__buffer__} not found`);a=n}else a=o.base64_to_buffer(r.__ndarray__);const f=(()=>{switch(t){case\"uint8\":return new u.Uint8NDArray(a,n);case\"int8\":return new u.Int8NDArray(a,n);case\"uint16\":return new u.Uint16NDArray(a,n);case\"int16\":return new u.Int16NDArray(a,n);case\"uint32\":return new u.Uint32NDArray(a,n);case\"int32\":return new u.Int32NDArray(a,n);case\"float32\":return new u.Float32NDArray(a,n);case\"float64\":return new u.Float64NDArray(a,n)}})();return _!==s.BYTE_ORDER&&o.swap(f),f},n.encode_NDArray=function(r,e){const n={order:s.BYTE_ORDER,dtype:r.dtype,shape:r.shape};if(null!=e){const t=`${e.size}`;return e.set(t,r.buffer),Object.assign({__buffer__:t},n)}{const e={toJSON:()=>o.buffer_to_base64(r.buffer)};return Object.assign({__ndarray__:e},n)}}},\n",
" function _(t,e,n,r,f){r(),n.buffer_to_base64=function(t){const e=new Uint8Array(t),n=Array.from(e).map((t=>String.fromCharCode(t)));return btoa(n.join(\"\"))},n.base64_to_buffer=function(t){const e=atob(t),n=e.length,r=new Uint8Array(n);for(let t=0,f=n;t<f;t++)r[t]=e.charCodeAt(t);return r.buffer},n.swap=function(t){switch(t.BYTES_PER_ELEMENT){case 2:!function(t){const e=new Uint8Array(t.buffer,t.byteOffset,2*t.length);for(let t=0,n=e.length;t<n;t+=2){const n=e[t];e[t]=e[t+1],e[t+1]=n}}(t);break;case 4:!function(t){const e=new Uint8Array(t.buffer,t.byteOffset,4*t.length);for(let t=0,n=e.length;t<n;t+=4){let n=e[t];e[t]=e[t+3],e[t+3]=n,n=e[t+1],e[t+1]=e[t+2],e[t+2]=n}}(t);break;case 8:!function(t){const e=new Uint8Array(t.buffer,t.byteOffset,8*t.length);for(let t=0,n=e.length;t<n;t+=8){let n=e[t];e[t]=e[t+7],e[t+7]=n,n=e[t+1],e[t+1]=e[t+6],e[t+6]=n,n=e[t+2],e[t+2]=e[t+5],e[t+5]=n,n=e[t+3],e[t+3]=e[t+4],e[t+4]=n}}(t)}}},\n",
" function _(t,r,e,s,a){s();const i=t(26);class n{is_Scalar(){return this.is_scalar}is_Vector(){return!this.is_scalar}}e.Uniform=n,n.__name__=\"Uniform\";class l extends n{constructor(t,r){super(),this.value=t,this.length=r,this.is_scalar=!0}get(t){return this.value}*[Symbol.iterator](){const{length:t,value:r}=this;for(let e=0;e<t;e++)yield r}select(t){return new l(this.value,t.count)}[i.equals](t,r){return r.eq(this.length,t.length)&&r.eq(this.value,t.value)}}e.UniformScalar=l,l.__name__=\"UniformScalar\";class o extends n{constructor(t){super(),this.array=t,this.is_scalar=!1,this.length=this.array.length}get(t){return this.array[t]}*[Symbol.iterator](){yield*this.array}select(t){const r=t.select(this.array);return new this.constructor(r)}[i.equals](t,r){return r.eq(this.length,t.length)&&r.eq(this.array,t.array)}}e.UniformVector=o,o.__name__=\"UniformVector\";class h extends o{constructor(t){super(t),this.array=t,this._view=new DataView(t.buffer)}get(t){return this._view.getUint32(4*t)}*[Symbol.iterator](){const t=this.length;for(let r=0;r<t;r++)yield this.get(r)}}e.ColorUniformVector=h,h.__name__=\"ColorUniformVector\"},\n",
" function _(t,e,r,n,u){n();const c=t(28);function s(){const t=new Array(32),e=\"0123456789ABCDEF\";for(let r=0;r<32;r++)t[r]=e.substr(Math.floor(16*Math.random()),1);return t[12]=\"4\",t[16]=e.substr(3&t[16].charCodeAt(0)|8,1),t.join(\"\")}r.startsWith=function(t,e,r=0){return t.substr(r,e.length)==e},r.uuid4=s;let a=1e3;r.uniqueId=function(t){const e=c.settings.dev?\"j\"+a++:s();return null!=t?`${t}-${e}`:e},r.escape=function(t){return t.replace(/(?:[&<>\"'`])/g,(t=>{switch(t){case\"&\":return\"&\";case\"<\":return\"<\";case\">\":return\">\";case'\"':return\""\";case\"'\":return\"'\";case\"`\":return\"`\";default:return t}}))},r.unescape=function(t){return t.replace(/&(amp|lt|gt|quot|#x27|#x60);/g,((t,e)=>{switch(e){case\"amp\":return\"&\";case\"lt\":return\"<\";case\"gt\":return\">\";case\"quot\":return'\"';case\"#x27\":return\"'\";case\"#x60\":return\"`\";default:return e}}))},r.use_strict=function(t){return`'use strict';\\n${t}`},r.to_fixed=function(t,e){return t.toFixed(e).replace(/(\\.[0-9]*?)0+$/,\"$1\").replace(/\\.$/,\"\")}},\n",
" function _(e,t,s,n,o){n();const i=e(30);class r{constructor(e){this.document=e}}s.DocumentEvent=r,r.__name__=\"DocumentEvent\";class a extends r{constructor(e,t,s){super(e),this.events=t,this.setter_id=s}}s.DocumentEventBatch=a,a.__name__=\"DocumentEventBatch\";class d extends r{}s.DocumentChangedEvent=d,d.__name__=\"DocumentChangedEvent\";class l extends d{constructor(e,t,s){super(e),this.msg_type=t,this.msg_data=s}[i.serialize](e){const t=this.msg_data,s=e.to_serializable(t);return{kind:\"MessageSent\",msg_type:this.msg_type,msg_data:s}}}s.MessageSentEvent=l,l.__name__=\"MessageSentEvent\";class _ extends d{constructor(e,t,s,n,o,i,r){super(e),this.model=t,this.attr=s,this.old=n,this.new_=o,this.setter_id=i,this.hint=r}[i.serialize](e){if(null!=this.hint)return e.to_serializable(this.hint);const t=this.new_,s=e.to_serializable(t);return this.model!=t&&e.remove_def(this.model),{kind:\"ModelChanged\",model:this.model.ref(),attr:this.attr,new:s}}}s.ModelChangedEvent=_,_.__name__=\"ModelChangedEvent\";class c extends d{constructor(e,t,s){super(e),this.column_source=t,this.patches=s}[i.serialize](e){return{kind:\"ColumnsPatched\",column_source:this.column_source,patches:this.patches}}}s.ColumnsPatchedEvent=c,c.__name__=\"ColumnsPatchedEvent\";class h extends d{constructor(e,t,s,n){super(e),this.column_source=t,this.data=s,this.rollover=n}[i.serialize](e){return{kind:\"ColumnsStreamed\",column_source:this.column_source,data:this.data,rollover:this.rollover}}}s.ColumnsStreamedEvent=h,h.__name__=\"ColumnsStreamedEvent\";class m extends d{constructor(e,t,s){super(e),this.title=t,this.setter_id=s}[i.serialize](e){return{kind:\"TitleChanged\",title:this.title}}}s.TitleChangedEvent=m,m.__name__=\"TitleChangedEvent\";class u extends d{constructor(e,t,s){super(e),this.model=t,this.setter_id=s}[i.serialize](e){return{kind:\"RootAdded\",model:e.to_serializable(this.model)}}}s.RootAddedEvent=u,u.__name__=\"RootAddedEvent\";class v extends d{constructor(e,t,s){super(e),this.model=t,this.setter_id=s}[i.serialize](e){return{kind:\"RootRemoved\",model:this.model.ref()}}}s.RootRemovedEvent=v,v.__name__=\"RootRemovedEvent\"},\n",
" function _(t,r,n,i,e){i();const s=t(8),o=t(13);n.pretty=Symbol(\"pretty\");class c{constructor(t){this.precision=null==t?void 0:t.precision}to_string(t){return function(t){return s.isObject(t)&&void 0!==t[n.pretty]}(t)?t[n.pretty](this):s.isBoolean(t)?this.boolean(t):s.isNumber(t)?this.number(t):s.isString(t)?this.string(t):s.isArray(t)?this.array(t):s.isIterable(t)?this.iterable(t):s.isPlainObject(t)?this.object(t):`${t}`}token(t){return t}boolean(t){return`${t}`}number(t){return null!=this.precision?t.toFixed(this.precision):`${t}`}string(t){return`\"${t.replace(/'/g,\"\\\\'\")}\"`}array(t){const r=this.token,n=[];for(const r of t)n.push(this.to_string(r));return`${r(\"[\")}${n.join(`${r(\",\")} `)}${r(\"]\")}`}iterable(t){var r;const n=this.token,i=null!==(r=Object(t)[Symbol.toStringTag])&&void 0!==r?r:\"Object\",e=this.array(t);return`${i}${n(\"(\")}${e}${n(\")\")}`}object(t){const r=this.token,n=[];for(const[i,e]of o.entries(t))n.push(`${i}${r(\":\")} ${this.to_string(e)}`);return`${r(\"{\")}${n.join(`${r(\",\")} `)}${r(\"}\")}`}}n.Printer=c,c.__name__=\"Printer\",n.to_string=function(t,r){return new c(r).to_string(t)}},\n",
" function _(n,o,r,e,t){e();const l=n(13),i=n(8);function c(n){return i.isObject(n)&&void 0!==n[r.clone]}r.clone=Symbol(\"clone\"),r.is_Cloneable=c;class s extends Error{}r.CloningError=s,s.__name__=\"CloningError\";class a{constructor(){}clone(n){if(c(n))return n[r.clone](this);if(i.isArray(n)){const o=n.length,r=new Array(o);for(let e=0;e<o;e++){const o=n[e];r[e]=this.clone(o)}return r}if(i.isPlainObject(n)){const o={};for(const[r,e]of l.entries(n))o[r]=this.clone(e);return o}if(null===n||i.isBoolean(n)||i.isNumber(n)||i.isString(n))return n;throw new s(`${Object.prototype.toString.call(n)} is not cloneable`)}}r.Cloner=a,a.__name__=\"Cloner\"},\n",
" function _(t,_,r,o,a){o();const e=t(1);e.__exportStar(t(39),r),e.__exportStar(t(162),r),e.__exportStar(t(257),r),e.__exportStar(t(261),r),e.__exportStar(t(266),r),e.__exportStar(t(272),r),e.__exportStar(t(205),r),e.__exportStar(t(277),r),e.__exportStar(t(313),r),e.__exportStar(t(315),r),e.__exportStar(t(317),r),e.__exportStar(t(209),r),e.__exportStar(t(147),r),e.__exportStar(t(330),r),e.__exportStar(t(338),r),e.__exportStar(t(220),r),e.__exportStar(t(339),r),e.__exportStar(t(217),r),e.__exportStar(t(340),r),e.__exportStar(t(341),r),e.__exportStar(t(198),r),e.__exportStar(t(346),r),e.__exportStar(t(356),r),e.__exportStar(t(360),r)},\n",
" function _(e,o,n,a,t){a(),t(\"Annotation\",e(40).Annotation),t(\"Arrow\",e(55).Arrow),t(\"ArrowHead\",e(133).ArrowHead),t(\"OpenHead\",e(133).OpenHead),t(\"NormalHead\",e(133).NormalHead),t(\"TeeHead\",e(133).TeeHead),t(\"VeeHead\",e(133).VeeHead),t(\"Band\",e(134).Band),t(\"BoxAnnotation\",e(136).BoxAnnotation),t(\"ColorBar\",e(137).ColorBar),t(\"Label\",e(226).Label),t(\"LabelSet\",e(227).LabelSet),t(\"Legend\",e(228).Legend),t(\"LegendItem\",e(229).LegendItem),t(\"PolyAnnotation\",e(231).PolyAnnotation),t(\"Slope\",e(232).Slope),t(\"Span\",e(233).Span),t(\"TextAnnotation\",e(139).TextAnnotation),t(\"Title\",e(138).Title),t(\"ToolbarPanel\",e(234).ToolbarPanel),t(\"Tooltip\",e(254).Tooltip),t(\"Whisker\",e(256).Whisker)},\n",
" function _(t,e,i,n,s){n();const o=t(41);class a extends o.RendererView{get_size(){if(this.model.visible){const{width:t,height:e}=this._get_size();return{width:Math.round(t),height:Math.round(e)}}return{width:0,height:0}}_get_size(){throw new Error(\"not implemented\")}connect_signals(){super.connect_signals();const t=this.model.properties;this.on_change(t.visible,(()=>{null!=this.layout&&(this.layout.visible=this.model.visible,this.plot_view.request_layout())}))}get needs_clip(){return null==this.layout}serializable_state(){const t=super.serializable_state();return null==this.layout?t:Object.assign(Object.assign({},t),{bbox:this.layout.bbox.box})}}i.AnnotationView=a,a.__name__=\"AnnotationView\";class l extends o.Renderer{constructor(t){super(t)}static init_Annotation(){this.override({level:\"annotation\"})}}i.Annotation=l,l.__name__=\"Annotation\",l.init_Annotation()},\n",
" function _(e,i,t,n,s){n();const r=e(1),a=e(42),_=r.__importStar(e(45)),o=e(20),l=e(53),d=e(54);class h extends a.View{get coordinates(){const{_coordinates:e}=this;return null!=e?e:this._coordinates=this._initialize_coordinates()}initialize(){super.initialize(),this.visuals=new _.Visuals(this),this.needs_webgl_blit=!1}connect_signals(){super.connect_signals();const{x_range_name:e,y_range_name:i}=this.model.properties;this.on_change([e,i],(()=>this._initialize_coordinates()))}_initialize_coordinates(){const{x_range_name:e,y_range_name:i}=this.model,{frame:t}=this.plot_view,n=t.x_scales.get(e),s=t.y_scales.get(i);return new d.CoordinateTransform(n,s)}get plot_view(){return this.parent}get plot_model(){return this.parent.model}get layer(){const{overlays:e,primary:i}=this.canvas;return\"overlay\"==this.model.level?e:i}get canvas(){return this.plot_view.canvas_view}request_render(){this.request_paint()}request_paint(){this.plot_view.request_paint(this)}notify_finished(){this.plot_view.notify_finished()}get needs_clip(){return!1}get has_webgl(){return!1}render(){this.model.visible&&this._render(),this._has_finished=!0}renderer_view(e){}}t.RendererView=h,h.__name__=\"RendererView\";class c extends l.Model{constructor(e){super(e)}static init_Renderer(){this.define((({Boolean:e,String:i})=>({level:[o.RenderLevel,\"image\"],visible:[e,!0],x_range_name:[i,\"default\"],y_range_name:[i,\"default\"]})))}}t.Renderer=c,c.__name__=\"Renderer\",c.init_Renderer()},\n",
" function _(t,e,s,i,n){i();const r=t(1),o=t(15),h=t(43),l=t(8),a=r.__importDefault(t(44));class _{constructor(t){this.removed=new o.Signal0(this,\"removed\"),this._ready=Promise.resolve(void 0),this._slots=new WeakMap;const{model:e,parent:s}=t;this.model=e,this.parent=s,this.root=null==s?this:s.root,this.removed.emit()}get ready(){return this._ready}connect(t,e){let s=this._slots.get(e);return null==s&&(s=(t,s)=>{const i=Promise.resolve(e.call(this,t,s));this._ready=this._ready.then((()=>i))},this._slots.set(e,s)),t.connect(s,this)}disconnect(t,e){return t.disconnect(e,this)}initialize(){this._has_finished=!1,this.is_root&&(this._stylesheet=h.stylesheet);for(const t of this.styles())this.stylesheet.append(t)}async lazy_initialize(){}remove(){this.disconnect_signals(),this.removed.emit()}toString(){return`${this.model.type}View(${this.model.id})`}serializable_state(){return{type:this.model.type}}get is_root(){return null==this.parent}assert_root(){if(!this.is_root)throw new Error(`${this.toString()} is not a root layout`)}has_finished(){return this._has_finished}get is_idle(){return this.has_finished()}connect_signals(){}disconnect_signals(){o.Signal.disconnect_receiver(this)}on_change(t,e){for(const s of l.isArray(t)?t:[t])this.connect(s.change,e)}cursor(t,e){return null}get stylesheet(){return this.is_root?this._stylesheet:this.root.stylesheet}styles(){return[a.default]}}s.View=_,_.__name__=\"View\"},\n",
" function _(t,e,n,i,o){i();const s=t(8),l=t(13),r=t=>(e={},...n)=>{const i=document.createElement(t);i.classList.add(\"bk\");for(let[t,n]of l.entries(e))if(null!=n&&(!s.isBoolean(n)||n))if(\"class\"===t&&(s.isString(n)&&(n=n.split(/\\s+/)),s.isArray(n)))for(const t of n)null!=t&&i.classList.add(t);else if(\"style\"===t&&s.isPlainObject(n))for(const[t,e]of l.entries(n))i.style[t]=e;else if(\"data\"===t&&s.isPlainObject(n))for(const[t,e]of l.entries(n))i.dataset[t]=e;else i.setAttribute(t,n);function o(t){if(s.isString(t))i.appendChild(document.createTextNode(t));else if(t instanceof Node)i.appendChild(t);else if(t instanceof NodeList||t instanceof HTMLCollection)for(const e of t)i.appendChild(e);else if(null!=t&&!1!==t)throw new Error(`expected a DOM element, string, false or null, got ${JSON.stringify(t)}`)}for(const t of n)if(s.isArray(t))for(const e of t)o(e);else o(t);return i};function a(t){const e=t.parentNode;null!=e&&e.removeChild(t)}function c(t,...e){const n=t.firstChild;for(const i of e)t.insertBefore(i,n)}function d(t,e){var n,i,o;const s=Element.prototype;return(null!==(o=null!==(i=null!==(n=s.matches)&&void 0!==n?n:s.webkitMatchesSelector)&&void 0!==i?i:s.mozMatchesSelector)&&void 0!==o?o:s.msMatchesSelector).call(t,e)}function h(t){return parseFloat(t)||0}function u(t){const e=getComputedStyle(t);return{border:{top:h(e.borderTopWidth),bottom:h(e.borderBottomWidth),left:h(e.borderLeftWidth),right:h(e.borderRightWidth)},margin:{top:h(e.marginTop),bottom:h(e.marginBottom),left:h(e.marginLeft),right:h(e.marginRight)},padding:{top:h(e.paddingTop),bottom:h(e.paddingBottom),left:h(e.paddingLeft),right:h(e.paddingRight)}}}function f(t){const e=t.getBoundingClientRect();return{width:Math.ceil(e.width),height:Math.ceil(e.height)}}n.createElement=function(t,e,...n){return r(t)(e,...n)},n.div=r(\"div\"),n.span=r(\"span\"),n.canvas=r(\"canvas\"),n.link=r(\"link\"),n.style=r(\"style\"),n.a=r(\"a\"),n.p=r(\"p\"),n.i=r(\"i\"),n.pre=r(\"pre\"),n.button=r(\"button\"),n.label=r(\"label\"),n.input=r(\"input\"),n.select=r(\"select\"),n.option=r(\"option\"),n.optgroup=r(\"optgroup\"),n.textarea=r(\"textarea\"),n.nbsp=function(){return document.createTextNode(\" \")},n.append=function(t,...e){for(const n of e)t.appendChild(n)},n.remove=a,n.removeElement=a,n.replaceWith=function(t,e){const n=t.parentNode;null!=n&&n.replaceChild(e,t)},n.prepend=c,n.empty=function(t,e=!1){let n;for(;n=t.firstChild;)t.removeChild(n);if(e&&t instanceof Element)for(const e of t.attributes)t.removeAttributeNode(e)},n.display=function(t){t.style.display=\"\"},n.undisplay=function(t){t.style.display=\"none\"},n.show=function(t){t.style.visibility=\"\"},n.hide=function(t){t.style.visibility=\"hidden\"},n.offset=function(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},n.matches=d,n.parent=function(t,e){let n=t;for(;n=n.parentElement;)if(d(n,e))return n;return null},n.extents=u,n.size=f,n.scroll_size=function(t){return{width:Math.ceil(t.scrollWidth),height:Math.ceil(t.scrollHeight)}},n.outer_size=function(t){const{margin:{left:e,right:n,top:i,bottom:o}}=u(t),{width:s,height:l}=f(t);return{width:Math.ceil(s+e+n),height:Math.ceil(l+i+o)}},n.content_size=function(t){const{left:e,top:n}=t.getBoundingClientRect(),{padding:i}=u(t);let o=0,s=0;for(const l of t.children){const t=l.getBoundingClientRect();o=Math.max(o,Math.ceil(t.left-e-i.left+t.width)),s=Math.max(s,Math.ceil(t.top-n-i.top+t.height))}return{width:o,height:s}},n.position=function(t,e,n){const{style:i}=t;if(i.left=`${e.x}px`,i.top=`${e.y}px`,i.width=`${e.width}px`,i.height=`${e.height}px`,null==n)i.margin=\"\";else{const{top:t,right:e,bottom:o,left:s}=n;i.margin=`${t}px ${e}px ${o}px ${s}px`}},n.children=function(t){return Array.from(t.children)};class p{constructor(t){this.el=t,this.classList=t.classList}get values(){const t=[];for(let e=0;e<this.classList.length;e++){const n=this.classList.item(e);null!=n&&t.push(n)}return t}has(t){return this.classList.contains(t)}add(...t){for(const e of t)this.classList.add(e);return this}remove(...t){for(const e of t)this.classList.remove(e);return this}clear(){for(const t of this.values)\"bk\"!=t&&this.classList.remove(t);return this}toggle(t,e){return(null!=e?e:!this.has(t))?this.add(t):this.remove(t),this}}var g;function m(t,e,n){const{width:i,height:o,position:s,display:l}=t.style;t.style.position=\"absolute\",t.style.display=\"\",t.style.width=null!=e.width&&e.width!=1/0?`${e.width}px`:\"auto\",t.style.height=null!=e.height&&e.height!=1/0?`${e.height}px`:\"auto\";try{return n()}finally{t.style.position=s,t.style.display=l,t.style.width=i,t.style.height=o}}n.ClassList=p,p.__name__=\"ClassList\",n.classes=function(t){return new p(t)},n.toggle_attribute=function(t,e,n){null==n&&(n=!t.hasAttribute(e)),n?t.setAttribute(e,\"true\"):t.removeAttribute(e)},(g=n.Keys||(n.Keys={}))[g.Backspace=8]=\"Backspace\",g[g.Tab=9]=\"Tab\",g[g.Enter=13]=\"Enter\",g[g.Esc=27]=\"Esc\",g[g.PageUp=33]=\"PageUp\",g[g.PageDown=34]=\"PageDown\",g[g.Left=37]=\"Left\",g[g.Up=38]=\"Up\",g[g.Right=39]=\"Right\",g[g.Down=40]=\"Down\",g[g.Delete=46]=\"Delete\",n.undisplayed=function(t,e){const{display:n}=t.style;t.style.display=\"none\";try{return e()}finally{t.style.display=n}},n.unsized=function(t,e){return m(t,{},e)},n.sized=m;class y{constructor(t){this.root=t,this.known=new Set,this.style=n.style({type:\"text/css\"}),c(t,this.style)}append(t){this.known.has(t)||(this.style.appendChild(document.createTextNode(t)),this.known.add(t))}}n.StyleSheet=y,y.__name__=\"StyleSheet\",n.stylesheet=new y(document.head),n.dom_ready=async function(){if(\"loading\"==
gitextract_hfw27rs6/ ├── .github/ │ └── workflows/ │ └── deploy.yml ├── .gitignore ├── LICENSE ├── README.md ├── argo/ │ └── plot_argo.ipynb ├── book/ │ ├── 01_ocean_bathymetry.ipynb │ ├── 02-a_thermodynamics_of_seawater.ipynb │ ├── 02-b_the_water_column.ipynb │ ├── 02-c_ocean_temperature_salinity_stratification.ipynb │ ├── 03_air_sea_exchange.ipynb │ ├── 04_advection_diffusion_continuity.ipynb │ ├── 05_equations_of_motion.ipynb │ ├── 06_hydrostatic_geostrophic.ipynb │ ├── 07_ekman.ipynb │ ├── AMOC_theory.ipynb │ ├── ECCO-state-estimate.ipynb │ ├── _config.yml │ ├── _toc.yml │ ├── assignments/ │ │ ├── geostrophy_ekman.ipynb │ │ ├── heat_and_salt_fluxes.ipynb │ │ └── thermodynamics.ipynb │ ├── barotropic_circulation.ipynb │ ├── heat-transport.ipynb │ ├── intro.md │ ├── overturning_circulation.ipynb │ ├── rise.css │ ├── southern_ocean.ipynb │ └── vorticity_sverdrup_transport_and_gyres.ipynb ├── data.md ├── homework-2017/ │ ├── 01_thermodynamics.ipynb │ ├── 03_thermal_wind_and_ekman.ipynb │ └── 05_mixing_and_Southern_Ocean.ipynb ├── homework-2018/ │ ├── po-hw-1.ipynb │ ├── po-hw-2.ipynb │ └── po-hw-4.ipynb ├── homework-2019/ │ ├── po-hw-1.ipynb │ └── po-southern-ocean-problem.ipynb ├── lectures/ │ ├── mesoscale_mixing.ipynb │ ├── southern_ocean/ │ │ └── SO_circulation.tex │ └── test_mathjax.ipynb ├── phys_ocean_env.yml ├── random_walk/ │ ├── take_a_walk.py │ └── walkers.py └── requirements.txt
SYMBOL INDEX (4 symbols across 1 files)
FILE: random_walk/walkers.py
class RandomWalker (line 4) | class RandomWalker():
method __init__ (line 7) | def __init__(self, x0=0., y0=0., amp=1., Nhist=5):
method step_forward (line 17) | def step_forward(self):
method dist_from_origin (line 30) | def dist_from_origin(self):
Copy disabled (too large)
Download .json
Condensed preview — 44 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (53,053K chars).
[
{
"path": ".github/workflows/deploy.yml",
"chars": 1156,
"preview": "name: deploy-book\n\n# Trigger the workflow on push to main branch and PRs\non:\n push:\n branches:\n - master\n pull_r"
},
{
"path": ".gitignore",
"chars": 659,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\n"
},
{
"path": "LICENSE",
"chars": 1072,
"preview": "MIT License\n\nCopyright (c) 2020 Ryan Abernathey\n\nPermission is hereby granted, free of charge, to any person obtaining a"
},
{
"path": "README.md",
"chars": 351,
"preview": "# Intro to Physical Oceanography\n\nThis repository contains course materials for EESC4925. The lecture notes are in the f"
},
{
"path": "argo/plot_argo.ipynb",
"chars": 50546,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 7,\n \"metadata\": {\n \"collapsed\": true\n },\n \"outp"
},
{
"path": "book/01_ocean_bathymetry.ipynb",
"chars": 8983142,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "book/02-a_thermodynamics_of_seawater.ipynb",
"chars": 6281572,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "book/02-b_the_water_column.ipynb",
"chars": 3847118,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "book/02-c_ocean_temperature_salinity_stratification.ipynb",
"chars": 8917818,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "book/04_advection_diffusion_continuity.ipynb",
"chars": 208976,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$ \\\\newcommand{\\\\pd}[2]{ \\\\frac{\\\\p"
},
{
"path": "book/05_equations_of_motion.ipynb",
"chars": 22111,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$$ \\\\newcommand{\\\\pd}[2]{ \\\\frac{\\\\"
},
{
"path": "book/06_hydrostatic_geostrophic.ipynb",
"chars": 291727,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$$ \\\\newcommand{\\\\pd}[2]{ \\\\frac{\\\\"
},
{
"path": "book/07_ekman.ipynb",
"chars": 1736747,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$$ \\\\newcommand{\\\\pd}[2]{ \\\\frac{\\\\"
},
{
"path": "book/AMOC_theory.ipynb",
"chars": 1935777,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# The theory of the Atlantic Meridi"
},
{
"path": "book/ECCO-state-estimate.ipynb",
"chars": 12980,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"da4da8f3-e8ed-4e55-81f9-0051aec67bc8\",\n \"metadata\": {\n \"sli"
},
{
"path": "book/_config.yml",
"chars": 1230,
"preview": "# Book settings\n# Learn more at https://jupyterbook.org/customize/config.html\n\ntitle: Intro to Physical Oceanography\naut"
},
{
"path": "book/_toc.yml",
"chars": 933,
"preview": "# Table of contents\n# Learn more at https://jupyterbook.org/customize/toc.html\n\nformat: jb-book\nroot: intro\n\nparts:\n - "
},
{
"path": "book/assignments/geostrophy_ekman.ipynb",
"chars": 8020,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Homework 3: Thermal Wind and Ekma"
},
{
"path": "book/assignments/heat_and_salt_fluxes.ipynb",
"chars": 4894,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Assignment: Heat and Salt Fluxes\\"
},
{
"path": "book/assignments/thermodynamics.ipynb",
"chars": 7028,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Assignment: Thermodynamics of Sea"
},
{
"path": "book/intro.md",
"chars": 173,
"preview": "# Introduction to Physical Oceanography\n\nThis is a book by Ryan Abernathey.\nIt was created for the Columbia University c"
},
{
"path": "book/overturning_circulation.ipynb",
"chars": 9011345,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"6025c94a-2771-439e-8cf0-0d2650a03f72\",\n \"metadata\": {},\n \"so"
},
{
"path": "book/rise.css",
"chars": 462,
"preview": ".reveal pre.xr-text-repr-fallback {\n display: none;\n}\n\n\n.reveal ul.xr-sections {\n padding-left: 0 !important;\n "
},
{
"path": "book/southern_ocean.ipynb",
"chars": 19058,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"0172ad94-c934-42f1-b955-bfb89e8e3aa1\",\n \"metadata\": {},\n \"so"
},
{
"path": "book/vorticity_sverdrup_transport_and_gyres.ipynb",
"chars": 1919089,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$$ \\\\newcommand{\\\\pd}[2]{ \\\\frac{\\\\"
},
{
"path": "data.md",
"chars": 2988,
"preview": "# Resources for Final Projects\n\n## Data Sources\n\n### Raw Data\n\nThese sources are relatively unprocessed raw data.\n\n* [CL"
},
{
"path": "homework-2017/01_thermodynamics.ipynb",
"chars": 10097,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Homework 1 #\\n\",\n \"\\n\",\n \"I"
},
{
"path": "homework-2017/03_thermal_wind_and_ekman.ipynb",
"chars": 12289,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Homework 3: Thermal Wind and Ekma"
},
{
"path": "homework-2017/05_mixing_and_Southern_Ocean.ipynb",
"chars": 2601543,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Homework 5: Mixing Processes and "
},
{
"path": "homework-2018/po-hw-1.ipynb",
"chars": 7206,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Homework 1: Thermodynamics of Sea"
},
{
"path": "homework-2018/po-hw-2.ipynb",
"chars": 6649,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# P.O. Problem Set 2: Heat and Salt"
},
{
"path": "homework-2018/po-hw-4.ipynb",
"chars": 3285,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$$ \\\\newcommand{\\\\pd}[2]{ \\\\frac{\\\\"
},
{
"path": "homework-2019/po-hw-1.ipynb",
"chars": 7015,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Homework 1: Thermodynamics of Sea"
},
{
"path": "homework-2019/po-southern-ocean-problem.ipynb",
"chars": 2142,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# P.O. Problem Set 4: Southern Ocea"
},
{
"path": "lectures/mesoscale_mixing.ipynb",
"chars": 5889353,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"slideshow\": {\n \"slide_type\": \"slide\"\n }\n },"
},
{
"path": "lectures/southern_ocean/SO_circulation.tex",
"chars": 18328,
"preview": "%! program = pdflatex\n\\documentclass[12pt]{article}\n\\usepackage{geometry} \n\\usepackage{graphicx}\n\\usepackage{amssymb}\n\\u"
},
{
"path": "lectures/test_mathjax.ipynb",
"chars": 906,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"$$ \\\\begin{align}\\n\",\n \"a &= b \\"
},
{
"path": "phys_ocean_env.yml",
"chars": 1249,
"preview": "name: phys_ocean\nchannels:\n - conda-forge\n - defaults\n - ioam\ndependencies:\n - python=3.6 # Python versio"
},
{
"path": "random_walk/take_a_walk.py",
"chars": 1025,
"preview": "from pylab import *\nimport walkers\n\nN = 200\nmypoints = [walkers.RandomWalker() for n in range(N)]\n\n# define points for d"
},
{
"path": "random_walk/walkers.py",
"chars": 915,
"preview": "from pylab import *\nfrom numpy.random import random_sample\n\nclass RandomWalker():\n \"\"\"A random walker in two dimensio"
},
{
"path": "requirements.txt",
"chars": 21,
"preview": "jupyter-book==0.11.2\n"
}
]
// ... and 3 more files (download for full content)
About this extraction
This page contains the full source code of the rabernat/intro_to_physical_oceanography GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 44 files (98.0 MB), approximately 13.0M tokens, and a symbol index with 4 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.