Last active
July 5, 2021 05:20
-
-
Save suvarchal/02f1e14df478e95bfff417cbbf902ed2 to your computer and use it in GitHub Desktop.
pyfesom2 remote access and plans
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"id": "suited-witch", | |
"metadata": {}, | |
"source": [ | |
"# Working with high-resolution unstructured (remote) model data" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "embedded-strip", | |
"metadata": {}, | |
"source": [ | |
"Pyfesom2 library is developed to facilitate working with FESOM2's unstructured data. During the course of its development we chose to make available samples of model data including highest resolutions to its and also foster easier development (and standadize benchmarks) of the library." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "joined-reset", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<div class=\"alert alert-block alert-warning\"> The examples in this notebook use code from a development branch which can be installed using:\n", | |
"\n", | |
"<code>pip install git+https://github.com/FESOM/pyfesom2@suvi_rebased_accessor_plotting</code>\n", | |
" \n", | |
"or using conda environment file listed at: https://github.com/FESOM/pyfesom2/blob/suvi_rebased_accessor_plotting/ci/requirements-py37.yml\n", | |
" \n", | |
"</div> \n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "baking-trust", | |
"metadata": {}, | |
"source": [ | |
"## 1. Working with (HR) remote data " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"id": "cheap-detail", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:20.983555Z", | |
"start_time": "2021-07-03T05:58:19.354537Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"from pyfesom2.datasets import rossby42 # a remotely stored dataset with 1 variable \n", | |
" # containing ~23M(horizontal) * 79(levels) * 1 (time) points\n", | |
" # ~3.2 GB" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"id": "generic-probe", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:21.010810Z", | |
"start_time": "2021-07-03T05:58:20.985075Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", | |
"Dimensions: (nelem: 46260679, nod2: 23243988, nz: 80, nz1: 79, three: 3, time: 1)\n", | |
"Coordinates:\n", | |
" faces (nelem, three) uint32 dask.array<chunksize=(361412, 1), meta=np.ndarray>\n", | |
" lat (nod2) float32 dask.array<chunksize=(363188,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(363188,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 -20.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
"Dimensions without coordinates: nelem, nod2, three\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 100000, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4...</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-5e207865-593d-4236-8613-83057d87d39c' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-5e207865-593d-4236-8613-83057d87d39c' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>nelem</span>: 46260679</li><li><span>nod2</span>: 23243988</li><li><span class='xr-has-index'>nz</span>: 80</li><li><span class='xr-has-index'>nz1</span>: 79</li><li><span>three</span>: 3</li><li><span class='xr-has-index'>time</span>: 1</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-85967cbe-10a9-4191-aff6-034bb74ecc13' class='xr-section-summary-in' type='checkbox' checked><label for='section-85967cbe-10a9-4191-aff6-034bb74ecc13' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>faces</span></div><div class='xr-var-dims'>(nelem, three)</div><div class='xr-var-dtype'>uint32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(361412, 1), meta=np.ndarray></div><input id='attrs-4e473166-7b7b-4de1-a669-02dda1f43727' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-4e473166-7b7b-4de1-a669-02dda1f43727' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-cfe134bb-8859-423a-acb6-251f4e9a3b1b' class='xr-var-data-in' type='checkbox'><label for='data-cfe134bb-8859-423a-acb6-251f4e9a3b1b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 555.13 MB </td> <td> 1.45 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (46260679, 3) </td> <td> (361412, 1) </td></tr>\n", | |
" <tr><th> Count </th><td> 385 Tasks </td><td> 384 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> uint32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"75\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"25\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"5\" x2=\"25\" y2=\"5\" />\n", | |
" <line x1=\"0\" y1=\"12\" x2=\"25\" y2=\"12\" />\n", | |
" <line x1=\"0\" y1=\"18\" x2=\"25\" y2=\"18\" />\n", | |
" <line x1=\"0\" y1=\"24\" x2=\"25\" y2=\"24\" />\n", | |
" <line x1=\"0\" y1=\"30\" x2=\"25\" y2=\"30\" />\n", | |
" <line x1=\"0\" y1=\"37\" x2=\"25\" y2=\"37\" />\n", | |
" <line x1=\"0\" y1=\"44\" x2=\"25\" y2=\"44\" />\n", | |
" <line x1=\"0\" y1=\"49\" x2=\"25\" y2=\"49\" />\n", | |
" <line x1=\"0\" y1=\"56\" x2=\"25\" y2=\"56\" />\n", | |
" <line x1=\"0\" y1=\"62\" x2=\"25\" y2=\"62\" />\n", | |
" <line x1=\"0\" y1=\"69\" x2=\"25\" y2=\"69\" />\n", | |
" <line x1=\"0\" y1=\"75\" x2=\"25\" y2=\"75\" />\n", | |
" <line x1=\"0\" y1=\"81\" x2=\"25\" y2=\"81\" />\n", | |
" <line x1=\"0\" y1=\"88\" x2=\"25\" y2=\"88\" />\n", | |
" <line x1=\"0\" y1=\"94\" x2=\"25\" y2=\"94\" />\n", | |
" <line x1=\"0\" y1=\"100\" x2=\"25\" y2=\"100\" />\n", | |
" <line x1=\"0\" y1=\"106\" x2=\"25\" y2=\"106\" />\n", | |
" <line x1=\"0\" y1=\"113\" x2=\"25\" y2=\"113\" />\n", | |
" <line x1=\"0\" y1=\"120\" x2=\"25\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"8\" y1=\"0\" x2=\"8\" y2=\"120\" />\n", | |
" <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"120\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 25.412616514582485,0.0 25.412616514582485,120.0 0.0,120.0\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"12.706308\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >3</text>\n", | |
" <text x=\"45.412617\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,45.412617,60.000000)\">46260679</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lat</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(363188,), meta=np.ndarray></div><input id='attrs-e21c9aff-876f-44aa-b1a6-53d3f41c4efc' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e21c9aff-876f-44aa-b1a6-53d3f41c4efc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f6d78eda-5998-45dd-8730-cb907ef9c57e' class='xr-var-data-in' type='checkbox'><label for='data-f6d78eda-5998-45dd-8730-cb907ef9c57e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 92.98 MB </td> <td> 1.45 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (23243988,) </td> <td> (363188,) </td></tr>\n", | |
" <tr><th> Count </th><td> 65 Tasks </td><td> 64 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n", | |
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n", | |
" <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n", | |
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n", | |
" <line x1=\"30\" y1=\"0\" x2=\"30\" y2=\"25\" />\n", | |
" <line x1=\"37\" y1=\"0\" x2=\"37\" y2=\"25\" />\n", | |
" <line x1=\"43\" y1=\"0\" x2=\"43\" y2=\"25\" />\n", | |
" <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"25\" />\n", | |
" <line x1=\"56\" y1=\"0\" x2=\"56\" y2=\"25\" />\n", | |
" <line x1=\"61\" y1=\"0\" x2=\"61\" y2=\"25\" />\n", | |
" <line x1=\"69\" y1=\"0\" x2=\"69\" y2=\"25\" />\n", | |
" <line x1=\"75\" y1=\"0\" x2=\"75\" y2=\"25\" />\n", | |
" <line x1=\"80\" y1=\"0\" x2=\"80\" y2=\"25\" />\n", | |
" <line x1=\"88\" y1=\"0\" x2=\"88\" y2=\"25\" />\n", | |
" <line x1=\"93\" y1=\"0\" x2=\"93\" y2=\"25\" />\n", | |
" <line x1=\"99\" y1=\"0\" x2=\"99\" y2=\"25\" />\n", | |
" <line x1=\"106\" y1=\"0\" x2=\"106\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >23243988</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(363188,), meta=np.ndarray></div><input id='attrs-dabb54cf-e88b-44b9-9ba5-3f6721829582' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-dabb54cf-e88b-44b9-9ba5-3f6721829582' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-beb9dd0d-554b-4709-8cdd-eadfe250a077' class='xr-var-data-in' type='checkbox'><label for='data-beb9dd0d-554b-4709-8cdd-eadfe250a077' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 92.98 MB </td> <td> 1.45 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (23243988,) </td> <td> (363188,) </td></tr>\n", | |
" <tr><th> Count </th><td> 65 Tasks </td><td> 64 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n", | |
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n", | |
" <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n", | |
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n", | |
" <line x1=\"30\" y1=\"0\" x2=\"30\" y2=\"25\" />\n", | |
" <line x1=\"37\" y1=\"0\" x2=\"37\" y2=\"25\" />\n", | |
" <line x1=\"43\" y1=\"0\" x2=\"43\" y2=\"25\" />\n", | |
" <line x1=\"48\" y1=\"0\" x2=\"48\" y2=\"25\" />\n", | |
" <line x1=\"56\" y1=\"0\" x2=\"56\" y2=\"25\" />\n", | |
" <line x1=\"61\" y1=\"0\" x2=\"61\" y2=\"25\" />\n", | |
" <line x1=\"69\" y1=\"0\" x2=\"69\" y2=\"25\" />\n", | |
" <line x1=\"75\" y1=\"0\" x2=\"75\" y2=\"25\" />\n", | |
" <line x1=\"80\" y1=\"0\" x2=\"80\" y2=\"25\" />\n", | |
" <line x1=\"88\" y1=\"0\" x2=\"88\" y2=\"25\" />\n", | |
" <line x1=\"93\" y1=\"0\" x2=\"93\" y2=\"25\" />\n", | |
" <line x1=\"99\" y1=\"0\" x2=\"99\" y2=\"25\" />\n", | |
" <line x1=\"106\" y1=\"0\" x2=\"106\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >23243988</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz</span></div><div class='xr-var-dims'>(nz)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-0.0 -5.0 ... -6.05e+03 -6.55e+03</div><input id='attrs-e3505d76-a19e-4fd6-b468-a37e9046f7bc' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e3505d76-a19e-4fd6-b468-a37e9046f7bc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f28f7e40-988f-4bc5-9182-f3f05c9444f5' class='xr-var-data-in' type='checkbox'><label for='data-f28f7e40-988f-4bc5-9182-f3f05c9444f5' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-0.000e+00, -5.000e+00, -1.000e+01, -2.000e+01, -3.000e+01, -4.000e+01,\n", | |
" -5.000e+01, -6.000e+01, -7.000e+01, -8.000e+01, -9.000e+01, -1.000e+02,\n", | |
" -1.120e+02, -1.250e+02, -1.400e+02, -1.550e+02, -1.700e+02, -1.850e+02,\n", | |
" -2.000e+02, -2.150e+02, -2.300e+02, -2.500e+02, -2.750e+02, -3.000e+02,\n", | |
" -3.250e+02, -3.500e+02, -3.750e+02, -4.000e+02, -4.300e+02, -4.600e+02,\n", | |
" -4.900e+02, -5.200e+02, -5.500e+02, -5.800e+02, -6.200e+02, -6.600e+02,\n", | |
" -7.000e+02, -7.500e+02, -8.000e+02, -8.500e+02, -9.000e+02, -9.500e+02,\n", | |
" -1.000e+03, -1.050e+03, -1.100e+03, -1.175e+03, -1.250e+03, -1.325e+03,\n", | |
" -1.400e+03, -1.475e+03, -1.550e+03, -1.650e+03, -1.750e+03, -1.850e+03,\n", | |
" -1.950e+03, -2.050e+03, -2.150e+03, -2.250e+03, -2.350e+03, -2.500e+03,\n", | |
" -2.650e+03, -2.800e+03, -2.950e+03, -3.100e+03, -3.300e+03, -3.400e+03,\n", | |
" -3.600e+03, -3.800e+03, -4.000e+03, -4.200e+03, -4.400e+03, -4.600e+03,\n", | |
" -4.800e+03, -5.000e+03, -5.200e+03, -5.400e+03, -5.600e+03, -5.800e+03,\n", | |
" -6.050e+03, -6.550e+03], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz1</span></div><div class='xr-var-dims'>(nz1)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-2.5 -7.5 ... -5.925e+03 -6.3e+03</div><input id='attrs-dea28d47-4acb-4903-8cc8-ee1318aa99e0' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-dea28d47-4acb-4903-8cc8-ee1318aa99e0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-53311d87-3157-48ab-8c7e-678f8dccf056' class='xr-var-data-in' type='checkbox'><label for='data-53311d87-3157-48ab-8c7e-678f8dccf056' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-2.5000e+00, -7.5000e+00, -1.5000e+01, -2.5000e+01, -3.5000e+01,\n", | |
" -4.5000e+01, -5.5000e+01, -6.5000e+01, -7.5000e+01, -8.5000e+01,\n", | |
" -9.5000e+01, -1.0600e+02, -1.1850e+02, -1.3250e+02, -1.4750e+02,\n", | |
" -1.6250e+02, -1.7750e+02, -1.9250e+02, -2.0750e+02, -2.2250e+02,\n", | |
" -2.4000e+02, -2.6250e+02, -2.8750e+02, -3.1250e+02, -3.3750e+02,\n", | |
" -3.6250e+02, -3.8750e+02, -4.1500e+02, -4.4500e+02, -4.7500e+02,\n", | |
" -5.0500e+02, -5.3500e+02, -5.6500e+02, -6.0000e+02, -6.4000e+02,\n", | |
" -6.8000e+02, -7.2500e+02, -7.7500e+02, -8.2500e+02, -8.7500e+02,\n", | |
" -9.2500e+02, -9.7500e+02, -1.0250e+03, -1.0750e+03, -1.1375e+03,\n", | |
" -1.2125e+03, -1.2875e+03, -1.3625e+03, -1.4375e+03, -1.5125e+03,\n", | |
" -1.6000e+03, -1.7000e+03, -1.8000e+03, -1.9000e+03, -2.0000e+03,\n", | |
" -2.1000e+03, -2.2000e+03, -2.3000e+03, -2.4250e+03, -2.5750e+03,\n", | |
" -2.7250e+03, -2.8750e+03, -3.0250e+03, -3.2000e+03, -3.3500e+03,\n", | |
" -3.5000e+03, -3.7000e+03, -3.9000e+03, -4.1000e+03, -4.3000e+03,\n", | |
" -4.5000e+03, -4.7000e+03, -4.9000e+03, -5.1000e+03, -5.3000e+03,\n", | |
" -5.5000e+03, -5.7000e+03, -5.9250e+03, -6.3000e+03])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1948-01-01</div><input id='attrs-454a3b33-1cb4-4535-9ae6-c1fc6d6796b8' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-454a3b33-1cb4-4535-9ae6-c1fc6d6796b8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8377fd58-2aab-449c-b223-aa1964b42288' class='xr-var-data-in' type='checkbox'><label for='data-8377fd58-2aab-449c-b223-aa1964b42288' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1948-01-01T00:00:00.000000000'], dtype='datetime64[ns]')</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-02ecbfd2-22b0-4cde-917a-80c7caf060ce' class='xr-section-summary-in' type='checkbox' checked><label for='section-02ecbfd2-22b0-4cde-917a-80c7caf060ce' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>temp</span></div><div class='xr-var-dims'>(time, nod2, nz1)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1, 100000, 40), meta=np.ndarray></div><input id='attrs-8ee3ad16-e961-46e3-8efe-8218c67f980e' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-8ee3ad16-e961-46e3-8efe-8218c67f980e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-4fed9c6a-2721-40d1-86de-c4ea53c0b0bf' class='xr-var-data-in' type='checkbox'><label for='data-4fed9c6a-2721-40d1-86de-c4ea53c0b0bf' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>temperature</dd><dt><span>units :</span></dt><dd>C</dd></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 7.35 GB </td> <td> 16.00 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1, 23243988, 79) </td> <td> (1, 100000, 40) </td></tr>\n", | |
" <tr><th> Count </th><td> 467 Tasks </td><td> 466 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"100\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"10\" y1=\"6\" x2=\"24\" y2=\"21\" />\n", | |
" <line x1=\"10\" y1=\"12\" x2=\"24\" y2=\"27\" />\n", | |
" <line x1=\"10\" y1=\"18\" x2=\"24\" y2=\"33\" />\n", | |
" <line x1=\"10\" y1=\"25\" x2=\"24\" y2=\"40\" />\n", | |
" <line x1=\"10\" y1=\"31\" x2=\"24\" y2=\"46\" />\n", | |
" <line x1=\"10\" y1=\"37\" x2=\"24\" y2=\"52\" />\n", | |
" <line x1=\"10\" y1=\"43\" x2=\"24\" y2=\"58\" />\n", | |
" <line x1=\"10\" y1=\"50\" x2=\"24\" y2=\"65\" />\n", | |
" <line x1=\"10\" y1=\"56\" x2=\"24\" y2=\"71\" />\n", | |
" <line x1=\"10\" y1=\"62\" x2=\"24\" y2=\"77\" />\n", | |
" <line x1=\"10\" y1=\"69\" x2=\"24\" y2=\"84\" />\n", | |
" <line x1=\"10\" y1=\"75\" x2=\"24\" y2=\"90\" />\n", | |
" <line x1=\"10\" y1=\"82\" x2=\"24\" y2=\"97\" />\n", | |
" <line x1=\"10\" y1=\"88\" x2=\"24\" y2=\"103\" />\n", | |
" <line x1=\"10\" y1=\"94\" x2=\"24\" y2=\"109\" />\n", | |
" <line x1=\"10\" y1=\"101\" x2=\"24\" y2=\"116\" />\n", | |
" <line x1=\"10\" y1=\"107\" x2=\"24\" y2=\"122\" />\n", | |
" <line x1=\"10\" y1=\"113\" x2=\"24\" y2=\"128\" />\n", | |
" <line x1=\"10\" y1=\"120\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,134.9485979497544 10.0,120.0\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"37\" y2=\"14\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 35.41261651458248,0.0 50.36121446433688,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"21\" x2=\"50\" y2=\"21\" />\n", | |
" <line x1=\"24\" y1=\"27\" x2=\"50\" y2=\"27\" />\n", | |
" <line x1=\"24\" y1=\"33\" x2=\"50\" y2=\"33\" />\n", | |
" <line x1=\"24\" y1=\"40\" x2=\"50\" y2=\"40\" />\n", | |
" <line x1=\"24\" y1=\"46\" x2=\"50\" y2=\"46\" />\n", | |
" <line x1=\"24\" y1=\"52\" x2=\"50\" y2=\"52\" />\n", | |
" <line x1=\"24\" y1=\"58\" x2=\"50\" y2=\"58\" />\n", | |
" <line x1=\"24\" y1=\"65\" x2=\"50\" y2=\"65\" />\n", | |
" <line x1=\"24\" y1=\"71\" x2=\"50\" y2=\"71\" />\n", | |
" <line x1=\"24\" y1=\"77\" x2=\"50\" y2=\"77\" />\n", | |
" <line x1=\"24\" y1=\"84\" x2=\"50\" y2=\"84\" />\n", | |
" <line x1=\"24\" y1=\"90\" x2=\"50\" y2=\"90\" />\n", | |
" <line x1=\"24\" y1=\"97\" x2=\"50\" y2=\"97\" />\n", | |
" <line x1=\"24\" y1=\"103\" x2=\"50\" y2=\"103\" />\n", | |
" <line x1=\"24\" y1=\"109\" x2=\"50\" y2=\"109\" />\n", | |
" <line x1=\"24\" y1=\"116\" x2=\"50\" y2=\"116\" />\n", | |
" <line x1=\"24\" y1=\"122\" x2=\"50\" y2=\"122\" />\n", | |
" <line x1=\"24\" y1=\"128\" x2=\"50\" y2=\"128\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"37\" y1=\"14\" x2=\"37\" y2=\"134\" />\n", | |
" <line x1=\"50\" y1=\"14\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"24.9485979497544,14.948597949754403 50.36121446433688,14.948597949754403 50.36121446433688,134.9485979497544 24.9485979497544,134.9485979497544\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"37.654906\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >79</text>\n", | |
" <text x=\"70.361214\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,70.361214,74.948598)\">23243988</text>\n", | |
" <text x=\"7.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,147.474299)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-c6e12059-2359-4f84-a5f1-6356e8f04dc9' class='xr-section-summary-in' type='checkbox' checked><label for='section-c6e12059-2359-4f84-a5f1-6356e8f04dc9' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Dataset URL :</span></dt><dd>https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb42f8302e6badfbc/pyfesom2/frontier/rossby42</dd></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.Dataset>\n", | |
"Dimensions: (nelem: 46260679, nod2: 23243988, nz: 80, nz1: 79, three: 3, time: 1)\n", | |
"Coordinates:\n", | |
" faces (nelem, three) uint32 dask.array<chunksize=(361412, 1), meta=np.ndarray>\n", | |
" lat (nod2) float32 dask.array<chunksize=(363188,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(363188,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 -20.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
"Dimensions without coordinates: nelem, nod2, three\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 100000, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4..." | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"r42 = rossby42.load() # data being remote needs to be explicitly loaded to optimize library's performance.\n", | |
"r42" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "psychological-brown", | |
"metadata": {}, | |
"source": [ | |
"### 1.1 Chunks of data can be fetched on demand.\n", | |
"\n", | |
"**Above .load() only fetches the metadata to show aggregated view of data, accessing the underlying data arrays of the variables fetches the underlying data.**\n", | |
"\n", | |
"**Note the chunksize displayed in above repr for the variable `temp`, it is the smallest amount of data that is retrieved on one fetch for the variable. For above dataset it was (naively) optimized to be about 100MB.**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"id": "peaceful-hospital", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:21.212143Z", | |
"start_time": "2021-07-03T05:58:21.013699Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 646 ms, sys: 245 ms, total: 891 ms\n", | |
"Wall time: 193 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray 'temp' ()>\n", | |
"array(33329110., dtype=float32)</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'temp'</div></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-42a9e279-4794-4ce4-a217-c329e1e53fe2' class='xr-array-in' type='checkbox' checked><label for='section-42a9e279-4794-4ce4-a217-c329e1e53fe2' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>3.333e+07</span></div><div class='xr-array-data'><pre>array(33329110., dtype=float32)</pre></div></div></li><li class='xr-section-item'><input id='section-36a3f9e8-6b39-4277-aedb-ea0b60f7a097' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-36a3f9e8-6b39-4277-aedb-ea0b60f7a097' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'></ul></div></li><li class='xr-section-item'><input id='section-e7896985-a44d-44bb-8164-3b8c59e3f6c2' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-e7896985-a44d-44bb-8164-3b8c59e3f6c2' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray 'temp' ()>\n", | |
"array(33329110., dtype=float32)" | |
] | |
}, | |
"execution_count": 3, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"nod2_inds, nz1_inds = slice(0,1000000), slice(0,20) # get remote zarr file corresponding to first chunk\n", | |
"\n", | |
"r42.temp.isel(nod2=nod2_inds, ).sum().compute() # 1 data request" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"id": "expensive-journey", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:21.247518Z", | |
"start_time": "2021-07-03T05:58:21.213683Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 33.2 ms, sys: 12.3 ms, total: 45.5 ms\n", | |
"Wall time: 28.4 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray 'temp' ()>\n", | |
"array(-4297473., dtype=float32)</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'temp'</div></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-4be95e70-73e5-4db9-bc98-3fffd3f8fbfc' class='xr-array-in' type='checkbox' checked><label for='section-4be95e70-73e5-4db9-bc98-3fffd3f8fbfc' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>-4.297e+06</span></div><div class='xr-array-data'><pre>array(-4297473., dtype=float32)</pre></div></div></li><li class='xr-section-item'><input id='section-e33b4ee5-1f92-4a93-8b10-7e9a7e9885e2' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-e33b4ee5-1f92-4a93-8b10-7e9a7e9885e2' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'></ul></div></li><li class='xr-section-item'><input id='section-fe555448-ad5a-4344-8b5f-4ad7ce46fa0c' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-fe555448-ad5a-4344-8b5f-4ad7ce46fa0c' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray 'temp' ()>\n", | |
"array(-4297473., dtype=float32)" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"nod2_inds, nz1_inds = slice(0,1000000), slice(0,20) # get 2 other remote zarr files \n", | |
"\n", | |
"r42.temp.isel(nod2=slice(100000,300000), nz1=slice(0,20)).sum().compute() # 2 new requests" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "resistant-labor", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-06-30T00:39:31.003819Z", | |
"start_time": "2021-06-30T00:39:30.994427Z" | |
} | |
}, | |
"source": [ | |
"### 1.2 Caching the remote data on-demand \n", | |
"\n", | |
"**While the subsets of data are accessed the data can be cached to local storage (by default in pyfesom2) to enable faster subsequent access.**" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"id": "brown-building", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:21.288519Z", | |
"start_time": "2021-07-03T05:58:21.248972Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 72 ms, sys: 969 µs, total: 73 ms\n", | |
"Wall time: 34.2 ms\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.DataArray 'temp' ()>\n", | |
"array(-0.93972117, dtype=float32)</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'temp'</div></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-14d19e88-a89e-42d9-8cf7-89a174139d2e' class='xr-array-in' type='checkbox' checked><label for='section-14d19e88-a89e-42d9-8cf7-89a174139d2e' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>-0.9397</span></div><div class='xr-array-data'><pre>array(-0.93972117, dtype=float32)</pre></div></div></li><li class='xr-section-item'><input id='section-a64ffa30-6a15-4be4-9a5d-dc1d94d23423' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-a64ffa30-6a15-4be4-9a5d-dc1d94d23423' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'></ul></div></li><li class='xr-section-item'><input id='section-93f018d8-fcb4-41e2-bc7b-75c0f7915b50' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-93f018d8-fcb4-41e2-bc7b-75c0f7915b50' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(0)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.DataArray 'temp' ()>\n", | |
"array(-0.93972117, dtype=float32)" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time \n", | |
"r42.temp.isel(nod2=slice(0,300000), nz1=slice(0,20)).mean().compute() # uses 3 cached chunks, no new network requests" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "processed-satin", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"\n", | |
"<div class=\"alert alert-block alert-info\">\n", | |
"\n", | |
"<h2>Notes on choice of data format for remote access</h2>\n", | |
" \n", | |
"In above access, Zarr format is used. This fomat is convinient and recommended to expose \"tagged\" standard data to external users, with out needing a special data access service -- a ubiquitions, simple http server is sufficient -- making it suitable for any data center.\n", | |
"\n", | |
"But:\n", | |
"<ul>\n", | |
" <li> Underlying model data is netcdf and exposing it as Zarr needs a data copy, despite Zarr format being efficient strategy for compression and can be afforded for some \"tagged\" HR datasets, it can be expensive otherwise.</li>\n", | |
" <li> Above commonly used operations like .sum(), .mean(), use the default (thredded) scheduler of dask for compute, this can be replaced by any other scheduler like process,SLURM etc depending on environment. Like:\n", | |
"\n", | |
"<code>\n", | |
" with dask.config.set(scheduler='processes'): # or any other\n", | |
" data.sum().compute()\n", | |
"</code>\n", | |
" </li>\n", | |
" <li> Choosing a chunk size is key and it data depends on what is anticipated predominant access pattern. Supporting efficient access for different access patterns like time series vs level by level would mean storing more copies of data. In above dataset a chunksize (100k in nod2, 40 in nz1) was chosen to naively optimize diffrent access patterns and download with each access fetching 100Mb of data.</li>\n", | |
" <li>Zarr library is actively being developped, its api in xarray is still considered experimental. It often introduces breaking changes to dataset access.</li>\n", | |
"</ul>\n", | |
"\n", | |
"More options for data dissemmination are disccussed later.\n", | |
"</div>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "amino-collar", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-02T12:28:14.846131Z", | |
"start_time": "2021-07-02T12:28:14.841559Z" | |
} | |
}, | |
"source": [ | |
"## 2 Selections on triangular unstructured data\n", | |
"\n", | |
"\n", | |
"**In above examples data was subset using indices of dimensions, more convinient approach for a earth scientist is to subset using labelled values for a dimension (coordinate) like: lat, lon.**\n", | |
"\n", | |
"<b>Particular selections patterns not addressed in commonly used libs for unstructured grids are:\n", | |
"\n", | |
" - Point selection ( or a trajectory)\n", | |
" - Region selection (box or polygon)\n", | |
"</b>\n", | |
"\n", | |
"\n", | |
"\n", | |
"<p style='color:gray'>\n", | |
"Pyfesom2 features used in this notebook are implemented on top of commonly used xarray to allow users flexibility to use other methods of xarray.<br>\n", | |
"For other selection examples see: https://nbviewer.jupyter.org/github/FESOM/pyfesom2/blob/master/notebooks/accessor_selections.ipynb\n", | |
"</p>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"id": "aggressive-hungary", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:21.526858Z", | |
"start_time": "2021-07-03T05:58:21.289833Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"/home/suvarchal/AWI/pyfesom2_temp/pyfesom2_data_caching/pyfesom2/datasets.py:142: UserWarning: Cache directory /home/suvarchal/.pyfesom2/cached_data/rossby42 for this dataset already contains entire data, if any errors persist use .clear_cache() method to clear the cache and re-download using .download() method.\n", | |
" warnings.warn(f'Cache directory {self.cache_path} for this dataset already contains entire data, if any errors persist use .clear_cache() method to clear the cache and re-download using .download() method.')\n" | |
] | |
} | |
], | |
"source": [ | |
"rossby42.download() # download entire dataset to get reliable performance stats of selection, \n", | |
" # by removing data fetching time. \n", | |
" # rossby42.clear_cache() can be used to clear current cache.\n", | |
" # alternative would be to generate a dummy FESOM like data using \n", | |
" # pyfesom2.datasets.fesom_like(def fesom_like(spatial_size=2300000)\n", | |
"r42 = rossby42.load() # reload from cache" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "brazilian-rover", | |
"metadata": {}, | |
"source": [ | |
"### 2.1 Point selection: selecting 1M - 10M points." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"id": "south-rider", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:21.540354Z", | |
"start_time": "2021-07-03T05:58:21.532987Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"gen_max_ocn_lonlat = lambda size: (np.zeros(size)-170, np.linspace(-90,90,size)) # points generator\n", | |
" # naively maximize ocean region along -170 deg E and all latitudes" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"id": "christian-oklahoma", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:22.703783Z", | |
"start_time": "2021-07-03T05:58:21.550745Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7fd071b21a90>]" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 720x432 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"import cartopy.crs as ccrs\n", | |
"fig = plt.figure(figsize=(10,6))\n", | |
"ax = fig.add_subplot(projection=ccrs.PlateCarree(central_longitude=180))\n", | |
"ax.stock_img()\n", | |
"lons, lats = gen_max_ocn_lonlat(100) # just 100 points to show location on a map\n", | |
"ax.plot(lons, lats, color='darkred', transform=ccrs.PlateCarree())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"id": "romantic-uncle", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:22.711963Z", | |
"start_time": "2021-07-03T05:58:22.705418Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"lons, lats = gen_max_ocn_lonlat(1000000) # 1M points" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"id": "elect-uganda", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:28.411546Z", | |
"start_time": "2021-07-03T05:58:22.713827Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 7.44 s, sys: 406 ms, total: 7.85 s\n", | |
"Wall time: 5.68 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", | |
"Dimensions: (nod2: 1000000, nz: 80, nz1: 79, time: 1)\n", | |
"Coordinates:\n", | |
" lat (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
" distance (nod2) float64 0.0 0.0201 0.04021 0.06031 ... 2e+04 2e+04 2e+04\n", | |
"Dimensions without coordinates: nod2\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 58718, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4...</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-fb8b6a8b-537f-4eb1-a5e7-0b7d9e94cb36' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-fb8b6a8b-537f-4eb1-a5e7-0b7d9e94cb36' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>nod2</span>: 1000000</li><li><span class='xr-has-index'>nz</span>: 80</li><li><span class='xr-has-index'>nz1</span>: 79</li><li><span class='xr-has-index'>time</span>: 1</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-3d21fcda-0119-4c13-9203-9994a74b83b7' class='xr-section-summary-in' type='checkbox' checked><label for='section-3d21fcda-0119-4c13-9203-9994a74b83b7' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>lat</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(121813,), meta=np.ndarray></div><input id='attrs-1f4ba9d8-ad84-41ad-bf5b-4922745e7ed1' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-1f4ba9d8-ad84-41ad-bf5b-4922745e7ed1' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-6181a7c0-822a-478c-9073-96504b835f74' class='xr-var-data-in' type='checkbox'><label for='data-6181a7c0-822a-478c-9073-96504b835f74' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 4.00 MB </td> <td> 1.41 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1000000,) </td> <td> (351629,) </td></tr>\n", | |
" <tr><th> Count </th><td> 77 Tasks </td><td> 12 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", | |
" <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"25\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n", | |
" <line x1=\"77\" y1=\"0\" x2=\"77\" y2=\"25\" />\n", | |
" <line x1=\"92\" y1=\"0\" x2=\"92\" y2=\"25\" />\n", | |
" <line x1=\"98\" y1=\"0\" x2=\"98\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1000000</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(121813,), meta=np.ndarray></div><input id='attrs-bb67054e-4a90-4542-a49a-71b1f1184ce8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-bb67054e-4a90-4542-a49a-71b1f1184ce8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-ac2e862e-e9b2-4d44-9815-1f1ab91accbc' class='xr-var-data-in' type='checkbox'><label for='data-ac2e862e-e9b2-4d44-9815-1f1ab91accbc' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 4.00 MB </td> <td> 1.41 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1000000,) </td> <td> (351629,) </td></tr>\n", | |
" <tr><th> Count </th><td> 77 Tasks </td><td> 12 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", | |
" <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"25\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n", | |
" <line x1=\"77\" y1=\"0\" x2=\"77\" y2=\"25\" />\n", | |
" <line x1=\"92\" y1=\"0\" x2=\"92\" y2=\"25\" />\n", | |
" <line x1=\"98\" y1=\"0\" x2=\"98\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1000000</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz</span></div><div class='xr-var-dims'>(nz)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-0.0 -5.0 ... -6.05e+03 -6.55e+03</div><input id='attrs-b38fdf9f-283e-43af-a680-14d1d02a41d6' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b38fdf9f-283e-43af-a680-14d1d02a41d6' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c6151984-c923-41b1-92db-11e12fda75b7' class='xr-var-data-in' type='checkbox'><label for='data-c6151984-c923-41b1-92db-11e12fda75b7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-0.000e+00, -5.000e+00, -1.000e+01, -2.000e+01, -3.000e+01, -4.000e+01,\n", | |
" -5.000e+01, -6.000e+01, -7.000e+01, -8.000e+01, -9.000e+01, -1.000e+02,\n", | |
" -1.120e+02, -1.250e+02, -1.400e+02, -1.550e+02, -1.700e+02, -1.850e+02,\n", | |
" -2.000e+02, -2.150e+02, -2.300e+02, -2.500e+02, -2.750e+02, -3.000e+02,\n", | |
" -3.250e+02, -3.500e+02, -3.750e+02, -4.000e+02, -4.300e+02, -4.600e+02,\n", | |
" -4.900e+02, -5.200e+02, -5.500e+02, -5.800e+02, -6.200e+02, -6.600e+02,\n", | |
" -7.000e+02, -7.500e+02, -8.000e+02, -8.500e+02, -9.000e+02, -9.500e+02,\n", | |
" -1.000e+03, -1.050e+03, -1.100e+03, -1.175e+03, -1.250e+03, -1.325e+03,\n", | |
" -1.400e+03, -1.475e+03, -1.550e+03, -1.650e+03, -1.750e+03, -1.850e+03,\n", | |
" -1.950e+03, -2.050e+03, -2.150e+03, -2.250e+03, -2.350e+03, -2.500e+03,\n", | |
" -2.650e+03, -2.800e+03, -2.950e+03, -3.100e+03, -3.300e+03, -3.400e+03,\n", | |
" -3.600e+03, -3.800e+03, -4.000e+03, -4.200e+03, -4.400e+03, -4.600e+03,\n", | |
" -4.800e+03, -5.000e+03, -5.200e+03, -5.400e+03, -5.600e+03, -5.800e+03,\n", | |
" -6.050e+03, -6.550e+03], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz1</span></div><div class='xr-var-dims'>(nz1)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-2.5 -7.5 ... -5.925e+03 -6.3e+03</div><input id='attrs-f86e8ee3-2c61-4ca2-a424-97e68cc396f7' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f86e8ee3-2c61-4ca2-a424-97e68cc396f7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a3b4a698-3245-4a9f-8543-580bf5e8b0cd' class='xr-var-data-in' type='checkbox'><label for='data-a3b4a698-3245-4a9f-8543-580bf5e8b0cd' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-2.5000e+00, -7.5000e+00, -1.5000e+01, -2.5000e+01, -3.5000e+01,\n", | |
" -4.5000e+01, -5.5000e+01, -6.5000e+01, -7.5000e+01, -8.5000e+01,\n", | |
" -9.5000e+01, -1.0600e+02, -1.1850e+02, -1.3250e+02, -1.4750e+02,\n", | |
" -1.6250e+02, -1.7750e+02, -1.9250e+02, -2.0750e+02, -2.2250e+02,\n", | |
" -2.4000e+02, -2.6250e+02, -2.8750e+02, -3.1250e+02, -3.3750e+02,\n", | |
" -3.6250e+02, -3.8750e+02, -4.1500e+02, -4.4500e+02, -4.7500e+02,\n", | |
" -5.0500e+02, -5.3500e+02, -5.6500e+02, -6.0000e+02, -6.4000e+02,\n", | |
" -6.8000e+02, -7.2500e+02, -7.7500e+02, -8.2500e+02, -8.7500e+02,\n", | |
" -9.2500e+02, -9.7500e+02, -1.0250e+03, -1.0750e+03, -1.1375e+03,\n", | |
" -1.2125e+03, -1.2875e+03, -1.3625e+03, -1.4375e+03, -1.5125e+03,\n", | |
" -1.6000e+03, -1.7000e+03, -1.8000e+03, -1.9000e+03, -2.0000e+03,\n", | |
" -2.1000e+03, -2.2000e+03, -2.3000e+03, -2.4250e+03, -2.5750e+03,\n", | |
" -2.7250e+03, -2.8750e+03, -3.0250e+03, -3.2000e+03, -3.3500e+03,\n", | |
" -3.5000e+03, -3.7000e+03, -3.9000e+03, -4.1000e+03, -4.3000e+03,\n", | |
" -4.5000e+03, -4.7000e+03, -4.9000e+03, -5.1000e+03, -5.3000e+03,\n", | |
" -5.5000e+03, -5.7000e+03, -5.9250e+03, -6.3000e+03])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1948-01-01</div><input id='attrs-108a1003-aa83-4304-bf8f-0d1f6796f8f4' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-108a1003-aa83-4304-bf8f-0d1f6796f8f4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-c6ad4a5e-0a0d-4b24-81f2-3ffc6d9a3650' class='xr-var-data-in' type='checkbox'><label for='data-c6ad4a5e-0a0d-4b24-81f2-3ffc6d9a3650' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1948-01-01T00:00:00.000000000'], dtype='datetime64[ns]')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>distance</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 0.0201 0.04021 ... 2e+04 2e+04</div><input id='attrs-4cbbc265-de0e-43ac-984a-21352ed6406f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-4cbbc265-de0e-43ac-984a-21352ed6406f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8271e6d9-5084-4131-b211-662f6f1fa632' class='xr-var-data-in' type='checkbox'><label for='data-8271e6d9-5084-4131-b211-662f6f1fa632' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>km</dd><dt><span>long_name :</span></dt><dd>distance along trajectory</dd></dl></div><div class='xr-var-data'><pre>array([0.00000000e+00, 2.01049364e-02, 4.02098729e-02, ...,\n", | |
" 2.00038912e+04, 2.00039114e+04, 2.00039315e+04])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-15e57578-ac0a-4ffe-b2d2-4f2cff5332f7' class='xr-section-summary-in' type='checkbox' checked><label for='section-15e57578-ac0a-4ffe-b2d2-4f2cff5332f7' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>temp</span></div><div class='xr-var-dims'>(time, nod2, nz1)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1, 58718, 40), meta=np.ndarray></div><input id='attrs-13efc927-af2e-49b0-a5af-7bf417e8bd5f' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-13efc927-af2e-49b0-a5af-7bf417e8bd5f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-823afb53-f357-4cfe-a777-beb4e5595d45' class='xr-var-data-in' type='checkbox'><label for='data-823afb53-f357-4cfe-a777-beb4e5595d45' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>temperature</dd><dt><span>units :</span></dt><dd>C</dd></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 316.00 MB </td> <td> 28.13 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1, 1000000, 79) </td> <td> (1, 175820, 40) </td></tr>\n", | |
" <tr><th> Count </th><td> 521 Tasks </td><td> 54 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"100\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"10\" y1=\"7\" x2=\"24\" y2=\"21\" />\n", | |
" <line x1=\"10\" y1=\"11\" x2=\"24\" y2=\"26\" />\n", | |
" <line x1=\"10\" y1=\"14\" x2=\"24\" y2=\"29\" />\n", | |
" <line x1=\"10\" y1=\"18\" x2=\"24\" y2=\"33\" />\n", | |
" <line x1=\"10\" y1=\"32\" x2=\"24\" y2=\"47\" />\n", | |
" <line x1=\"10\" y1=\"35\" x2=\"24\" y2=\"50\" />\n", | |
" <line x1=\"10\" y1=\"56\" x2=\"24\" y2=\"71\" />\n", | |
" <line x1=\"10\" y1=\"80\" x2=\"24\" y2=\"95\" />\n", | |
" <line x1=\"10\" y1=\"81\" x2=\"24\" y2=\"96\" />\n", | |
" <line x1=\"10\" y1=\"92\" x2=\"24\" y2=\"107\" />\n", | |
" <line x1=\"10\" y1=\"92\" x2=\"24\" y2=\"107\" />\n", | |
" <line x1=\"10\" y1=\"101\" x2=\"24\" y2=\"116\" />\n", | |
" <line x1=\"10\" y1=\"102\" x2=\"24\" y2=\"117\" />\n", | |
" <line x1=\"10\" y1=\"105\" x2=\"24\" y2=\"120\" />\n", | |
" <line x1=\"10\" y1=\"109\" x2=\"24\" y2=\"124\" />\n", | |
" <line x1=\"10\" y1=\"112\" x2=\"24\" y2=\"127\" />\n", | |
" <line x1=\"10\" y1=\"119\" x2=\"24\" y2=\"134\" />\n", | |
" <line x1=\"10\" y1=\"119\" x2=\"24\" y2=\"134\" />\n", | |
" <line x1=\"10\" y1=\"120\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,134.9485979497544 10.0,120.0\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"37\" y2=\"14\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 35.41261651458248,0.0 50.36121446433688,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"21\" x2=\"50\" y2=\"21\" />\n", | |
" <line x1=\"24\" y1=\"26\" x2=\"50\" y2=\"26\" />\n", | |
" <line x1=\"24\" y1=\"29\" x2=\"50\" y2=\"29\" />\n", | |
" <line x1=\"24\" y1=\"33\" x2=\"50\" y2=\"33\" />\n", | |
" <line x1=\"24\" y1=\"47\" x2=\"50\" y2=\"47\" />\n", | |
" <line x1=\"24\" y1=\"50\" x2=\"50\" y2=\"50\" />\n", | |
" <line x1=\"24\" y1=\"71\" x2=\"50\" y2=\"71\" />\n", | |
" <line x1=\"24\" y1=\"95\" x2=\"50\" y2=\"95\" />\n", | |
" <line x1=\"24\" y1=\"96\" x2=\"50\" y2=\"96\" />\n", | |
" <line x1=\"24\" y1=\"107\" x2=\"50\" y2=\"107\" />\n", | |
" <line x1=\"24\" y1=\"107\" x2=\"50\" y2=\"107\" />\n", | |
" <line x1=\"24\" y1=\"116\" x2=\"50\" y2=\"116\" />\n", | |
" <line x1=\"24\" y1=\"117\" x2=\"50\" y2=\"117\" />\n", | |
" <line x1=\"24\" y1=\"120\" x2=\"50\" y2=\"120\" />\n", | |
" <line x1=\"24\" y1=\"124\" x2=\"50\" y2=\"124\" />\n", | |
" <line x1=\"24\" y1=\"127\" x2=\"50\" y2=\"127\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"37\" y1=\"14\" x2=\"37\" y2=\"134\" />\n", | |
" <line x1=\"50\" y1=\"14\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"24.9485979497544,14.948597949754403 50.36121446433688,14.948597949754403 50.36121446433688,134.9485979497544 24.9485979497544,134.9485979497544\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"37.654906\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >79</text>\n", | |
" <text x=\"70.361214\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,70.361214,74.948598)\">1000000</text>\n", | |
" <text x=\"7.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,147.474299)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-df462d4e-9a2b-481b-b89f-5fe7f6e61ff2' class='xr-section-summary-in' type='checkbox' checked><label for='section-df462d4e-9a2b-481b-b89f-5fe7f6e61ff2' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Dataset URL :</span></dt><dd>https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb42f8302e6badfbc/pyfesom2/frontier/rossby42</dd></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.Dataset>\n", | |
"Dimensions: (nod2: 1000000, nz: 80, nz1: 79, time: 1)\n", | |
"Coordinates:\n", | |
" lat (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
" distance (nod2) float64 0.0 0.0201 0.04021 0.06031 ... 2e+04 2e+04 2e+04\n", | |
"Dimensions without coordinates: nod2\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 58718, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4..." | |
] | |
}, | |
"execution_count": 10, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"r42.pyfesom2.select_points(lon=lons, lat=lats) # select 1M points" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "soviet-premises", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-06-30T21:23:09.280890Z", | |
"start_time": "2021-06-30T21:23:09.276466Z" | |
} | |
}, | |
"source": [ | |
"<div class=\"alert alert-block alert-info\"><b>Performance notes:</b>\n", | |
" <br>\n", | |
"<ul>\n", | |
"<li> First selection on a data takes longer, it includes time to generate underlying kdtree. This tree is cached in memory to facilitate subsequent faster selection on the same dataset. </li>\n", | |
"<li>Above selection time also includes time to compute distance along the trajectory diagnostic.</li>\n", | |
"</ul>\n", | |
" </div>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"id": "square-consolidation", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:29.569243Z", | |
"start_time": "2021-07-03T05:58:28.413541Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 2.62 s, sys: 110 ms, total: 2.73 s\n", | |
"Wall time: 1.14 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", | |
"Dimensions: (nod2: 1000000, nz: 80, nz1: 79, time: 1)\n", | |
"Coordinates:\n", | |
" lat (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
" distance (nod2) float64 0.0 0.0201 0.04021 0.06031 ... 2e+04 2e+04 2e+04\n", | |
"Dimensions without coordinates: nod2\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 58718, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4...</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-54249a56-d63f-465c-9687-4a93888bc247' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-54249a56-d63f-465c-9687-4a93888bc247' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>nod2</span>: 1000000</li><li><span class='xr-has-index'>nz</span>: 80</li><li><span class='xr-has-index'>nz1</span>: 79</li><li><span class='xr-has-index'>time</span>: 1</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-03a4d156-fe53-484c-9370-8ca734443253' class='xr-section-summary-in' type='checkbox' checked><label for='section-03a4d156-fe53-484c-9370-8ca734443253' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>lat</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(121813,), meta=np.ndarray></div><input id='attrs-2d119d9d-95ed-46ea-9359-73efe3bd7b60' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-2d119d9d-95ed-46ea-9359-73efe3bd7b60' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-71c89557-d1c1-4cae-a577-84abbc20fbf1' class='xr-var-data-in' type='checkbox'><label for='data-71c89557-d1c1-4cae-a577-84abbc20fbf1' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 4.00 MB </td> <td> 1.41 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1000000,) </td> <td> (351629,) </td></tr>\n", | |
" <tr><th> Count </th><td> 77 Tasks </td><td> 12 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", | |
" <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"25\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n", | |
" <line x1=\"77\" y1=\"0\" x2=\"77\" y2=\"25\" />\n", | |
" <line x1=\"92\" y1=\"0\" x2=\"92\" y2=\"25\" />\n", | |
" <line x1=\"98\" y1=\"0\" x2=\"98\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1000000</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(121813,), meta=np.ndarray></div><input id='attrs-791d9b78-0842-4f7a-b738-96fd07cfda1d' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-791d9b78-0842-4f7a-b738-96fd07cfda1d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-01cb2f12-d31c-4db1-bb5d-c8a147387ea9' class='xr-var-data-in' type='checkbox'><label for='data-01cb2f12-d31c-4db1-bb5d-c8a147387ea9' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 4.00 MB </td> <td> 1.41 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1000000,) </td> <td> (351629,) </td></tr>\n", | |
" <tr><th> Count </th><td> 77 Tasks </td><td> 12 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", | |
" <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"25\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n", | |
" <line x1=\"77\" y1=\"0\" x2=\"77\" y2=\"25\" />\n", | |
" <line x1=\"92\" y1=\"0\" x2=\"92\" y2=\"25\" />\n", | |
" <line x1=\"98\" y1=\"0\" x2=\"98\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >1000000</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz</span></div><div class='xr-var-dims'>(nz)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-0.0 -5.0 ... -6.05e+03 -6.55e+03</div><input id='attrs-262e3ef8-cbb9-4769-a1cf-c7aeb686b09a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-262e3ef8-cbb9-4769-a1cf-c7aeb686b09a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-71b94bbf-92a5-437e-ac55-64fd98b8e2cd' class='xr-var-data-in' type='checkbox'><label for='data-71b94bbf-92a5-437e-ac55-64fd98b8e2cd' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-0.000e+00, -5.000e+00, -1.000e+01, -2.000e+01, -3.000e+01, -4.000e+01,\n", | |
" -5.000e+01, -6.000e+01, -7.000e+01, -8.000e+01, -9.000e+01, -1.000e+02,\n", | |
" -1.120e+02, -1.250e+02, -1.400e+02, -1.550e+02, -1.700e+02, -1.850e+02,\n", | |
" -2.000e+02, -2.150e+02, -2.300e+02, -2.500e+02, -2.750e+02, -3.000e+02,\n", | |
" -3.250e+02, -3.500e+02, -3.750e+02, -4.000e+02, -4.300e+02, -4.600e+02,\n", | |
" -4.900e+02, -5.200e+02, -5.500e+02, -5.800e+02, -6.200e+02, -6.600e+02,\n", | |
" -7.000e+02, -7.500e+02, -8.000e+02, -8.500e+02, -9.000e+02, -9.500e+02,\n", | |
" -1.000e+03, -1.050e+03, -1.100e+03, -1.175e+03, -1.250e+03, -1.325e+03,\n", | |
" -1.400e+03, -1.475e+03, -1.550e+03, -1.650e+03, -1.750e+03, -1.850e+03,\n", | |
" -1.950e+03, -2.050e+03, -2.150e+03, -2.250e+03, -2.350e+03, -2.500e+03,\n", | |
" -2.650e+03, -2.800e+03, -2.950e+03, -3.100e+03, -3.300e+03, -3.400e+03,\n", | |
" -3.600e+03, -3.800e+03, -4.000e+03, -4.200e+03, -4.400e+03, -4.600e+03,\n", | |
" -4.800e+03, -5.000e+03, -5.200e+03, -5.400e+03, -5.600e+03, -5.800e+03,\n", | |
" -6.050e+03, -6.550e+03], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz1</span></div><div class='xr-var-dims'>(nz1)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-2.5 -7.5 ... -5.925e+03 -6.3e+03</div><input id='attrs-f5c54dad-e234-4f27-b4ae-b5db2beb3bfc' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f5c54dad-e234-4f27-b4ae-b5db2beb3bfc' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-543e43d8-669c-46ac-a40d-794395068b6f' class='xr-var-data-in' type='checkbox'><label for='data-543e43d8-669c-46ac-a40d-794395068b6f' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-2.5000e+00, -7.5000e+00, -1.5000e+01, -2.5000e+01, -3.5000e+01,\n", | |
" -4.5000e+01, -5.5000e+01, -6.5000e+01, -7.5000e+01, -8.5000e+01,\n", | |
" -9.5000e+01, -1.0600e+02, -1.1850e+02, -1.3250e+02, -1.4750e+02,\n", | |
" -1.6250e+02, -1.7750e+02, -1.9250e+02, -2.0750e+02, -2.2250e+02,\n", | |
" -2.4000e+02, -2.6250e+02, -2.8750e+02, -3.1250e+02, -3.3750e+02,\n", | |
" -3.6250e+02, -3.8750e+02, -4.1500e+02, -4.4500e+02, -4.7500e+02,\n", | |
" -5.0500e+02, -5.3500e+02, -5.6500e+02, -6.0000e+02, -6.4000e+02,\n", | |
" -6.8000e+02, -7.2500e+02, -7.7500e+02, -8.2500e+02, -8.7500e+02,\n", | |
" -9.2500e+02, -9.7500e+02, -1.0250e+03, -1.0750e+03, -1.1375e+03,\n", | |
" -1.2125e+03, -1.2875e+03, -1.3625e+03, -1.4375e+03, -1.5125e+03,\n", | |
" -1.6000e+03, -1.7000e+03, -1.8000e+03, -1.9000e+03, -2.0000e+03,\n", | |
" -2.1000e+03, -2.2000e+03, -2.3000e+03, -2.4250e+03, -2.5750e+03,\n", | |
" -2.7250e+03, -2.8750e+03, -3.0250e+03, -3.2000e+03, -3.3500e+03,\n", | |
" -3.5000e+03, -3.7000e+03, -3.9000e+03, -4.1000e+03, -4.3000e+03,\n", | |
" -4.5000e+03, -4.7000e+03, -4.9000e+03, -5.1000e+03, -5.3000e+03,\n", | |
" -5.5000e+03, -5.7000e+03, -5.9250e+03, -6.3000e+03])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1948-01-01</div><input id='attrs-fd51842c-457f-49f3-9433-35fd5f5c9ce9' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-fd51842c-457f-49f3-9433-35fd5f5c9ce9' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-245f29a4-c4f9-4f29-9d9d-c92c135f59ef' class='xr-var-data-in' type='checkbox'><label for='data-245f29a4-c4f9-4f29-9d9d-c92c135f59ef' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1948-01-01T00:00:00.000000000'], dtype='datetime64[ns]')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>distance</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 0.0201 0.04021 ... 2e+04 2e+04</div><input id='attrs-07d76c59-75d3-45c7-b5c6-5d90e0c83032' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-07d76c59-75d3-45c7-b5c6-5d90e0c83032' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a7913077-25d0-423a-9a5e-520a7f3fb7f7' class='xr-var-data-in' type='checkbox'><label for='data-a7913077-25d0-423a-9a5e-520a7f3fb7f7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>km</dd><dt><span>long_name :</span></dt><dd>distance along trajectory</dd></dl></div><div class='xr-var-data'><pre>array([0.00000000e+00, 2.01049364e-02, 4.02098729e-02, ...,\n", | |
" 2.00038912e+04, 2.00039114e+04, 2.00039315e+04])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-8afd3bc4-df05-4966-a653-3826d696ab5c' class='xr-section-summary-in' type='checkbox' checked><label for='section-8afd3bc4-df05-4966-a653-3826d696ab5c' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>temp</span></div><div class='xr-var-dims'>(time, nod2, nz1)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1, 58718, 40), meta=np.ndarray></div><input id='attrs-84286371-55d4-475c-9a85-249c0cb838e0' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-84286371-55d4-475c-9a85-249c0cb838e0' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-d0c81f24-d4a4-4202-8c8f-ffc66cad4964' class='xr-var-data-in' type='checkbox'><label for='data-d0c81f24-d4a4-4202-8c8f-ffc66cad4964' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>temperature</dd><dt><span>units :</span></dt><dd>C</dd></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 316.00 MB </td> <td> 28.13 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1, 1000000, 79) </td> <td> (1, 175820, 40) </td></tr>\n", | |
" <tr><th> Count </th><td> 521 Tasks </td><td> 54 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"100\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"10\" y1=\"7\" x2=\"24\" y2=\"21\" />\n", | |
" <line x1=\"10\" y1=\"11\" x2=\"24\" y2=\"26\" />\n", | |
" <line x1=\"10\" y1=\"14\" x2=\"24\" y2=\"29\" />\n", | |
" <line x1=\"10\" y1=\"18\" x2=\"24\" y2=\"33\" />\n", | |
" <line x1=\"10\" y1=\"32\" x2=\"24\" y2=\"47\" />\n", | |
" <line x1=\"10\" y1=\"35\" x2=\"24\" y2=\"50\" />\n", | |
" <line x1=\"10\" y1=\"56\" x2=\"24\" y2=\"71\" />\n", | |
" <line x1=\"10\" y1=\"80\" x2=\"24\" y2=\"95\" />\n", | |
" <line x1=\"10\" y1=\"81\" x2=\"24\" y2=\"96\" />\n", | |
" <line x1=\"10\" y1=\"92\" x2=\"24\" y2=\"107\" />\n", | |
" <line x1=\"10\" y1=\"92\" x2=\"24\" y2=\"107\" />\n", | |
" <line x1=\"10\" y1=\"101\" x2=\"24\" y2=\"116\" />\n", | |
" <line x1=\"10\" y1=\"102\" x2=\"24\" y2=\"117\" />\n", | |
" <line x1=\"10\" y1=\"105\" x2=\"24\" y2=\"120\" />\n", | |
" <line x1=\"10\" y1=\"109\" x2=\"24\" y2=\"124\" />\n", | |
" <line x1=\"10\" y1=\"112\" x2=\"24\" y2=\"127\" />\n", | |
" <line x1=\"10\" y1=\"119\" x2=\"24\" y2=\"134\" />\n", | |
" <line x1=\"10\" y1=\"119\" x2=\"24\" y2=\"134\" />\n", | |
" <line x1=\"10\" y1=\"120\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,134.9485979497544 10.0,120.0\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"37\" y2=\"14\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 35.41261651458248,0.0 50.36121446433688,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"21\" x2=\"50\" y2=\"21\" />\n", | |
" <line x1=\"24\" y1=\"26\" x2=\"50\" y2=\"26\" />\n", | |
" <line x1=\"24\" y1=\"29\" x2=\"50\" y2=\"29\" />\n", | |
" <line x1=\"24\" y1=\"33\" x2=\"50\" y2=\"33\" />\n", | |
" <line x1=\"24\" y1=\"47\" x2=\"50\" y2=\"47\" />\n", | |
" <line x1=\"24\" y1=\"50\" x2=\"50\" y2=\"50\" />\n", | |
" <line x1=\"24\" y1=\"71\" x2=\"50\" y2=\"71\" />\n", | |
" <line x1=\"24\" y1=\"95\" x2=\"50\" y2=\"95\" />\n", | |
" <line x1=\"24\" y1=\"96\" x2=\"50\" y2=\"96\" />\n", | |
" <line x1=\"24\" y1=\"107\" x2=\"50\" y2=\"107\" />\n", | |
" <line x1=\"24\" y1=\"107\" x2=\"50\" y2=\"107\" />\n", | |
" <line x1=\"24\" y1=\"116\" x2=\"50\" y2=\"116\" />\n", | |
" <line x1=\"24\" y1=\"117\" x2=\"50\" y2=\"117\" />\n", | |
" <line x1=\"24\" y1=\"120\" x2=\"50\" y2=\"120\" />\n", | |
" <line x1=\"24\" y1=\"124\" x2=\"50\" y2=\"124\" />\n", | |
" <line x1=\"24\" y1=\"127\" x2=\"50\" y2=\"127\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"37\" y1=\"14\" x2=\"37\" y2=\"134\" />\n", | |
" <line x1=\"50\" y1=\"14\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"24.9485979497544,14.948597949754403 50.36121446433688,14.948597949754403 50.36121446433688,134.9485979497544 24.9485979497544,134.9485979497544\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"37.654906\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >79</text>\n", | |
" <text x=\"70.361214\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,70.361214,74.948598)\">1000000</text>\n", | |
" <text x=\"7.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,147.474299)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-e4a61309-3bd2-46ce-b794-dcfb71b30132' class='xr-section-summary-in' type='checkbox' checked><label for='section-e4a61309-3bd2-46ce-b794-dcfb71b30132' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Dataset URL :</span></dt><dd>https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb42f8302e6badfbc/pyfesom2/frontier/rossby42</dd></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.Dataset>\n", | |
"Dimensions: (nod2: 1000000, nz: 80, nz1: 79, time: 1)\n", | |
"Coordinates:\n", | |
" lat (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(121813,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
" distance (nod2) float64 0.0 0.0201 0.04021 0.06031 ... 2e+04 2e+04 2e+04\n", | |
"Dimensions without coordinates: nod2\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 58718, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4..." | |
] | |
}, | |
"execution_count": 11, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"r42.pyfesom2.select_points(lon=lons, lat=lats) # reselect 1M points" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"id": "stretch-camcorder", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:29.655934Z", | |
"start_time": "2021-07-03T05:58:29.570871Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"lons, lats = gen_max_ocn_lonlat(10000000) # 10M points " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"id": "gentle-lover", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:39.030405Z", | |
"start_time": "2021-07-03T05:58:29.657509Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 24.1 s, sys: 447 ms, total: 24.6 s\n", | |
"Wall time: 9.36 s\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n", | |
"<defs>\n", | |
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n", | |
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n", | |
"</symbol>\n", | |
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n", | |
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n", | |
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n", | |
"</symbol>\n", | |
"</defs>\n", | |
"</svg>\n", | |
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n", | |
" *\n", | |
" */\n", | |
"\n", | |
":root {\n", | |
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n", | |
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n", | |
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n", | |
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n", | |
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n", | |
" --xr-background-color: var(--jp-layout-color0, white);\n", | |
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n", | |
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n", | |
"}\n", | |
"\n", | |
"html[theme=dark],\n", | |
"body.vscode-dark {\n", | |
" --xr-font-color0: rgba(255, 255, 255, 1);\n", | |
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n", | |
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n", | |
" --xr-border-color: #1F1F1F;\n", | |
" --xr-disabled-color: #515151;\n", | |
" --xr-background-color: #111111;\n", | |
" --xr-background-color-row-even: #111111;\n", | |
" --xr-background-color-row-odd: #313131;\n", | |
"}\n", | |
"\n", | |
".xr-wrap {\n", | |
" display: block;\n", | |
" min-width: 300px;\n", | |
" max-width: 700px;\n", | |
"}\n", | |
"\n", | |
".xr-text-repr-fallback {\n", | |
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-header {\n", | |
" padding-top: 6px;\n", | |
" padding-bottom: 6px;\n", | |
" margin-bottom: 4px;\n", | |
" border-bottom: solid 1px var(--xr-border-color);\n", | |
"}\n", | |
"\n", | |
".xr-header > div,\n", | |
".xr-header > ul {\n", | |
" display: inline;\n", | |
" margin-top: 0;\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type,\n", | |
".xr-array-name {\n", | |
" margin-left: 2px;\n", | |
" margin-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-obj-type {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-sections {\n", | |
" padding-left: 0 !important;\n", | |
" display: grid;\n", | |
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n", | |
"}\n", | |
"\n", | |
".xr-section-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-item input + label {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label {\n", | |
" cursor: pointer;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-item input:enabled + label:hover {\n", | |
" color: var(--xr-font-color0);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary {\n", | |
" grid-column: 1;\n", | |
" color: var(--xr-font-color2);\n", | |
" font-weight: 500;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary > span {\n", | |
" display: inline-block;\n", | |
" padding-left: 0.5em;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label {\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in + label:before {\n", | |
" display: inline-block;\n", | |
" content: '►';\n", | |
" font-size: 11px;\n", | |
" width: 15px;\n", | |
" text-align: center;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:disabled + label:before {\n", | |
" color: var(--xr-disabled-color);\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label:before {\n", | |
" content: '▼';\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked + label > span {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary,\n", | |
".xr-section-inline-details {\n", | |
" padding-top: 4px;\n", | |
" padding-bottom: 4px;\n", | |
"}\n", | |
"\n", | |
".xr-section-inline-details {\n", | |
" grid-column: 2 / -1;\n", | |
"}\n", | |
"\n", | |
".xr-section-details {\n", | |
" display: none;\n", | |
" grid-column: 1 / -1;\n", | |
" margin-bottom: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-section-summary-in:checked ~ .xr-section-details {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap {\n", | |
" grid-column: 1 / -1;\n", | |
" display: grid;\n", | |
" grid-template-columns: 20px auto;\n", | |
"}\n", | |
"\n", | |
".xr-array-wrap > label {\n", | |
" grid-column: 1;\n", | |
" vertical-align: top;\n", | |
"}\n", | |
"\n", | |
".xr-preview {\n", | |
" color: var(--xr-font-color3);\n", | |
"}\n", | |
"\n", | |
".xr-array-preview,\n", | |
".xr-array-data {\n", | |
" padding: 0 5px !important;\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-array-data,\n", | |
".xr-array-in:checked ~ .xr-array-preview {\n", | |
" display: none;\n", | |
"}\n", | |
"\n", | |
".xr-array-in:checked ~ .xr-array-data,\n", | |
".xr-array-preview {\n", | |
" display: inline-block;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list {\n", | |
" display: inline-block !important;\n", | |
" list-style: none;\n", | |
" padding: 0 !important;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li {\n", | |
" display: inline-block;\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:before {\n", | |
" content: '(';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list:after {\n", | |
" content: ')';\n", | |
"}\n", | |
"\n", | |
".xr-dim-list li:not(:last-child):after {\n", | |
" content: ',';\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-has-index {\n", | |
" font-weight: bold;\n", | |
"}\n", | |
"\n", | |
".xr-var-list,\n", | |
".xr-var-item {\n", | |
" display: contents;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > div,\n", | |
".xr-var-item label,\n", | |
".xr-var-item > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-even);\n", | |
" margin-bottom: 0;\n", | |
"}\n", | |
"\n", | |
".xr-var-item > .xr-var-name:hover span {\n", | |
" padding-right: 5px;\n", | |
"}\n", | |
"\n", | |
".xr-var-list > li:nth-child(odd) > div,\n", | |
".xr-var-list > li:nth-child(odd) > label,\n", | |
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n", | |
" background-color: var(--xr-background-color-row-odd);\n", | |
"}\n", | |
"\n", | |
".xr-var-name {\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-dims {\n", | |
" grid-column: 2;\n", | |
"}\n", | |
"\n", | |
".xr-var-dtype {\n", | |
" grid-column: 3;\n", | |
" text-align: right;\n", | |
" color: var(--xr-font-color2);\n", | |
"}\n", | |
"\n", | |
".xr-var-preview {\n", | |
" grid-column: 4;\n", | |
"}\n", | |
"\n", | |
".xr-var-name,\n", | |
".xr-var-dims,\n", | |
".xr-var-dtype,\n", | |
".xr-preview,\n", | |
".xr-attrs dt {\n", | |
" white-space: nowrap;\n", | |
" overflow: hidden;\n", | |
" text-overflow: ellipsis;\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-var-name:hover,\n", | |
".xr-var-dims:hover,\n", | |
".xr-var-dtype:hover,\n", | |
".xr-attrs dt:hover {\n", | |
" overflow: visible;\n", | |
" width: auto;\n", | |
" z-index: 1;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" display: none;\n", | |
" background-color: var(--xr-background-color) !important;\n", | |
" padding-bottom: 5px !important;\n", | |
"}\n", | |
"\n", | |
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n", | |
".xr-var-data-in:checked ~ .xr-var-data {\n", | |
" display: block;\n", | |
"}\n", | |
"\n", | |
".xr-var-data > table {\n", | |
" float: right;\n", | |
"}\n", | |
"\n", | |
".xr-var-name span,\n", | |
".xr-var-data,\n", | |
".xr-attrs {\n", | |
" padding-left: 25px !important;\n", | |
"}\n", | |
"\n", | |
".xr-attrs,\n", | |
".xr-var-attrs,\n", | |
".xr-var-data {\n", | |
" grid-column: 1 / -1;\n", | |
"}\n", | |
"\n", | |
"dl.xr-attrs {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" display: grid;\n", | |
" grid-template-columns: 125px auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt,\n", | |
".xr-attrs dd {\n", | |
" padding: 0;\n", | |
" margin: 0;\n", | |
" float: left;\n", | |
" padding-right: 10px;\n", | |
" width: auto;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt {\n", | |
" font-weight: normal;\n", | |
" grid-column: 1;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dt:hover span {\n", | |
" display: inline-block;\n", | |
" background: var(--xr-background-color);\n", | |
" padding-right: 10px;\n", | |
"}\n", | |
"\n", | |
".xr-attrs dd {\n", | |
" grid-column: 2;\n", | |
" white-space: pre-wrap;\n", | |
" word-break: break-all;\n", | |
"}\n", | |
"\n", | |
".xr-icon-database,\n", | |
".xr-icon-file-text2 {\n", | |
" display: inline-block;\n", | |
" vertical-align: middle;\n", | |
" width: 1em;\n", | |
" height: 1.5em !important;\n", | |
" stroke-width: 0;\n", | |
" stroke: currentColor;\n", | |
" fill: currentColor;\n", | |
"}\n", | |
"</style><pre class='xr-text-repr-fallback'><xarray.Dataset>\n", | |
"Dimensions: (nod2: 10000000, nz: 80, nz1: 79, time: 1)\n", | |
"Coordinates:\n", | |
" lat (nod2) float32 dask.array<chunksize=(1218124,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(1218124,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
" distance (nod2) float64 0.0 0.00201 0.004021 0.006031 ... 2e+04 2e+04 2e+04\n", | |
"Dimensions without coordinates: nod2\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 587179, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4...</pre><div class='xr-wrap' hidden><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-9222687b-324a-471c-8635-ab71e1b9589b' class='xr-section-summary-in' type='checkbox' disabled ><label for='section-9222687b-324a-471c-8635-ab71e1b9589b' class='xr-section-summary' title='Expand/collapse section'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span>nod2</span>: 10000000</li><li><span class='xr-has-index'>nz</span>: 80</li><li><span class='xr-has-index'>nz1</span>: 79</li><li><span class='xr-has-index'>time</span>: 1</li></ul></div><div class='xr-section-details'></div></li><li class='xr-section-item'><input id='section-a0a204f2-d3ed-4ca8-a1d0-d86431405666' class='xr-section-summary-in' type='checkbox' checked><label for='section-a0a204f2-d3ed-4ca8-a1d0-d86431405666' class='xr-section-summary' >Coordinates: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>lat</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1218124,), meta=np.ndarray></div><input id='attrs-1977c318-007b-4ec9-9ded-e647251fff79' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-1977c318-007b-4ec9-9ded-e647251fff79' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-53e1056e-262c-41cb-ad6e-b67f9f0b1f8c' class='xr-var-data-in' type='checkbox'><label for='data-53e1056e-262c-41cb-ad6e-b67f9f0b1f8c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 40.00 MB </td> <td> 14.07 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10000000,) </td> <td> (3516298,) </td></tr>\n", | |
" <tr><th> Count </th><td> 77 Tasks </td><td> 12 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", | |
" <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"25\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n", | |
" <line x1=\"77\" y1=\"0\" x2=\"77\" y2=\"25\" />\n", | |
" <line x1=\"92\" y1=\"0\" x2=\"92\" y2=\"25\" />\n", | |
" <line x1=\"98\" y1=\"0\" x2=\"98\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10000000</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1218124,), meta=np.ndarray></div><input id='attrs-963bb42f-bd27-4065-930c-7c84267d401e' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-963bb42f-bd27-4065-930c-7c84267d401e' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a12331ec-0d77-4226-8581-8ab99f17c379' class='xr-var-data-in' type='checkbox'><label for='data-a12331ec-0d77-4226-8581-8ab99f17c379' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 40.00 MB </td> <td> 14.07 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (10000000,) </td> <td> (3516298,) </td></tr>\n", | |
" <tr><th> Count </th><td> 77 Tasks </td><td> 12 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"170\" height=\"75\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"120\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"0\" y1=\"25\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n", | |
" <line x1=\"21\" y1=\"0\" x2=\"21\" y2=\"25\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n", | |
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n", | |
" <line x1=\"77\" y1=\"0\" x2=\"77\" y2=\"25\" />\n", | |
" <line x1=\"92\" y1=\"0\" x2=\"92\" y2=\"25\" />\n", | |
" <line x1=\"98\" y1=\"0\" x2=\"98\" y2=\"25\" />\n", | |
" <line x1=\"112\" y1=\"0\" x2=\"112\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"119\" y1=\"0\" x2=\"119\" y2=\"25\" />\n", | |
" <line x1=\"120\" y1=\"0\" x2=\"120\" y2=\"25\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"0.0,0.0 120.0,0.0 120.0,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"60.000000\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >10000000</text>\n", | |
" <text x=\"140.000000\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,140.000000,12.706308)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz</span></div><div class='xr-var-dims'>(nz)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>-0.0 -5.0 ... -6.05e+03 -6.55e+03</div><input id='attrs-02afa960-7e50-4dea-9bac-2f44b5086129' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-02afa960-7e50-4dea-9bac-2f44b5086129' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b6a55796-d47c-4df1-89b5-ed6b4ede7c8b' class='xr-var-data-in' type='checkbox'><label for='data-b6a55796-d47c-4df1-89b5-ed6b4ede7c8b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-0.000e+00, -5.000e+00, -1.000e+01, -2.000e+01, -3.000e+01, -4.000e+01,\n", | |
" -5.000e+01, -6.000e+01, -7.000e+01, -8.000e+01, -9.000e+01, -1.000e+02,\n", | |
" -1.120e+02, -1.250e+02, -1.400e+02, -1.550e+02, -1.700e+02, -1.850e+02,\n", | |
" -2.000e+02, -2.150e+02, -2.300e+02, -2.500e+02, -2.750e+02, -3.000e+02,\n", | |
" -3.250e+02, -3.500e+02, -3.750e+02, -4.000e+02, -4.300e+02, -4.600e+02,\n", | |
" -4.900e+02, -5.200e+02, -5.500e+02, -5.800e+02, -6.200e+02, -6.600e+02,\n", | |
" -7.000e+02, -7.500e+02, -8.000e+02, -8.500e+02, -9.000e+02, -9.500e+02,\n", | |
" -1.000e+03, -1.050e+03, -1.100e+03, -1.175e+03, -1.250e+03, -1.325e+03,\n", | |
" -1.400e+03, -1.475e+03, -1.550e+03, -1.650e+03, -1.750e+03, -1.850e+03,\n", | |
" -1.950e+03, -2.050e+03, -2.150e+03, -2.250e+03, -2.350e+03, -2.500e+03,\n", | |
" -2.650e+03, -2.800e+03, -2.950e+03, -3.100e+03, -3.300e+03, -3.400e+03,\n", | |
" -3.600e+03, -3.800e+03, -4.000e+03, -4.200e+03, -4.400e+03, -4.600e+03,\n", | |
" -4.800e+03, -5.000e+03, -5.200e+03, -5.400e+03, -5.600e+03, -5.800e+03,\n", | |
" -6.050e+03, -6.550e+03], dtype=float32)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>nz1</span></div><div class='xr-var-dims'>(nz1)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-2.5 -7.5 ... -5.925e+03 -6.3e+03</div><input id='attrs-ce9fef58-88d8-47cf-8902-55bed363096a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ce9fef58-88d8-47cf-8902-55bed363096a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-216d7c5d-e7fc-4979-9347-703ab206c8ec' class='xr-var-data-in' type='checkbox'><label for='data-216d7c5d-e7fc-4979-9347-703ab206c8ec' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([-2.5000e+00, -7.5000e+00, -1.5000e+01, -2.5000e+01, -3.5000e+01,\n", | |
" -4.5000e+01, -5.5000e+01, -6.5000e+01, -7.5000e+01, -8.5000e+01,\n", | |
" -9.5000e+01, -1.0600e+02, -1.1850e+02, -1.3250e+02, -1.4750e+02,\n", | |
" -1.6250e+02, -1.7750e+02, -1.9250e+02, -2.0750e+02, -2.2250e+02,\n", | |
" -2.4000e+02, -2.6250e+02, -2.8750e+02, -3.1250e+02, -3.3750e+02,\n", | |
" -3.6250e+02, -3.8750e+02, -4.1500e+02, -4.4500e+02, -4.7500e+02,\n", | |
" -5.0500e+02, -5.3500e+02, -5.6500e+02, -6.0000e+02, -6.4000e+02,\n", | |
" -6.8000e+02, -7.2500e+02, -7.7500e+02, -8.2500e+02, -8.7500e+02,\n", | |
" -9.2500e+02, -9.7500e+02, -1.0250e+03, -1.0750e+03, -1.1375e+03,\n", | |
" -1.2125e+03, -1.2875e+03, -1.3625e+03, -1.4375e+03, -1.5125e+03,\n", | |
" -1.6000e+03, -1.7000e+03, -1.8000e+03, -1.9000e+03, -2.0000e+03,\n", | |
" -2.1000e+03, -2.2000e+03, -2.3000e+03, -2.4250e+03, -2.5750e+03,\n", | |
" -2.7250e+03, -2.8750e+03, -3.0250e+03, -3.2000e+03, -3.3500e+03,\n", | |
" -3.5000e+03, -3.7000e+03, -3.9000e+03, -4.1000e+03, -4.3000e+03,\n", | |
" -4.5000e+03, -4.7000e+03, -4.9000e+03, -5.1000e+03, -5.3000e+03,\n", | |
" -5.5000e+03, -5.7000e+03, -5.9250e+03, -6.3000e+03])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time</span></div><div class='xr-var-dims'>(time)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>1948-01-01</div><input id='attrs-3aa87992-5959-4d2d-bb2a-f8968052c936' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-3aa87992-5959-4d2d-bb2a-f8968052c936' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-e12fdfbd-c36e-4378-8b1f-f1420c258b1d' class='xr-var-data-in' type='checkbox'><label for='data-e12fdfbd-c36e-4378-8b1f-f1420c258b1d' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>long_name :</span></dt><dd>time</dd></dl></div><div class='xr-var-data'><pre>array(['1948-01-01T00:00:00.000000000'], dtype='datetime64[ns]')</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>distance</span></div><div class='xr-var-dims'>(nod2)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>0.0 0.00201 ... 2e+04 2e+04</div><input id='attrs-79381e19-4a87-4d62-af3c-2ea5839c72de' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-79381e19-4a87-4d62-af3c-2ea5839c72de' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-3de13511-0b92-4974-b256-b7c54c04c5c8' class='xr-var-data-in' type='checkbox'><label for='data-3de13511-0b92-4974-b256-b7c54c04c5c8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>units :</span></dt><dd>km</dd><dt><span>long_name :</span></dt><dd>distance along trajectory</dd></dl></div><div class='xr-var-data'><pre>array([0.00000000e+00, 2.01049183e-03, 4.02098367e-03, ...,\n", | |
" 2.00039274e+04, 2.00039294e+04, 2.00039315e+04])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-bf9d5202-4621-49eb-9f2e-c35bd252f8d7' class='xr-section-summary-in' type='checkbox' checked><label for='section-bf9d5202-4621-49eb-9f2e-c35bd252f8d7' class='xr-section-summary' >Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>temp</span></div><div class='xr-var-dims'>(time, nod2, nz1)</div><div class='xr-var-dtype'>float32</div><div class='xr-var-preview xr-preview'>dask.array<chunksize=(1, 587179, 40), meta=np.ndarray></div><input id='attrs-71e41431-d7bb-464b-96d7-169e20a45d7a' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-71e41431-d7bb-464b-96d7-169e20a45d7a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-804a8bb7-dfee-41dc-84ce-ae63ea9472ee' class='xr-var-data-in' type='checkbox'><label for='data-804a8bb7-dfee-41dc-84ce-ae63ea9472ee' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>description :</span></dt><dd>temperature</dd><dt><span>units :</span></dt><dd>C</dd></dl></div><div class='xr-var-data'><table>\n", | |
"<tr>\n", | |
"<td>\n", | |
"<table>\n", | |
" <thead>\n", | |
" <tr><td> </td><th> Array </th><th> Chunk </th></tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr><th> Bytes </th><td> 3.16 GB </td> <td> 281.31 MB </td></tr>\n", | |
" <tr><th> Shape </th><td> (1, 10000000, 79) </td> <td> (1, 1758206, 40) </td></tr>\n", | |
" <tr><th> Count </th><td> 521 Tasks </td><td> 54 Chunks </td></tr>\n", | |
" <tr><th> Type </th><td> float32 </td><td> numpy.ndarray </td></tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</td>\n", | |
"<td>\n", | |
"<svg width=\"100\" height=\"184\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"10\" y1=\"7\" x2=\"24\" y2=\"21\" />\n", | |
" <line x1=\"10\" y1=\"11\" x2=\"24\" y2=\"26\" />\n", | |
" <line x1=\"10\" y1=\"14\" x2=\"24\" y2=\"29\" />\n", | |
" <line x1=\"10\" y1=\"18\" x2=\"24\" y2=\"33\" />\n", | |
" <line x1=\"10\" y1=\"32\" x2=\"24\" y2=\"47\" />\n", | |
" <line x1=\"10\" y1=\"35\" x2=\"24\" y2=\"50\" />\n", | |
" <line x1=\"10\" y1=\"56\" x2=\"24\" y2=\"71\" />\n", | |
" <line x1=\"10\" y1=\"80\" x2=\"24\" y2=\"95\" />\n", | |
" <line x1=\"10\" y1=\"81\" x2=\"24\" y2=\"96\" />\n", | |
" <line x1=\"10\" y1=\"92\" x2=\"24\" y2=\"107\" />\n", | |
" <line x1=\"10\" y1=\"92\" x2=\"24\" y2=\"107\" />\n", | |
" <line x1=\"10\" y1=\"101\" x2=\"24\" y2=\"116\" />\n", | |
" <line x1=\"10\" y1=\"102\" x2=\"24\" y2=\"117\" />\n", | |
" <line x1=\"10\" y1=\"105\" x2=\"24\" y2=\"120\" />\n", | |
" <line x1=\"10\" y1=\"109\" x2=\"24\" y2=\"124\" />\n", | |
" <line x1=\"10\" y1=\"112\" x2=\"24\" y2=\"127\" />\n", | |
" <line x1=\"10\" y1=\"119\" x2=\"24\" y2=\"134\" />\n", | |
" <line x1=\"10\" y1=\"119\" x2=\"24\" y2=\"134\" />\n", | |
" <line x1=\"10\" y1=\"120\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"10\" y2=\"120\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 24.9485979497544,14.948597949754403 24.9485979497544,134.9485979497544 10.0,120.0\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"35\" y2=\"0\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"10\" y1=\"0\" x2=\"24\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"22\" y1=\"0\" x2=\"37\" y2=\"14\" />\n", | |
" <line x1=\"35\" y1=\"0\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"10.0,0.0 35.41261651458248,0.0 50.36121446433688,14.948597949754403 24.9485979497544,14.948597949754403\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Horizontal lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"50\" y2=\"14\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"24\" y1=\"21\" x2=\"50\" y2=\"21\" />\n", | |
" <line x1=\"24\" y1=\"26\" x2=\"50\" y2=\"26\" />\n", | |
" <line x1=\"24\" y1=\"29\" x2=\"50\" y2=\"29\" />\n", | |
" <line x1=\"24\" y1=\"33\" x2=\"50\" y2=\"33\" />\n", | |
" <line x1=\"24\" y1=\"47\" x2=\"50\" y2=\"47\" />\n", | |
" <line x1=\"24\" y1=\"50\" x2=\"50\" y2=\"50\" />\n", | |
" <line x1=\"24\" y1=\"71\" x2=\"50\" y2=\"71\" />\n", | |
" <line x1=\"24\" y1=\"95\" x2=\"50\" y2=\"95\" />\n", | |
" <line x1=\"24\" y1=\"96\" x2=\"50\" y2=\"96\" />\n", | |
" <line x1=\"24\" y1=\"107\" x2=\"50\" y2=\"107\" />\n", | |
" <line x1=\"24\" y1=\"107\" x2=\"50\" y2=\"107\" />\n", | |
" <line x1=\"24\" y1=\"116\" x2=\"50\" y2=\"116\" />\n", | |
" <line x1=\"24\" y1=\"117\" x2=\"50\" y2=\"117\" />\n", | |
" <line x1=\"24\" y1=\"120\" x2=\"50\" y2=\"120\" />\n", | |
" <line x1=\"24\" y1=\"124\" x2=\"50\" y2=\"124\" />\n", | |
" <line x1=\"24\" y1=\"127\" x2=\"50\" y2=\"127\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" />\n", | |
" <line x1=\"24\" y1=\"134\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Vertical lines -->\n", | |
" <line x1=\"24\" y1=\"14\" x2=\"24\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
" <line x1=\"37\" y1=\"14\" x2=\"37\" y2=\"134\" />\n", | |
" <line x1=\"50\" y1=\"14\" x2=\"50\" y2=\"134\" style=\"stroke-width:2\" />\n", | |
"\n", | |
" <!-- Colored Rectangle -->\n", | |
" <polygon points=\"24.9485979497544,14.948597949754403 50.36121446433688,14.948597949754403 50.36121446433688,134.9485979497544 24.9485979497544,134.9485979497544\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n", | |
"\n", | |
" <!-- Text -->\n", | |
" <text x=\"37.654906\" y=\"154.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >79</text>\n", | |
" <text x=\"70.361214\" y=\"74.948598\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,70.361214,74.948598)\">10000000</text>\n", | |
" <text x=\"7.474299\" y=\"147.474299\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,7.474299,147.474299)\">1</text>\n", | |
"</svg>\n", | |
"</td>\n", | |
"</tr>\n", | |
"</table></div></li></ul></div></li><li class='xr-section-item'><input id='section-2b28e654-1e4b-40a0-81c1-0d75355bbad8' class='xr-section-summary-in' type='checkbox' checked><label for='section-2b28e654-1e4b-40a0-81c1-0d75355bbad8' class='xr-section-summary' >Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>Dataset URL :</span></dt><dd>https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb42f8302e6badfbc/pyfesom2/frontier/rossby42</dd></dl></div></li></ul></div></div>" | |
], | |
"text/plain": [ | |
"<xarray.Dataset>\n", | |
"Dimensions: (nod2: 10000000, nz: 80, nz1: 79, time: 1)\n", | |
"Coordinates:\n", | |
" lat (nod2) float32 dask.array<chunksize=(1218124,), meta=np.ndarray>\n", | |
" lon (nod2) float32 dask.array<chunksize=(1218124,), meta=np.ndarray>\n", | |
" * nz (nz) float32 -0.0 -5.0 -10.0 ... -5.8e+03 -6.05e+03 -6.55e+03\n", | |
" * nz1 (nz1) float64 -2.5 -7.5 -15.0 ... -5.7e+03 -5.925e+03 -6.3e+03\n", | |
" * time (time) datetime64[ns] 1948-01-01\n", | |
" distance (nod2) float64 0.0 0.00201 0.004021 0.006031 ... 2e+04 2e+04 2e+04\n", | |
"Dimensions without coordinates: nod2\n", | |
"Data variables:\n", | |
" temp (time, nod2, nz1) float32 dask.array<chunksize=(1, 587179, 40), meta=np.ndarray>\n", | |
"Attributes:\n", | |
" Dataset URL: https://swiftbrowser.dkrz.de/public/dkrz_035d8f6ff058403bb4..." | |
] | |
}, | |
"execution_count": 13, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"r42.pyfesom2.select_points(lon=lons, lat=lats) # select 10M points" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "framed-motor", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-06-30T13:45:51.606493Z", | |
"start_time": "2021-06-30T13:45:51.601033Z" | |
} | |
}, | |
"source": [ | |
"### 2.2 Selecting regions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"id": "stopped-strike", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:39.034588Z", | |
"start_time": "2021-07-03T05:58:39.031801Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"from pyfesom2.datasets import rossby42\n", | |
"r42 = rossby42.load()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 21, | |
"id": "unauthorized-darwin", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:59:59.354051Z", | |
"start_time": "2021-07-03T05:59:55.264699Z" | |
} | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"CPU times: user 4.09 s, sys: 505 ms, total: 4.6 s\n", | |
"Wall time: 4.09 s\n" | |
] | |
} | |
], | |
"source": [ | |
"%%time\n", | |
"sel=r42.pyfesom2.select(region=(0, 60, 50, 80)).compute()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"id": "surprising-zoning", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:42.755909Z", | |
"start_time": "2021-07-03T05:58:42.753532Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"# re implementing selection also gives oppurtunity to integrate selections using polygon-like regions" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"id": "related-flower", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:46.331666Z", | |
"start_time": "2021-07-03T05:58:42.757399Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"from shapely.geometry import Polygon\n", | |
"cpoly = Polygon([(-70, 30), (-10, 0), (-10, 60)])\n", | |
"sel=r42.pyfesom2.select(region=cpoly)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "polish-intellectual", | |
"metadata": {}, | |
"source": [ | |
"<div class=\"alert alert-block alert-info\">\n", | |
" \n", | |
"<h3>Notes on selections, performance and oppurtunities</h3>\n", | |
"\n", | |
"<ul>\n", | |
"<li> Scipy's KDtree with tweaked defaults was used in above point selection on coordinates projected on geocentric frame of reference, there by returning nearest neighbor selection based on tunnel distance. Tree information can be serialized and cached to improve performance of subsequent access.</li> \n", | |
"\n", | |
"<li> An ocean model with boundaries complicates data representation. Depending on choice of structure, missing values at topography needs to be handled. For instance, using a surface node information to genrate tree might not return valid selection for deeper layers, generating and storing tree for all vertical layers can be expensive. In current implementation nearest neighbor selection returns data from a nearest location with valid, non-missing value.</li>\n", | |
" \n", | |
"<li>Point selection illustrated needs additional selection operators like linear interpolation etc.</li>\n", | |
"\n", | |
"<li> Region selection as implemented above is currently brute-force and can easily be further optimized by using range query on tree.</li>\n", | |
" \n", | |
"<li> There are increasingly many efficient tree implementations wrapped with python bindings (eg., xoak, scikit-learn). Some of the advances in modern implementations cater to problems with datasets containing randomly scattered points and might involve higher (>2) dimensions. In current dataset this might not be advantageos as 2D represetation (optionally 3d including levels) might suffice. Regardless, different implementations need to be tested and benchmarked by ability to support all the desised features, like, efficient: valid-value point selection (considering missing values at topography), region selection, plotting and interpolation. Such requirement can be probably best be benchmarked using a use case with desired features. \n", | |
"</li>\n", | |
"\n", | |
"<li> One approach to reduce tree building time is to include tree information in the dataset. A simple implementation example using kdtree could mean sort the `nod2` data using indices in end nodes of a kd-tree. The depth of tree and number of elements in each end node can be added as metadata to the dataset. But such sorting arrays and re-indexing data can be expensive when done in post-processing. To reap benefits of such approach it should be directly implemented in the climate model code writing the model output.</li>\n", | |
"\n", | |
"</ul>\n", | |
" \n", | |
"<br>\n", | |
"\n", | |
"Strategies using data's underlying triangular mesh consistently for all desired workflow features like selections, plotting and regridding is likely to be efficient and worthwile exploration. For instance, if triangles of mesh are somehow represented natively in a tree, valid nearest point search is merely point in triangle search, and furthermore barycentric coordinations of search point in the triangle can readily be used for interpolation.\n", | |
"\n", | |
" \n", | |
"<ul>\n", | |
" <li>Methods of Matplotlib's tri module is a vague example of such approach, seamlessly using a single tree for methods performing point query to interpolation on triangular meshes (and possibly also for shading in trimesh plots), making it a potential candidate. Its default trapeziodal map datastructure currently is inefficient and unusable (like due to its greedy implementation) for such a large dataset. While exploring other approaches like using incremental, non-greedy trapeziodal map is worthwhile, other trees datastructures like: using heirarchically coarsend triangulations or using patch information used by the model for domain-decomposion for parallel execution may also be used that have potential to take advantage of matplotlib's standard tri methods.</li>\n", | |
" <li>A challenge for a new tree data structure, among others, is to address \"holes\", the topographical regions where ocean model data is not available </li>\n", | |
" <li> Such trees based on underlying triangular grid may naturally provide option to store tree information in the dataset, and this has an important feature that it may also be transfered to spatial subsets of data.</li>\n", | |
" <li> Using such heirarchial tree stucture, may provide effective visualization strategy like that of datashader (used in plotting section below), generating detailed visualization only up on interactive zoom. For instance first chunks of data might represent nodes for constructing a coarse resolution of spatial map and subsequent chunks refine this view.</li>\n", | |
" <li> Library using such data structure might eventually be used to generate new meshes to drive future model simulations, promoting tighter integration of analysis software with the model.\n", | |
"</ul>\n", | |
" </div>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"id": "stuck-lunch", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-02T14:24:20.448689Z", | |
"start_time": "2021-07-02T14:24:20.446702Z" | |
} | |
}, | |
"source": [ | |
"## 3 Plotting\n", | |
"\n", | |
"**Plotting maps of such HR data is currently not feasible using matplotlib, and even worse with Bokeh where all data needs to be transfered to browser for rendering. Rasterizing inderlying data into tiles like images that are dynamicallyy generated on a zoom tool is more efficient, datashader further makes these tiles-like efficient by directly generating images directly in python process, additionally using dask's capabilities. For smaller subsets matplotlib may still be used.** \n", | |
"\n", | |
"<p style='color:grey'> \n", | |
"Other plotting examples:\n", | |
" \n", | |
"https://nbviewer.jupyter.org/github/FESOM/pyfesom2/blob/suvi_rebased_accessor_plotting/notebooks/accessor_basic_plotting.ipynb\n", | |
" \n", | |
"https://nbviewer.jupyter.org/github/FESOM/pyfesom2/blob/suvi_rebased_accessor_plotting/notebooks/accessor_interactive_plotting.ipynb</p>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"id": "communist-shoot", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:47.882377Z", | |
"start_time": "2021-07-03T05:58:46.332839Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"import geoviews as gv\n", | |
"import datashader\n", | |
"from holoviews.operation.datashader import shade" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 19, | |
"id": "native-dublin", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:58:48.045406Z", | |
"start_time": "2021-07-03T05:58:47.883922Z" | |
} | |
}, | |
"outputs": [], | |
"source": [ | |
"r42r= r42.chunk({'nz1':1, 'nod2':100000}) # rechunk for faster spatial plot generation" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 20, | |
"id": "reported-newsletter", | |
"metadata": { | |
"ExecuteTime": { | |
"end_time": "2021-07-03T05:59:55.252900Z", | |
"start_time": "2021-07-03T05:58:48.046697Z" | |
} | |
}, | |
"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/[email protected]/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/[email protected]/dist/js/tabulator.js', 'https://unpkg.com/[email protected]/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/[email protected]/dist/js/tabulator.js\", \"https://unpkg.com/[email protected]/moment.js\"];\n", | |
" var js_modules = [];\n", | |
" var css_urls = [\"https://unpkg.com/[email protected]/dist/css/tabulator_simple.min.css\"];\n", | |
" var inline_js = [\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(\"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(\".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(\".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(\".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(\".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(\"\\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.0\"},\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 i=e(1),r=e(7),a=e(3),_=e(19),l=e(264),c=e(14),d=e(30),h=e(15),f=e(17),u=e(31),m=e(9),g=e(13),w=i.__importStar(e(132)),p=e(26),v=e(8),b=e(319),y=e(130),k=e(53),j=e(394),M=e(35);class S{constructor(e){this.document=e,this.session=null,this.subscribed_models=new Set}send_event(e){const t=new M.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(){s.documents.push(this),this._init_timestamp=Date.now(),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 l.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 l.LODStart)),this._interactive_timestamp=Date.now()}interactive_stop(){null!=this._interactive_plot&&this._interactive_plot.trigger_event(new l.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=w.union(e,t.references());const t=new Set(this._all_models.values()),s=w.difference(t,e),o=w.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 M.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 M.RootRemovedEvent(this,e,t))}}title(){return this._title}set_title(e,t){e!==this._title&&(this._title=e,this._trigger_on_change(new M.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 M.DocumentEventBatch)for(const s of e.events)t(s);else t(e)}_notify_change(e,t,s,o,n){this._trigger_on_change(new M.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){const o=Object.assign(Object.assign({},s),{id:e,__deferred__:!0});return new(r.Models(t))(o)}static _instantiate_references_json(e,t){var s;const o=new Map;for(const n of e){const e=n.id,i=n.type,r=null!==(s=n.attributes)&&void 0!==s?s:{};let a=t.get(e);null==a&&(a=E._instantiate_object(e,i,r),null!=n.subtype&&a.set_subtype(n.subtype)),o.set(a.id,a)}return o}static _resolve_refs(e,t,s,o){function n(e){if(f.is_ref(e)){if(t.has(e.id))return t.get(e.id);if(s.has(e.id))return s.get(e.id);throw new Error(`reference ${JSON.stringify(e)} isn't known (not in Document?)`)}return u.is_NDArray_ref(e)?u.decode_NDArray(e,o):v.isArray(e)?function(e){const t=[];for(const s of e)t.push(n(s));return t}(e):v.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:i,attributes:r}of e){const e=!t.has(i),a=e?s.get(i):t.get(i),_=E._resolve_refs(r,t,s,o);a.setv(_,{silent:!0}),n.set(i,{instance:a,is_new:e})}const i=[],r=new Set;function a(e){if(e instanceof c.HasProps){if(n.has(e.id)&&!r.has(e.id)){r.add(e.id);const{instance:t,is_new:s}=n.get(e.id),{attributes:o}=t;for(const e of g.values(o))a(e);s&&(t.finalize(),i.push(t))}}else if(v.isArray(e))for(const t of e)a(t);else if(v.isPlainObject(e))for(const t of g.values(e))a(t)}for(const e of n.values())a(e.instance);for(const e of i)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 i={kind:\"ModelChanged\",model:{id:e.id},attr:t,new:s};return c.HasProps._json_record_references(o,s,n,{recursive:!0}),i}return null}static _events_to_sync_objects(e,t,s,o){const n=Object.keys(e.attributes),i=Object.keys(t.attributes),r=m.difference(n,i),a=m.difference(i,n),l=m.intersection(n,i),c=[];for(const e of r)_.logger.warn(`Server sent key ${e} but we don't seem to have it in our JSON`);for(const n of a){const i=t.attributes[n];c.push(E._event_for_attribute_change(e,n,i,s,o))}for(const n of l){const i=e.attributes[n],r=t.attributes[n];null==i&&null==r||(null==i||null==r?c.push(E._event_for_attribute_change(e,n,r,s,o)):p.is_equal(i,r)||c.push(E._event_for_attribute_change(e,n,r,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),i=new Map,r=[];for(const t of e.roots.root_ids)i.set(t,n.get(t)),r.push(t);const a=o(s),_=new Map,l=[];for(const e of s.roots.root_ids)_.set(e,a.get(e)),l.push(e);if(r.sort(),l.sort(),m.difference(r,l).length>0||m.difference(l,r).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),a.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:a.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 (${a.version}) / Python (${t})`;s||a.version.replace(/-(dev|rc)\\./,\"$1\")==t?_.logger.debug(o):(_.logger.warn(\"JS/Python version mismatch\"),_.logger.warn(o)),null!=e.defs&&j.resolve_defs(e.defs);const n=e.roots,i=n.root_ids,r=n.references,l=E._instantiate_references_json(r,new Map);E._initialize_references_json(r,new Map,l,new Map);const c=new E;for(const e of i){const t=l.get(e);null!=t&&c.add_root(t)}return c.set_title(e.title),c}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;return{events:t.to_serializable(e),references:[...t.definitions]}}apply_json_patch(e,t=new Map,s){const o=e.references,n=e.events,i=E._instantiate_references_json(o,this._all_models);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)i.set(t,s);else if(!i.has(t))throw _.logger.warn(`Got an event for unknown model ${e.model}\"`),new Error(\"event model wasn't known\");break}}const r=new Map,a=new Map;for(const[e,t]of i)this._all_models.has(e)?r.set(e,t):a.set(e,t);E._initialize_references_json(o,r,a,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,r,a,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 i=e.attr,_=E._resolve_refs(e.new,r,a,t);n.setv({[i]:_},{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 i=E._resolve_refs(e.new,new Map,new Map,t);if(null!=e.cols)for(const e in n.data)e in i||(i[e]=n.data[e]);n.setv({data:i},{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,i=e.rollover;o.stream(n,i,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=i.get(t);this.add_root(o,s);break}case\"RootRemoved\":{const t=e.model.id,o=i.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,s,r,o,t){o();const d=e(1),i=e(8),l=e(13),n=e(14);r.overrides={};const a=new Map;r.Models=e=>{const s=r.Models.get(e);if(null!=s)return s;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.`)},r.Models.get=e=>{var s;return null!==(s=r.overrides[e])&&void 0!==s?s:a.get(e)},r.Models.register=(e,s)=>{r.overrides[e]=s},r.Models.unregister=e=>{delete r.overrides[e]},r.Models.register_models=(e,s=!1,r)=>{var o;if(null!=e)for(const t of i.isArray(e)?e:l.values(e))if(o=t,i.isObject(o)&&o.prototype instanceof n.HasProps){const e=t.__qualified__;s||!a.has(e)?a.set(e,t):null!=r?r(e):console.warn(`Model '${e}' was already registered`)}},r.register_models=r.Models.register_models,r.Models.registered_names=()=>[...a.keys()];const g=d.__importStar(e(38));r.register_models(g)},\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),l=n(10),c=n(8),{round:i}=Math;function o(n){return l.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,l;return null==n?[e,s,u,l]=[0,0,0,0]:c.isInteger(n)?[e,s,u,l]=f(n):c.isString(n)?[e,s,u,l]=null!==(r=_(n))&&void 0!==r?r:[0,0,0,0]:([e,s,u,l=1]=n,l=o(255*l)),255==l&&null!=t&&(l=o(255*t)),[e,s,u,l]}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),l=`#${g(r)}${g(e)}${g(s)}`;return 255==u?l:`${l}${g(u)}`};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(\"%\"),l=t.endsWith(\"%\"),c=e.endsWith(\"%\"),i=s.endsWith(\"%\");if(!(u&&l&&c)&&(u||l||c))return null;u&&(n=n.slice(0,-1)),l&&(t=t.slice(0,-1)),c&&(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),l&&(f=f/100*255),c&&(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!!c.isInteger(n)||(!(!c.isString(n)||null==_(n))||!(!c.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),i=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=i.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&&i.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=i.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\"==document.readyState)return new Promise(((t,e)=>{document.addEventListener(\"DOMContentLoaded\",(()=>t()),{once:!0})}))}},\n", | |
" function _(o,i,t,e,r){e(),t.root=\"bk-root\",t.default=\".bk-root{position:relative;width:auto;height:auto;z-index:0;box-sizing:border-box;font-family:Helvetica, Arial, sans-serif;font-size:13px;}.bk-root .bk,.bk-root .bk:before,.bk-root .bk:after{box-sizing:inherit;margin:0;border:0;padding:0;background-image:none;font-family:inherit;font-size:100%;line-height:1.42857143;}.bk-root pre.bk{font-family:Courier, monospace;}\"},\n", | |
" function _(e,t,r,a,c){a();const l=e(1),n=e(46);c(\"Line\",n.Line),c(\"LineScalar\",n.LineScalar),c(\"LineVector\",n.LineVector);const i=e(49);c(\"Fill\",i.Fill),c(\"FillScalar\",i.FillScalar),c(\"FillVector\",i.FillVector);const s=e(50);c(\"Text\",s.Text),c(\"TextScalar\",s.TextScalar),c(\"TextVector\",s.TextVector);const o=e(51);c(\"Hatch\",o.Hatch),c(\"HatchScalar\",o.HatchScalar),c(\"HatchVector\",o.HatchVector);const u=l.__importStar(e(48)),V=e(47);c(\"VisualProperties\",V.VisualProperties),c(\"VisualUniforms\",V.VisualUniforms);class h{constructor(e){this._visuals=[];for(const[t,r]of e.model._mixins){const a=(()=>{switch(r){case u.Line:return new n.Line(e,t);case u.LineScalar:return new n.LineScalar(e,t);case u.LineVector:return new n.LineVector(e,t);case u.Fill:return new i.Fill(e,t);case u.FillScalar:return new i.FillScalar(e,t);case u.FillVector:return new i.FillVector(e,t);case u.Text:return new s.Text(e,t);case u.TextScalar:return new s.TextScalar(e,t);case u.TextVector:return new s.TextVector(e,t);case u.Hatch:return new o.Hatch(e,t);case u.HatchScalar:return new o.HatchScalar(e,t);case u.HatchVector:return new o.HatchVector(e,t);default:throw new Error(\"unknown visual\")}})();this._visuals.push(a),Object.defineProperty(this,t+a.type,{get:()=>a,configurable:!1,enumerable:!0})}}*[Symbol.iterator](){yield*this._visuals}}r.Visuals=h,h.__name__=\"Visuals\"},\n", | |
" function _(e,t,i,l,s){l();const n=e(1),a=e(47),o=n.__importStar(e(48)),r=e(22),_=e(8);function h(e){if(_.isArray(e))return e;switch(e){case\"solid\":return[];case\"dashed\":return[6];case\"dotted\":return[2,4];case\"dotdash\":return[2,4,6,4];case\"dashdot\":return[6,4,2,4];default:return e.split(\" \").map(Number).filter(_.isInteger)}}i.resolve_line_dash=h;class c extends a.VisualProperties{get doit(){const e=this.line_color.get_value(),t=this.line_alpha.get_value(),i=this.line_width.get_value();return!(null==e||0==t||0==i)}set_value(e){const t=this.line_color.get_value(),i=this.line_alpha.get_value();e.strokeStyle=r.color2css(t,i),e.lineWidth=this.line_width.get_value(),e.lineJoin=this.line_join.get_value(),e.lineCap=this.line_cap.get_value(),e.lineDash=h(this.line_dash.get_value()),e.lineDashOffset=this.line_dash_offset.get_value()}}i.Line=c,c.__name__=\"Line\";class u extends a.VisualUniforms{get doit(){const e=this.line_color.value,t=this.line_alpha.value,i=this.line_width.value;return!(0==e||0==t||0==i)}set_value(e){const t=this.line_color.value,i=this.line_alpha.value;e.strokeStyle=r.color2css(t,i),e.lineWidth=this.line_width.value,e.lineJoin=this.line_join.value,e.lineCap=this.line_cap.value,e.lineDash=h(this.line_dash.value),e.lineDashOffset=this.line_dash_offset.value}}i.LineScalar=u,u.__name__=\"LineScalar\";class d extends a.VisualUniforms{get doit(){const{line_color:e}=this;if(e.is_Scalar()&&0==e.value)return!1;const{line_alpha:t}=this;if(t.is_Scalar()&&0==t.value)return!1;const{line_width:i}=this;return!i.is_Scalar()||0!=i.value}set_vectorize(e,t){const i=this.line_color.get(t),l=this.line_alpha.get(t),s=this.line_width.get(t),n=this.line_join.get(t),a=this.line_cap.get(t),o=this.line_dash.get(t),_=this.line_dash_offset.get(t);e.strokeStyle=r.color2css(i,l),e.lineWidth=s,e.lineJoin=n,e.lineCap=a,e.lineDash=h(o),e.lineDashOffset=_}}i.LineVector=d,d.__name__=\"LineVector\",c.prototype.type=\"line\",c.prototype.attrs=Object.keys(o.Line),u.prototype.type=\"line\",u.prototype.attrs=Object.keys(o.LineScalar),d.prototype.type=\"line\",d.prototype.attrs=Object.keys(o.LineVector)},\n", | |
" function _(t,s,o,i,r){i();class e{constructor(t,s=\"\"){this.obj=t,this.prefix=s;const o=this;this._props=[];for(const i of this.attrs){const r=t.model.properties[s+i];r.change.connect((()=>this.update())),o[i]=r,this._props.push(r)}this.update()}*[Symbol.iterator](){yield*this._props}update(){}}o.VisualProperties=e,e.__name__=\"VisualProperties\";class p{constructor(t,s=\"\"){this.obj=t,this.prefix=s;for(const o of this.attrs)Object.defineProperty(this,o,{get:()=>t[s+o]})}*[Symbol.iterator](){for(const t of this.attrs)yield this.obj.model.properties[this.prefix+t]}update(){}}o.VisualUniforms=p,p.__name__=\"VisualUniforms\"},\n", | |
" function _(e,l,t,a,c){a();const r=e(1),o=r.__importStar(e(18)),n=e(20),i=r.__importStar(e(21)),_=e(13);t.Line={line_color:[i.Nullable(i.Color),\"black\"],line_alpha:[i.Alpha,1],line_width:[i.Number,1],line_join:[n.LineJoin,\"bevel\"],line_cap:[n.LineCap,\"butt\"],line_dash:[i.Or(n.LineDash,i.Array(i.Number)),[]],line_dash_offset:[i.Number,0]},t.Fill={fill_color:[i.Nullable(i.Color),\"gray\"],fill_alpha:[i.Alpha,1]},t.Hatch={hatch_color:[i.Nullable(i.Color),\"black\"],hatch_alpha:[i.Alpha,1],hatch_scale:[i.Number,12],hatch_pattern:[i.Nullable(i.Or(n.HatchPatternType,i.String)),null],hatch_weight:[i.Number,1],hatch_extra:[i.Dict(i.AnyRef()),{}]},t.Text={text_color:[i.Nullable(i.Color),\"#444444\"],text_alpha:[i.Alpha,1],text_font:[o.Font,\"helvetica\"],text_font_size:[i.FontSize,\"16px\"],text_font_style:[n.FontStyle,\"normal\"],text_align:[n.TextAlign,\"left\"],text_baseline:[n.TextBaseline,\"bottom\"],text_line_height:[i.Number,1.2]},t.LineScalar={line_color:[o.ColorScalar,\"black\"],line_alpha:[o.NumberScalar,1],line_width:[o.NumberScalar,1],line_join:[o.LineJoinScalar,\"bevel\"],line_cap:[o.LineCapScalar,\"butt\"],line_dash:[o.LineDashScalar,[]],line_dash_offset:[o.NumberScalar,0]},t.FillScalar={fill_color:[o.ColorScalar,\"gray\"],fill_alpha:[o.NumberScalar,1]},t.HatchScalar={hatch_color:[o.ColorScalar,\"black\"],hatch_alpha:[o.NumberScalar,1],hatch_scale:[o.NumberScalar,12],hatch_pattern:[o.NullStringScalar,null],hatch_weight:[o.NumberScalar,1],hatch_extra:[o.AnyScalar,{}]},t.TextScalar={text_color:[o.ColorScalar,\"#444444\"],text_alpha:[o.NumberScalar,1],text_font:[o.FontScalar,\"helvetica\"],text_font_size:[o.FontSizeScalar,\"16px\"],text_font_style:[o.FontStyleScalar,\"normal\"],text_align:[o.TextAlignScalar,\"left\"],text_baseline:[o.TextBaselineScalar,\"bottom\"],text_line_height:[o.NumberScalar,1.2]},t.LineVector={line_color:[o.ColorSpec,\"black\"],line_alpha:[o.NumberSpec,1],line_width:[o.NumberSpec,1],line_join:[o.LineJoinSpec,\"bevel\"],line_cap:[o.LineCapSpec,\"butt\"],line_dash:[o.LineDashSpec,[]],line_dash_offset:[o.NumberSpec,0]},t.FillVector={fill_color:[o.ColorSpec,\"gray\"],fill_alpha:[o.NumberSpec,1]},t.HatchVector={hatch_color:[o.ColorSpec,\"black\"],hatch_alpha:[o.NumberSpec,1],hatch_scale:[o.NumberSpec,12],hatch_pattern:[o.NullStringSpec,null],hatch_weight:[o.NumberSpec,1],hatch_extra:[o.AnyScalar,{}]},t.TextVector={text_color:[o.ColorSpec,\"#444444\"],text_alpha:[o.NumberSpec,1],text_font:[o.FontSpec,\"helvetica\"],text_font_size:[o.FontSizeSpec,\"16px\"],text_font_style:[o.FontStyleSpec,\"normal\"],text_align:[o.TextAlignSpec,\"left\"],text_baseline:[o.TextBaselineSpec,\"bottom\"],text_line_height:[o.NumberSpec,1.2]},t.attrs_of=function(e,l,t,a=!1){const c={};for(const r of _.keys(t)){const t=`${l}${r}`,o=e[t];c[a?t:r]=o}return c}},\n", | |
" function _(l,t,e,i,s){i();const o=l(1),a=l(47),r=o.__importStar(l(48)),c=l(22);class _ extends a.VisualProperties{get doit(){const l=this.fill_color.get_value(),t=this.fill_alpha.get_value();return!(null==l||0==t)}set_value(l){const t=this.fill_color.get_value(),e=this.fill_alpha.get_value();l.fillStyle=c.color2css(t,e)}}e.Fill=_,_.__name__=\"Fill\";class n extends a.VisualUniforms{get doit(){const l=this.fill_color.value,t=this.fill_alpha.value;return!(0==l||0==t)}set_value(l){const t=this.fill_color.value,e=this.fill_alpha.value;l.fillStyle=c.color2css(t,e)}}e.FillScalar=n,n.__name__=\"FillScalar\";class p extends a.VisualUniforms{get doit(){const{fill_color:l}=this;if(l.is_Scalar()&&0==l.value)return!1;const{fill_alpha:t}=this;return!t.is_Scalar()||0!=t.value}set_vectorize(l,t){const e=this.fill_color.get(t),i=this.fill_alpha.get(t);l.fillStyle=c.color2css(e,i)}}e.FillVector=p,p.__name__=\"FillVector\",_.prototype.type=\"fill\",_.prototype.attrs=Object.keys(r.Fill),n.prototype.type=\"fill\",n.prototype.attrs=Object.keys(r.FillScalar),p.prototype.type=\"fill\",p.prototype.attrs=Object.keys(r.FillVector)},\n", | |
" function _(t,e,s,l,a){l();const o=t(1),_=t(47),i=o.__importStar(t(48)),n=t(22);class x extends _.VisualProperties{get doit(){const t=this.text_color.get_value(),e=this.text_alpha.get_value();return!(null==t||0==e)}set_value(t){const e=this.text_color.get_value(),s=this.text_alpha.get_value();t.fillStyle=n.color2css(e,s),t.font=this.font_value(),t.textAlign=this.text_align.get_value(),t.textBaseline=this.text_baseline.get_value()}font_value(){return`${this.text_font_style.get_value()} ${this.text_font_size.get_value()} ${this.text_font.get_value()}`}}s.Text=x,x.__name__=\"Text\";class r extends _.VisualUniforms{get doit(){const t=this.text_color.value,e=this.text_alpha.value;return!(0==t||0==e)}set_value(t){const e=this.text_color.value,s=this.text_alpha.value,l=this.font_value(),a=this.text_align.value,o=this.text_baseline.value;t.fillStyle=n.color2css(e,s),t.font=l,t.textAlign=a,t.textBaseline=o}font_value(){return`${this.text_font_style.value} ${this.text_font_size.value} ${this.text_font.value}`}}s.TextScalar=r,r.__name__=\"TextScalar\";class u extends _.VisualUniforms{get doit(){const{text_color:t}=this;if(t.is_Scalar()&&0==t.value)return!1;const{text_alpha:e}=this;return!e.is_Scalar()||0!=e.value}set_vectorize(t,e){const s=this.text_color.get(e),l=this.text_alpha.get(e),a=this.font_value(e),o=this.text_align.get(e),_=this.text_baseline.get(e);t.fillStyle=n.color2css(s,l),t.font=a,t.textAlign=o,t.textBaseline=_}font_value(t){return`${this.text_font_style.get(t)} ${this.text_font_size.get(t)} ${this.text_font.get(t)}`}}s.TextVector=u,u.__name__=\"TextVector\",x.prototype.type=\"text\",x.prototype.attrs=Object.keys(i.Text),r.prototype.type=\"text\",r.prototype.attrs=Object.keys(i.TextScalar),u.prototype.type=\"text\",u.prototype.attrs=Object.keys(i.TextVector)},\n", | |
" function _(t,e,a,h,r){h();const i=t(1),s=t(47),c=t(52),n=i.__importStar(t(18)),_=i.__importStar(t(48));class l extends s.VisualProperties{constructor(){super(...arguments),this._update_iteration=0}update(){if(this._update_iteration++,this._hatch_image=null,!this.doit)return;const t=this.hatch_color.get_value(),e=this.hatch_alpha.get_value(),a=this.hatch_scale.get_value(),h=this.hatch_pattern.get_value(),r=this.hatch_weight.get_value(),i=t=>{this._hatch_image=t},s=this.hatch_extra.get_value()[h];if(null!=s){const h=s.get_pattern(t,e,a,r);if(h instanceof Promise){const{_update_iteration:t}=this;h.then((e=>{this._update_iteration==t&&(i(e),this.obj.request_render())}))}else i(h)}else{const s=this.obj.canvas.create_layer(),n=c.get_pattern(s,h,t,e,a,r);i(n)}}get doit(){const t=this.hatch_color.get_value(),e=this.hatch_alpha.get_value(),a=this.hatch_pattern.get_value();return!(null==t||0==e||\" \"==a||\"blank\"==a||null==a)}set_value(t){const e=this.pattern(t);t.fillStyle=null!=e?e:\"transparent\"}pattern(t){const e=this._hatch_image;return null==e?null:t.createPattern(e,this.repetition())}repetition(){const t=this.hatch_pattern.get_value(),e=this.hatch_extra.get_value()[t];if(null==e)return\"repeat\";switch(e.repetition){case\"repeat\":return\"repeat\";case\"repeat_x\":return\"repeat-x\";case\"repeat_y\":return\"repeat-y\";case\"no_repeat\":return\"no-repeat\"}}}a.Hatch=l,l.__name__=\"Hatch\";class o extends s.VisualUniforms{constructor(){super(...arguments),this._static_doit=!1,this._update_iteration=0}_compute_static_doit(){const t=this.hatch_color.value,e=this.hatch_alpha.value,a=this.hatch_pattern.value;return!(null==t||0==e||\" \"==a||\"blank\"==a||null==a)}update(){this._update_iteration++;const t=this.hatch_color.length;if(this._hatch_image=new n.UniformScalar(null,t),this._static_doit=this._compute_static_doit(),!this._static_doit)return;const e=this.hatch_color.value,a=this.hatch_alpha.value,h=this.hatch_scale.value,r=this.hatch_pattern.value,i=this.hatch_weight.value,s=e=>{this._hatch_image=new n.UniformScalar(e,t)},_=this.hatch_extra.value[r];if(null!=_){const t=_.get_pattern(e,a,h,i);if(t instanceof Promise){const{_update_iteration:e}=this;t.then((t=>{this._update_iteration==e&&(s(t),this.obj.request_render())}))}else s(t)}else{const t=this.obj.canvas.create_layer(),n=c.get_pattern(t,r,e,a,h,i);s(n)}}get doit(){return this._static_doit}set_value(t){var e;t.fillStyle=null!==(e=this.pattern(t))&&void 0!==e?e:\"transparent\"}pattern(t){const e=this._hatch_image.value;return null==e?null:t.createPattern(e,this.repetition())}repetition(){const t=this.hatch_pattern.value,e=this.hatch_extra.value[t];if(null==e)return\"repeat\";switch(e.repetition){case\"repeat\":return\"repeat\";case\"repeat_x\":return\"repeat-x\";case\"repeat_y\":return\"repeat-y\";case\"no_repeat\":return\"no-repeat\"}}}a.HatchScalar=o,o.__name__=\"HatchScalar\";class u extends s.VisualUniforms{constructor(){super(...arguments),this._static_doit=!1,this._update_iteration=0}_compute_static_doit(){const{hatch_color:t}=this;if(t.is_Scalar()&&0==t.value)return!1;const{hatch_alpha:e}=this;if(e.is_Scalar()&&0==e.value)return!1;const{hatch_pattern:a}=this;if(a.is_Scalar()){const t=a.value;if(\" \"==t||\"blank\"==t||null==t)return!1}return!0}update(){this._update_iteration++;const t=this.hatch_color.length;if(this._hatch_image=new n.UniformScalar(null,t),this._static_doit=this._compute_static_doit(),!this._static_doit)return;const e=(t,e,a,h,r,i)=>{const s=this.hatch_extra.value[t];if(null!=s){const t=s.get_pattern(e,a,h,r);if(t instanceof Promise){const{_update_iteration:e}=this;t.then((t=>{this._update_iteration==e&&(i(t),this.obj.request_render())}))}else i(t)}else{const s=this.obj.canvas.create_layer(),n=c.get_pattern(s,t,e,a,h,r);i(n)}};if(this.hatch_color.is_Scalar()&&this.hatch_alpha.is_Scalar()&&this.hatch_scale.is_Scalar()&&this.hatch_pattern.is_Scalar()&&this.hatch_weight.is_Scalar()){const a=this.hatch_color.value,h=this.hatch_alpha.value,r=this.hatch_scale.value;e(this.hatch_pattern.value,a,h,r,this.hatch_weight.value,(e=>{this._hatch_image=new n.UniformScalar(e,t)}))}else{const a=new Array(t);a.fill(null),this._hatch_image=new n.UniformVector(a);for(let h=0;h<t;h++){const t=this.hatch_color.get(h),r=this.hatch_alpha.get(h),i=this.hatch_scale.get(h);e(this.hatch_pattern.get(h),t,r,i,this.hatch_weight.get(h),(t=>{a[h]=t}))}}}get doit(){return this._static_doit}set_vectorize(t,e){var a;t.fillStyle=null!==(a=this.pattern(t,e))&&void 0!==a?a:\"transparent\"}pattern(t,e){const a=this._hatch_image.get(e);return null==a?null:t.createPattern(a,this.repetition(e))}repetition(t){const e=this.hatch_pattern.get(t),a=this.hatch_extra.value[e];if(null==a)return\"repeat\";switch(a.repetition){case\"repeat\":return\"repeat\";case\"repeat_x\":return\"repeat-x\";case\"repeat_y\":return\"repeat-y\";case\"no_repeat\":return\"no-repeat\"}}}a.HatchVector=u,u.__name__=\"HatchVector\",l.prototype.type=\"hatch\",l.prototype.attrs=Object.keys(_.Hatch),o.prototype.type=\"hatch\",o.prototype.attrs=Object.keys(_.HatchScalar),u.prototype.type=\"hatch\",u.prototype.attrs=Object.keys(_.HatchVector)},\n", | |
" function _(e,o,a,s,r){s();const i=e(22);function l(e,o,a){e.moveTo(0,a+.5),e.lineTo(o,a+.5),e.stroke()}function n(e,o,a){e.moveTo(a+.5,0),e.lineTo(a+.5,o),e.stroke()}function t(e,o){e.moveTo(0,o),e.lineTo(o,0),e.stroke(),e.moveTo(0,0),e.lineTo(o,o),e.stroke()}a.hatch_aliases={\" \":\"blank\",\".\":\"dot\",o:\"ring\",\"-\":\"horizontal_line\",\"|\":\"vertical_line\",\"+\":\"cross\",'\"':\"horizontal_dash\",\":\":\"vertical_dash\",\"@\":\"spiral\",\"/\":\"right_diagonal_line\",\"\\\\\":\"left_diagonal_line\",x:\"diagonal_cross\",\",\":\"right_diagonal_dash\",\"`\":\"left_diagonal_dash\",v:\"horizontal_wave\",\">\":\"vertical_wave\",\"*\":\"criss_cross\"},a.get_pattern=function(e,o,s,r,c,k){return e.resize(c,c),e.prepare(),function(e,o,s,r,c,k){var _;const T=c,v=T/2,h=v/2,d=i.color2css(s,r);switch(e.strokeStyle=d,e.fillStyle=d,e.lineCap=\"square\",e.lineWidth=k,null!==(_=a.hatch_aliases[o])&&void 0!==_?_:o){case\"blank\":break;case\"dot\":e.arc(v,v,v/2,0,2*Math.PI,!0),e.fill();break;case\"ring\":e.arc(v,v,v/2,0,2*Math.PI,!0),e.stroke();break;case\"horizontal_line\":l(e,T,v);break;case\"vertical_line\":n(e,T,v);break;case\"cross\":l(e,T,v),n(e,T,v);break;case\"horizontal_dash\":l(e,v,v);break;case\"vertical_dash\":n(e,v,v);break;case\"spiral\":{const o=T/30;e.moveTo(v,v);for(let a=0;a<360;a++){const s=.1*a,r=v+o*s*Math.cos(s),i=v+o*s*Math.sin(s);e.lineTo(r,i)}e.stroke();break}case\"right_diagonal_line\":e.moveTo(.5-h,T),e.lineTo(h+.5,0),e.stroke(),e.moveTo(h+.5,T),e.lineTo(3*h+.5,0),e.stroke(),e.moveTo(3*h+.5,T),e.lineTo(5*h+.5,0),e.stroke(),e.stroke();break;case\"left_diagonal_line\":e.moveTo(h+.5,T),e.lineTo(.5-h,0),e.stroke(),e.moveTo(3*h+.5,T),e.lineTo(h+.5,0),e.stroke(),e.moveTo(5*h+.5,T),e.lineTo(3*h+.5,0),e.stroke(),e.stroke();break;case\"diagonal_cross\":t(e,T);break;case\"right_diagonal_dash\":e.moveTo(h+.5,3*h+.5),e.lineTo(3*h+.5,h+.5),e.stroke();break;case\"left_diagonal_dash\":e.moveTo(h+.5,h+.5),e.lineTo(3*h+.5,3*h+.5),e.stroke();break;case\"horizontal_wave\":e.moveTo(0,h),e.lineTo(v,3*h),e.lineTo(T,h),e.stroke();break;case\"vertical_wave\":e.moveTo(h,0),e.lineTo(3*h,v),e.lineTo(h,T),e.stroke();break;case\"criss_cross\":t(e,T),l(e,T,v),n(e,T,v)}}(e.ctx,o,s,r,c,k),e.canvas}},\n", | |
" function _(e,t,s,n,c){n();const a=e(14),i=e(8),r=e(13),l=e(19);class o extends a.HasProps{constructor(e){super(e)}get is_syncable(){return this.syncable}static init_Model(){this.define((({Any:e,Unknown:t,Boolean:s,String:n,Array:c,Dict:a,Nullable:i})=>({tags:[c(t),[]],name:[i(n),null],js_property_callbacks:[a(c(e)),{}],js_event_callbacks:[a(c(e)),{}],subscribed_events:[c(n),[]],syncable:[s,!0]})))}initialize(){super.initialize(),this._js_callbacks=new Map}connect_signals(){super.connect_signals(),this._update_property_callbacks(),this.connect(this.properties.js_property_callbacks.change,(()=>this._update_property_callbacks())),this.connect(this.properties.js_event_callbacks.change,(()=>this._update_event_callbacks())),this.connect(this.properties.subscribed_events.change,(()=>this._update_event_callbacks()))}_process_event(e){var t;for(const s of null!==(t=this.js_event_callbacks[e.event_name])&&void 0!==t?t:[])s.execute(e);null!=this.document&&this.subscribed_events.some((t=>t==e.event_name))&&this.document.event_manager.send_event(e)}trigger_event(e){null!=this.document&&(e.origin=this,this.document.event_manager.trigger(e))}_update_event_callbacks(){null!=this.document?this.document.event_manager.subscribed_models.add(this):l.logger.warn(\"WARNING: Document not defined for updating event callbacks\")}_update_property_callbacks(){const e=e=>{const[t,s=null]=e.split(\":\");return null!=s?this.properties[s][t]:this[t]};for(const[t,s]of this._js_callbacks){const n=e(t);for(const e of s)this.disconnect(n,e)}this._js_callbacks.clear();for(const[t,s]of r.entries(this.js_property_callbacks)){const n=s.map((e=>()=>e.execute(this)));this._js_callbacks.set(t,n);const c=e(t);for(const e of n)this.connect(c,e)}}_doc_attached(){r.isEmpty(this.js_event_callbacks)&&0==this.subscribed_events.length||this._update_event_callbacks()}_doc_detached(){this.document.event_manager.subscribed_models.delete(this)}select(e){if(i.isString(e))return[...this.references()].filter((t=>t instanceof o&&t.name===e));if(e.prototype instanceof a.HasProps)return[...this.references()].filter((t=>t instanceof e));throw new Error(\"invalid selector\")}select_one(e){const t=this.select(e);switch(t.length){case 0:return null;case 1:return t[0];default:throw new Error(\"found more than one object matching given selector\")}}}s.Model=o,o.__name__=\"Model\",o.init_Model()},\n", | |
" function _(s,e,_,t,a){t();class r{constructor(s,e){this.x_scale=s,this.y_scale=e,this.x_range=this.x_scale.source_range,this.y_range=this.y_scale.source_range,this.ranges=[this.x_range,this.y_range],this.scales=[this.x_scale,this.y_scale]}map_to_screen(s,e){return[this.x_scale.v_compute(s),this.y_scale.v_compute(e)]}map_from_screen(s,e){return[this.x_scale.v_invert(s),this.y_scale.v_invert(e)]}}_.CoordinateTransform=r,r.__name__=\"CoordinateTransform\"},\n", | |
" function _(t,e,s,a,i){a();const n=t(1),_=t(56),r=t(133),o=t(48),l=t(20),d=t(24),h=t(122),c=n.__importStar(t(18)),u=t(10);class v extends _.DataAnnotationView{async lazy_initialize(){await super.lazy_initialize();const{start:t,end:e}=this.model;null!=t&&(this.start=await h.build_view(t,{parent:this})),null!=e&&(this.end=await h.build_view(e,{parent:this}))}set_data(t){var e,s;super.set_data(t),null===(e=this.start)||void 0===e||e.set_data(t),null===(s=this.end)||void 0===s||s.set_data(t)}remove(){var t,e;null===(t=this.start)||void 0===t||t.remove(),null===(e=this.end)||void 0===e||e.remove(),super.remove()}map_data(){const{frame:t}=this.plot_view;\"data\"==this.model.start_units?(this._sx_start=this.coordinates.x_scale.v_compute(this._x_start),this._sy_start=this.coordinates.y_scale.v_compute(this._y_start)):(this._sx_start=t.bbox.xview.v_compute(this._x_start),this._sy_start=t.bbox.yview.v_compute(this._y_start)),\"data\"==this.model.end_units?(this._sx_end=this.coordinates.x_scale.v_compute(this._x_end),this._sy_end=this.coordinates.y_scale.v_compute(this._y_end)):(this._sx_end=t.bbox.xview.v_compute(this._x_end),this._sy_end=t.bbox.yview.v_compute(this._y_end));const{_sx_start:e,_sy_start:s,_sx_end:a,_sy_end:i}=this,n=e.length,_=this._angles=new d.ScreenArray(n);for(let t=0;t<n;t++)_[t]=Math.PI/2+u.atan2([e[t],s[t]],[a[t],i[t]])}paint(t){const{start:e,end:s}=this,{_sx_start:a,_sy_start:i,_sx_end:n,_sy_end:_,_angles:r}=this,{x:o,y:l,width:d,height:h}=this.plot_view.frame.bbox;for(let c=0,u=a.length;c<u;c++)null!=s&&(t.save(),t.translate(n[c],_[c]),t.rotate(r[c]),s.render(t,c),t.restore()),null!=e&&(t.save(),t.translate(a[c],i[c]),t.rotate(r[c]+Math.PI),e.render(t,c),t.restore()),this.visuals.line.doit&&(t.save(),null==e&&null==s||(t.beginPath(),t.rect(o,l,d,h),null!=s&&(t.save(),t.translate(n[c],_[c]),t.rotate(r[c]),s.clip(t,c),t.restore()),null!=e&&(t.save(),t.translate(a[c],i[c]),t.rotate(r[c]+Math.PI),e.clip(t,c),t.restore()),t.closePath(),t.clip()),this.visuals.line.set_vectorize(t,c),t.beginPath(),t.moveTo(a[c],i[c]),t.lineTo(n[c],_[c]),t.stroke(),t.restore())}}s.ArrowView=v,v.__name__=\"ArrowView\";class p extends _.DataAnnotation{constructor(t){super(t)}static init_Arrow(){this.prototype.default_view=v,this.mixins(o.LineVector),this.define((({Ref:t,Nullable:e})=>({x_start:[c.XCoordinateSpec,{field:\"x_start\"}],y_start:[c.YCoordinateSpec,{field:\"y_start\"}],start_units:[l.SpatialUnits,\"data\"],start:[e(t(r.ArrowHead)),null],x_end:[c.XCoordinateSpec,{field:\"x_end\"}],y_end:[c.YCoordinateSpec,{field:\"y_end\"}],end_units:[l.SpatialUnits,\"data\"],end:[e(t(r.ArrowHead)),()=>new r.OpenHead]})))}}s.Arrow=p,p.__name__=\"Arrow\",p.init_Arrow()},\n", | |
" function _(t,n,s,a,e){a();const i=t(1),o=t(40),c=t(57),_=t(130),r=t(65),l=i.__importStar(t(18));class h extends o.AnnotationView{constructor(){super(...arguments),this._initial_set_data=!1}connect_signals(){super.connect_signals();const t=()=>{this.set_data(this.model.source),this.request_render()};this.connect(this.model.change,t),this.connect(this.model.source.streaming,t),this.connect(this.model.source.patching,t),this.connect(this.model.source.change,t)}set_data(t){const n=this;for(const s of this.model)if(s instanceof l.VectorSpec||s instanceof l.ScalarSpec)if(s instanceof l.BaseCoordinateSpec){const a=s.array(t);n[`_${s.attr}`]=a}else{const a=s.uniform(t);n[`${s.attr}`]=a}this.plot_model.use_map&&(null!=n._x&&r.inplace.project_xy(n._x,n._y),null!=n._xs&&r.inplace.project_xsys(n._xs,n._ys));for(const t of this.visuals)t.update()}_render(){this._initial_set_data||(this.set_data(this.model.source),this._initial_set_data=!0),this.map_data(),this.paint(this.layer.ctx)}}s.DataAnnotationView=h,h.__name__=\"DataAnnotationView\";class u extends o.Annotation{constructor(t){super(t)}static init_DataAnnotation(){this.define((({Ref:t})=>({source:[t(c.ColumnarDataSource),()=>new _.ColumnDataSource]})))}}s.DataAnnotation=u,u.__name__=\"DataAnnotation\",u.init_DataAnnotation()},\n", | |
" function _(t,e,n,a,i){a();const s=t(58),r=t(15),l=t(19),o=t(60),c=t(8),u=t(9),h=t(13),g=t(59),d=t(129),_=t(29);class m extends s.DataSource{constructor(t){super(t)}get_array(t){let e=this.data[t];return null==e?this.data[t]=e=[]:c.isArray(e)||(this.data[t]=e=Array.from(e)),e}static init_ColumnarDataSource(){this.define((({Ref:t})=>({selection_policy:[t(d.SelectionPolicy),()=>new d.UnionRenderers]}))),this.internal((({AnyRef:t})=>({selection_manager:[t(),t=>new o.SelectionManager({source:t})],inspected:[t(),()=>new g.Selection]})))}initialize(){super.initialize(),this._select=new r.Signal0(this,\"select\"),this.inspect=new r.Signal(this,\"inspect\"),this.streaming=new r.Signal0(this,\"streaming\"),this.patching=new r.Signal(this,\"patching\")}get_column(t){const e=this.data[t];return null!=e?e:null}columns(){return h.keys(this.data)}get_length(t=!0){const e=u.uniq(h.values(this.data).map((t=>_.is_NDArray(t)?t.shape[0]:t.length)));switch(e.length){case 0:return null;case 1:return e[0];default:{const n=\"data source has columns of inconsistent lengths\";if(t)return l.logger.warn(n),e.sort()[0];throw new Error(n)}}}get length(){var t;return null!==(t=this.get_length())&&void 0!==t?t:0}clear(){const t={};for(const e of this.columns())t[e]=new this.data[e].constructor(0);this.data=t}}n.ColumnarDataSource=m,m.__name__=\"ColumnarDataSource\",m.init_ColumnarDataSource()},\n", | |
" function _(e,t,c,n,a){n();const o=e(53),i=e(59);class s extends o.Model{constructor(e){super(e)}static init_DataSource(){this.define((({Ref:e})=>({selected:[e(i.Selection),()=>new i.Selection]})))}}c.DataSource=s,s.__name__=\"DataSource\",s.init_DataSource()},\n", | |
" function _(i,e,s,t,n){t();const l=i(53),c=i(9),h=i(13);class d extends l.Model{constructor(i){super(i)}get_view(){return this.view}static init_Selection(){this.define((({Int:i,Array:e,Dict:s})=>({indices:[e(i),[]],line_indices:[e(i),[]],multiline_indices:[s(e(i)),{}]}))),this.internal((({Int:i,Array:e,AnyRef:s,Struct:t,Nullable:n})=>({selected_glyphs:[e(s()),[]],view:[n(s()),null],image_indices:[e(t({index:i,dim1:i,dim2:i,flat_index:i})),[]]})))}get selected_glyph(){return this.selected_glyphs.length>0?this.selected_glyphs[0]:null}add_to_selected_glyphs(i){this.selected_glyphs.push(i)}update(i,e=!0,s=\"replace\"){switch(s){case\"replace\":this.indices=i.indices,this.line_indices=i.line_indices,this.selected_glyphs=i.selected_glyphs,this.view=i.view,this.multiline_indices=i.multiline_indices,this.image_indices=i.image_indices;break;case\"append\":this.update_through_union(i);break;case\"intersect\":this.update_through_intersection(i);break;case\"subtract\":this.update_through_subtraction(i)}}clear(){this.indices=[],this.line_indices=[],this.multiline_indices={},this.view=null,this.selected_glyphs=[]}is_empty(){return 0==this.indices.length&&0==this.line_indices.length&&0==this.image_indices.length}update_through_union(i){this.indices=c.union(this.indices,i.indices),this.selected_glyphs=c.union(i.selected_glyphs,this.selected_glyphs),this.line_indices=c.union(i.line_indices,this.line_indices),this.view=i.view,this.multiline_indices=h.merge(i.multiline_indices,this.multiline_indices)}update_through_intersection(i){this.indices=c.intersection(this.indices,i.indices),this.selected_glyphs=c.union(i.selected_glyphs,this.selected_glyphs),this.line_indices=c.union(i.line_indices,this.line_indices),this.view=i.view,this.multiline_indices=h.merge(i.multiline_indices,this.multiline_indices)}update_through_subtraction(i){this.indices=c.difference(this.indices,i.indices),this.selected_glyphs=c.union(i.selected_glyphs,this.selected_glyphs),this.line_indices=c.union(i.line_indices,this.line_indices),this.view=i.view,this.multiline_indices=h.merge(i.multiline_indices,this.multiline_indices)}}s.Selection=d,d.__name__=\"Selection\",d.init_Selection()},\n", | |
" function _(e,t,s,n,i){n();const o=e(14),c=e(59),r=e(61),l=e(123);class p extends o.HasProps{constructor(e){super(e),this.inspectors=new Map}static init_SelectionManager(){this.internal((({AnyRef:e})=>({source:[e()]})))}select(e,t,s,n=\"replace\"){const i=[],o=[];for(const t of e)t instanceof r.GlyphRendererView?i.push(t):t instanceof l.GraphRendererView&&o.push(t);let c=!1;for(const e of o){const i=e.model.selection_policy.hit_test(t,e);c=c||e.model.selection_policy.do_selection(i,e.model,s,n)}if(i.length>0){const e=this.source.selection_policy.hit_test(t,i);c=c||this.source.selection_policy.do_selection(e,this.source,s,n)}return c}inspect(e,t){let s=!1;if(e instanceof r.GlyphRendererView){const n=e.hit_test(t);if(null!=n){s=!n.is_empty();const i=this.get_or_create_inspector(e.model);i.update(n,!0,\"replace\"),this.source.setv({inspected:i},{silent:!0}),this.source.inspect.emit([e.model,{geometry:t}])}}else if(e instanceof l.GraphRendererView){const n=e.model.inspection_policy.hit_test(t,e);s=s||e.model.inspection_policy.do_inspection(n,t,e,!1,\"replace\")}return s}clear(e){this.source.selected.clear(),null!=e&&this.get_or_create_inspector(e.model).clear()}get_or_create_inspector(e){let t=this.inspectors.get(e);return null==t&&(t=new c.Selection,this.inspectors.set(e,t)),t}}s.SelectionManager=p,p.__name__=\"SelectionManager\",p.init_SelectionManager()},\n", | |
" function _(e,t,i,s,l){s();const h=e(62),n=e(63),o=e(116),a=e(117),c=e(119),d=e(98),_=e(57),r=e(120),p=e(24),g=e(12),u=e(9),y=e(13),m=e(122),v=e(104),f={fill:{},line:{}},w={fill:{fill_alpha:.3,fill_color:\"grey\"},line:{line_alpha:.3,line_color:\"grey\"}},b={fill:{fill_alpha:.2},line:{}};class V extends h.DataRendererView{get glyph_view(){return this.glyph}async lazy_initialize(){var e,t;await super.lazy_initialize();const i=this.model.glyph;this.glyph=await this.build_glyph_view(i);const s=\"fill\"in this.glyph.visuals,l=\"line\"in this.glyph.visuals,h=Object.assign({},i.attributes);function n(e){const t=y.clone(h);return s&&y.extend(t,e.fill),l&&y.extend(t,e.line),new i.constructor(t)}delete h.id;let{selection_glyph:o}=this.model;null==o?o=n({fill:{},line:{}}):\"auto\"==o&&(o=n(f)),this.selection_glyph=await this.build_glyph_view(o);let{nonselection_glyph:a}=this.model;null==a?a=n({fill:{},line:{}}):\"auto\"==a&&(a=n(b)),this.nonselection_glyph=await this.build_glyph_view(a);const{hover_glyph:c}=this.model;null!=c&&(this.hover_glyph=await this.build_glyph_view(c));const{muted_glyph:d}=this.model;null!=d&&(this.muted_glyph=await this.build_glyph_view(d));const _=n(w);this.decimated_glyph=await this.build_glyph_view(_),this.selection_glyph.set_base(this.glyph),this.nonselection_glyph.set_base(this.glyph),null===(e=this.hover_glyph)||void 0===e||e.set_base(this.glyph),null===(t=this.muted_glyph)||void 0===t||t.set_base(this.glyph),this.decimated_glyph.set_base(this.glyph),this.set_data()}async build_glyph_view(e){return m.build_view(e,{parent:this})}remove(){var e,t;this.glyph.remove(),this.selection_glyph.remove(),this.nonselection_glyph.remove(),null===(e=this.hover_glyph)||void 0===e||e.remove(),null===(t=this.muted_glyph)||void 0===t||t.remove(),this.decimated_glyph.remove(),super.remove()}connect_signals(){super.connect_signals();const e=()=>this.request_render(),t=()=>this.update_data();this.connect(this.model.change,e),this.connect(this.glyph.model.change,t),this.connect(this.selection_glyph.model.change,t),this.connect(this.nonselection_glyph.model.change,t),null!=this.hover_glyph&&this.connect(this.hover_glyph.model.change,t),null!=this.muted_glyph&&this.connect(this.muted_glyph.model.change,t),this.connect(this.decimated_glyph.model.change,t),this.connect(this.model.data_source.change,t),this.connect(this.model.data_source.streaming,t),this.connect(this.model.data_source.patching,(e=>this.update_data(e))),this.connect(this.model.data_source.selected.change,e),this.connect(this.model.data_source._select,e),null!=this.hover_glyph&&this.connect(this.model.data_source.inspect,e),this.connect(this.model.properties.view.change,t),this.connect(this.model.view.properties.indices.change,t),this.connect(this.model.view.properties.masked.change,(()=>this.set_visuals())),this.connect(this.model.properties.visible.change,(()=>this.plot_view.invalidate_dataranges=!0));const{x_ranges:i,y_ranges:s}=this.plot_view.frame;for(const[,e]of i)e instanceof v.FactorRange&&this.connect(e.change,t);for(const[,e]of s)e instanceof v.FactorRange&&this.connect(e.change,t);const{transformchange:l,exprchange:h}=this.model.glyph;this.connect(l,t),this.connect(h,t)}_update_masked_indices(){const e=this.glyph.mask_data();return this.model.view.masked=e,e}update_data(e){this.set_data(e),this.request_render()}set_data(e){const t=this.model.data_source;this.all_indices=this.model.view.indices;const{all_indices:i}=this;this.glyph.set_data(t,i,e),this.set_visuals(),this._update_masked_indices();const{lod_factor:s}=this.plot_model,l=this.all_indices.count;this.decimated=new p.Indices(l);for(let e=0;e<l;e+=s)this.decimated.set(e);this.plot_view.invalidate_dataranges=!0}set_visuals(){var e,t,i,s;const l=this.model.data_source,{all_indices:h}=this;this.glyph.set_visuals(l,h),this.decimated_glyph.set_visuals(l,h),null===(e=this.selection_glyph)||void 0===e||e.set_visuals(l,h),null===(t=this.nonselection_glyph)||void 0===t||t.set_visuals(l,h),null===(i=this.hover_glyph)||void 0===i||i.set_visuals(l,h),null===(s=this.muted_glyph)||void 0===s||s.set_visuals(l,h)}get has_webgl(){return this.glyph.has_webgl}_render(){const e=this.has_webgl;this.glyph.map_data();const t=[...this.all_indices];let i=[...this._update_masked_indices()];const{ctx:s}=this.layer;s.save();const{selected:l}=this.model.data_source;let h;h=!l||l.is_empty()?[]:this.glyph instanceof n.LineView&&l.selected_glyph===this.glyph.model?this.model.view.convert_indices_from_subset(i):l.indices;const{inspected:d}=this.model.data_source,_=new Set((()=>!d||d.is_empty()?[]:d.selected_glyph?this.model.view.convert_indices_from_subset(i):d.indices.length>0?d.indices:Object.keys(d.multiline_indices).map((e=>parseInt(e))))()),r=g.filter(i,(e=>_.has(t[e]))),{lod_threshold:p}=this.plot_model;let y,m,v;if(null!=this.model.document&&this.model.document.interactive_duration()>0&&!e&&null!=p&&t.length>p?(i=[...this.decimated],y=this.decimated_glyph,m=this.decimated_glyph,v=this.selection_glyph):(y=this.model.muted&&null!=this.muted_glyph?this.muted_glyph:this.glyph,m=this.nonselection_glyph,v=this.selection_glyph),null!=this.hover_glyph&&r.length&&(i=u.difference(i,r)),h.length){const e={};for(const t of h)e[t]=!0;const l=new Array,o=new Array;if(this.glyph instanceof n.LineView)for(const i of t)null!=e[i]?l.push(i):o.push(i);else for(const s of i)null!=e[t[s]]?l.push(s):o.push(s);m.render(s,o),v.render(s,l),null!=this.hover_glyph&&(this.glyph instanceof n.LineView?this.hover_glyph.render(s,this.model.view.convert_indices_from_subset(r)):this.hover_glyph.render(s,r))}else if(this.glyph instanceof n.LineView)this.hover_glyph&&r.length?this.hover_glyph.render(s,this.model.view.convert_indices_from_subset(r)):y.render(s,t);else if(this.glyph instanceof o.PatchView||this.glyph instanceof a.HAreaView||this.glyph instanceof c.VAreaView)if(0==d.selected_glyphs.length||null==this.hover_glyph)y.render(s,t);else for(const e of d.selected_glyphs)e==this.glyph.model&&this.hover_glyph.render(s,t);else y.render(s,i),this.hover_glyph&&r.length&&this.hover_glyph.render(s,r);s.restore()}draw_legend(e,t,i,s,l,h,n,o){0!=this.glyph.data_size&&(null==o&&(o=this.model.get_reference_point(h,n)),this.glyph.draw_legend_for_index(e,{x0:t,x1:i,y0:s,y1:l},o))}hit_test(e){if(!this.model.visible)return null;const t=this.glyph.hit_test(e);return null==t?null:this.model.view.convert_selection_from_subset(t)}}i.GlyphRendererView=V,V.__name__=\"GlyphRendererView\";class x extends h.DataRenderer{constructor(e){super(e)}static init_GlyphRenderer(){this.prototype.default_view=V,this.define((({Boolean:e,Auto:t,Or:i,Ref:s,Null:l,Nullable:h})=>({data_source:[s(_.ColumnarDataSource)],view:[s(r.CDSView),e=>new r.CDSView({source:e.data_source})],glyph:[s(d.Glyph)],hover_glyph:[h(s(d.Glyph)),null],nonselection_glyph:[i(s(d.Glyph),t,l),\"auto\"],selection_glyph:[i(s(d.Glyph),t,l),\"auto\"],muted_glyph:[h(s(d.Glyph)),null],muted:[e,!1]})))}initialize(){super.initialize(),this.view.source!=this.data_source&&(this.view.source=this.data_source,this.view.compute_indices())}get_reference_point(e,t){let i=0;if(null!=e){const s=this.data_source.get_column(e);if(null!=s)if(null==this.view){const e=g.indexOf(s,t);-1!=e&&(i=e)}else for(const[e,l]of Object.entries(this.view.indices_map))if(s[parseInt(e)]==t){i=l;break}}return i}get_selection_manager(){return this.data_source.selection_manager}}i.GlyphRenderer=x,x.__name__=\"GlyphRenderer\",x.init_GlyphRenderer()},\n", | |
" function _(e,r,t,a,n){a();const s=e(41);class i extends s.RendererView{get xscale(){return this.coordinates.x_scale}get yscale(){return this.coordinates.y_scale}}t.DataRendererView=i,i.__name__=\"DataRendererView\";class _ extends s.Renderer{constructor(e){super(e)}static init_DataRenderer(){this.override({level:\"glyph\"})}get selection_manager(){return this.get_selection_manager()}}t.DataRenderer=_,_.__name__=\"DataRenderer\",_.init_DataRenderer()},\n", | |
" function _(e,i,t,s,n){s();const l=e(1),_=e(64),r=e(106),o=e(108),h=l.__importStar(e(48)),a=l.__importStar(e(107)),c=e(59);class d extends _.XYGlyphView{initialize(){super.initialize();const{webgl:e}=this.renderer.plot_view.canvas_view;null!=e&&(this.glglyph=new o.LineGL(e.gl,this))}_render(e,i,t){const{sx:s,sy:n}=null!=t?t:this;let l=!1,_=null;this.visuals.line.set_value(e);for(const t of i){const i=s[t],r=n[t];if(l){if(!isFinite(i+r)){e.stroke(),e.beginPath(),l=!1,_=t;continue}null!=_&&t-_>1&&(e.stroke(),l=!1)}l?e.lineTo(i,r):(e.beginPath(),e.moveTo(i,r),l=!0),_=t}l&&e.stroke()}_hit_point(e){const i=new c.Selection,t={x:e.sx,y:e.sy};let s=9999;const n=Math.max(2,this.line_width.value/2);for(let e=0,l=this.sx.length-1;e<l;e++){const l={x:this.sx[e],y:this.sy[e]},_={x:this.sx[e+1],y:this.sy[e+1]},r=a.dist_to_segment(t,l,_);r<n&&r<s&&(s=r,i.add_to_selected_glyphs(this.model),i.view=this,i.line_indices=[e])}return i}_hit_span(e){const{sx:i,sy:t}=e,s=new c.Selection;let n,l;\"v\"==e.direction?(n=this.renderer.yscale.invert(t),l=this._y):(n=this.renderer.xscale.invert(i),l=this._x);for(let e=0,i=l.length-1;e<i;e++)(l[e]<=n&&n<=l[e+1]||l[e+1]<=n&&n<=l[e])&&(s.add_to_selected_glyphs(this.model),s.view=this,s.line_indices.push(e));return s}get_interpolation_hit(e,i){const[t,s,n,l]=[this._x[e],this._y[e],this._x[e+1],this._y[e+1]];return r.line_interpolation(this.renderer,i,t,s,n,l)}draw_legend_for_index(e,i,t){r.generic_line_scalar_legend(this.visuals,e,i)}}t.LineView=d,d.__name__=\"LineView\";class u extends _.XYGlyph{constructor(e){super(e)}static init_Line(){this.prototype.default_view=d,this.mixins(h.LineScalar)}}t.Line=u,u.__name__=\"Line\",u.init_Line()},\n", | |
" function _(t,e,i,s,_){s();const n=t(1),a=t(65),p=n.__importStar(t(18)),y=t(98);class c extends y.GlyphView{_project_data(){a.inplace.project_xy(this._x,this._y)}_index_data(t){const{_x:e,_y:i,data_size:s}=this;for(let _=0;_<s;_++){const s=e[_],n=i[_];isNaN(s+n)||!isFinite(s+n)?t.add_empty():t.add(s,n,s,n)}}scenterxy(t){return[this.sx[t],this.sy[t]]}}i.XYGlyphView=c,c.__name__=\"XYGlyphView\";class d extends y.Glyph{constructor(t){super(t)}static init_XYGlyph(){this.define((({})=>({x:[p.XCoordinateSpec,{field:\"x\"}],y:[p.YCoordinateSpec,{field:\"y\"}]})))}}i.XYGlyph=d,d.__name__=\"XYGlyph\",d.init_XYGlyph()},\n", | |
" function _(n,t,e,o,r){o();const c=n(1),l=c.__importDefault(n(66)),i=c.__importDefault(n(67)),u=n(24),a=new i.default(\"GOOGLE\"),s=new i.default(\"WGS84\"),f=l.default(s,a);e.wgs84_mercator={compute:(n,t)=>isFinite(n)&&isFinite(t)?f.forward([n,t]):[NaN,NaN],invert:(n,t)=>isFinite(n)&&isFinite(t)?f.inverse([n,t]):[NaN,NaN]};const _={lon:[-20026376.39,20026376.39],lat:[-20048966.1,20048966.1]},p={lon:[-180,180],lat:[-85.06,85.06]},{min:g,max:h}=Math;function m(n,t){const o=g(n.length,t.length),r=u.infer_type(n,t),c=new r(o),l=new r(o);return e.inplace.project_xy(n,t,c,l),[c,l]}e.clip_mercator=function(n,t,e){const[o,r]=_[e];return[h(n,o),g(t,r)]},e.in_bounds=function(n,t){const[e,o]=p[t];return e<n&&n<o},function(n){function t(n,t,o,r){const c=g(n.length,t.length);o=null!=o?o:n,r=null!=r?r:t;for(let l=0;l<c;l++){const c=n[l],i=t[l],[u,a]=e.wgs84_mercator.compute(c,i);o[l]=u,r[l]=a}}n.project_xy=t,n.project_xsys=function(n,e,o,r){const c=g(n.length,e.length);o=null!=o?o:n,r=null!=r?r:e;for(let l=0;l<c;l++)t(n[l],e[l],o[l],r[l])}}(e.inplace||(e.inplace={})),e.project_xy=m,e.project_xsys=function(n,t){const e=g(n.length,t.length),o=new Array(e),r=new Array(e);for(let c=0;c<e;c++){const[e,l]=m(n[c],t[c]);o[c]=e,r[c]=l}return[o,r]}},\n", | |
" function _(e,n,t,r,o){r();const a=e(1),i=a.__importDefault(e(67)),c=a.__importDefault(e(92));var u=i.default(\"WGS84\");function f(e,n,t){var r,o,a;return Array.isArray(t)?(r=c.default(e,n,t)||{x:NaN,y:NaN},t.length>2?void 0!==e.name&&\"geocent\"===e.name||void 0!==n.name&&\"geocent\"===n.name?\"number\"==typeof r.z?[r.x,r.y,r.z].concat(t.splice(3)):[r.x,r.y,t[2]].concat(t.splice(3)):[r.x,r.y].concat(t.splice(2)):[r.x,r.y]):(o=c.default(e,n,t),2===(a=Object.keys(t)).length||a.forEach((function(r){if(void 0!==e.name&&\"geocent\"===e.name||void 0!==n.name&&\"geocent\"===n.name){if(\"x\"===r||\"y\"===r||\"z\"===r)return}else if(\"x\"===r||\"y\"===r)return;o[r]=t[r]})),o)}function l(e){return e instanceof i.default?e:e.oProj?e.oProj:i.default(e)}t.default=function(e,n,t){e=l(e);var r,o=!1;return void 0===n?(n=e,e=u,o=!0):(void 0!==n.x||Array.isArray(n))&&(t=n,n=e,e=u,o=!0),n=l(n),t?f(e,n,t):(r={forward:function(t){return f(e,n,t)},inverse:function(t){return f(n,e,t)}},o&&(r.oProj=n),r)}},\n", | |
" function _(t,e,a,s,i){s();const u=t(1),l=u.__importDefault(t(68)),o=u.__importDefault(t(79)),r=u.__importDefault(t(80)),f=t(88),p=u.__importDefault(t(90)),d=u.__importDefault(t(91)),m=u.__importDefault(t(75));function n(t,e){if(!(this instanceof n))return new n(t);e=e||function(t){if(t)throw t};var a=l.default(t);if(\"object\"==typeof a){var s=n.projections.get(a.projName);if(s){if(a.datumCode&&\"none\"!==a.datumCode){var i=m.default(p.default,a.datumCode);i&&(a.datum_params=i.towgs84?i.towgs84.split(\",\"):null,a.ellps=i.ellipse,a.datumName=i.datumName?i.datumName:a.datumCode)}a.k0=a.k0||1,a.axis=a.axis||\"enu\",a.ellps=a.ellps||\"wgs84\";var u=f.sphere(a.a,a.b,a.rf,a.ellps,a.sphere),r=f.eccentricity(u.a,u.b,u.rf,a.R_A),h=a.datum||d.default(a.datumCode,a.datum_params,u.a,u.b,r.es,r.ep2);o.default(this,a),o.default(this,s),this.a=u.a,this.b=u.b,this.rf=u.rf,this.sphere=u.sphere,this.es=r.es,this.e=r.e,this.ep2=r.ep2,this.datum=h,this.init(),e(null,this)}else e(t)}else e(t)}n.projections=r.default,n.projections.start(),a.default=n},\n", | |
" function _(t,r,n,u,e){u();const f=t(1),i=f.__importDefault(t(69)),a=f.__importDefault(t(76)),o=f.__importDefault(t(71)),l=f.__importDefault(t(75));var C=[\"PROJECTEDCRS\",\"PROJCRS\",\"GEOGCS\",\"GEOCCS\",\"PROJCS\",\"LOCAL_CS\",\"GEODCRS\",\"GEODETICCRS\",\"GEODETICDATUM\",\"ENGCRS\",\"ENGINEERINGCRS\"];var d=[\"3857\",\"900913\",\"3785\",\"102113\"];n.default=function(t){if(!function(t){return\"string\"==typeof t}(t))return t;if(function(t){return t in i.default}(t))return i.default[t];if(function(t){return C.some((function(r){return t.indexOf(r)>-1}))}(t)){var r=a.default(t);if(function(t){var r=l.default(t,\"authority\");if(r){var n=l.default(r,\"epsg\");return n&&d.indexOf(n)>-1}}(r))return i.default[\"EPSG:3857\"];var n=function(t){var r=l.default(t,\"extension\");if(r)return l.default(r,\"proj4\")}(r);return n?o.default(n):r}return function(t){return\"+\"===t[0]}(t)?o.default(t):void 0}},\n", | |
" function _(t,r,i,e,n){e();const f=t(1),a=f.__importDefault(t(70)),l=f.__importDefault(t(71)),u=f.__importDefault(t(76));function o(t){var r=this;if(2===arguments.length){var i=arguments[1];\"string\"==typeof i?\"+\"===i.charAt(0)?o[t]=l.default(arguments[1]):o[t]=u.default(arguments[1]):o[t]=i}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?o.apply(r,t):o(t)}));if(\"string\"==typeof t){if(t in o)return o[t]}else\"EPSG\"in t?o[\"EPSG:\"+t.EPSG]=t:\"ESRI\"in t?o[\"ESRI:\"+t.ESRI]=t:\"IAU2000\"in t?o[\"IAU2000:\"+t.IAU2000]=t:console.log(t);return}}a.default(o),i.default=o},\n", | |
" function _(t,l,G,S,e){S(),G.default=function(t){t(\"EPSG:4326\",\"+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees\"),t(\"EPSG:4269\",\"+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees\"),t(\"EPSG:3857\",\"+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs\"),t.WGS84=t[\"EPSG:4326\"],t[\"EPSG:3785\"]=t[\"EPSG:3857\"],t.GOOGLE=t[\"EPSG:3857\"],t[\"EPSG:900913\"]=t[\"EPSG:3857\"],t[\"EPSG:102113\"]=t[\"EPSG:3857\"]}},\n", | |
" function _(t,n,o,a,u){a();const e=t(1),r=t(72),i=e.__importDefault(t(73)),f=e.__importDefault(t(74)),l=e.__importDefault(t(75));o.default=function(t){var n,o,a,u={},e=t.split(\"+\").map((function(t){return t.trim()})).filter((function(t){return t})).reduce((function(t,n){var o=n.split(\"=\");return o.push(!0),t[o[0].toLowerCase()]=o[1],t}),{}),c={proj:\"projName\",datum:\"datumCode\",rf:function(t){u.rf=parseFloat(t)},lat_0:function(t){u.lat0=t*r.D2R},lat_1:function(t){u.lat1=t*r.D2R},lat_2:function(t){u.lat2=t*r.D2R},lat_ts:function(t){u.lat_ts=t*r.D2R},lon_0:function(t){u.long0=t*r.D2R},lon_1:function(t){u.long1=t*r.D2R},lon_2:function(t){u.long2=t*r.D2R},alpha:function(t){u.alpha=parseFloat(t)*r.D2R},lonc:function(t){u.longc=t*r.D2R},x_0:function(t){u.x0=parseFloat(t)},y_0:function(t){u.y0=parseFloat(t)},k_0:function(t){u.k0=parseFloat(t)},k:function(t){u.k0=parseFloat(t)},a:function(t){u.a=parseFloat(t)},b:function(t){u.b=parseFloat(t)},r_a:function(){u.R_A=!0},zone:function(t){u.zone=parseInt(t,10)},south:function(){u.utmSouth=!0},towgs84:function(t){u.datum_params=t.split(\",\").map((function(t){return parseFloat(t)}))},to_meter:function(t){u.to_meter=parseFloat(t)},units:function(t){u.units=t;var n=l.default(f.default,t);n&&(u.to_meter=n.to_meter)},from_greenwich:function(t){u.from_greenwich=t*r.D2R},pm:function(t){var n=l.default(i.default,t);u.from_greenwich=(n||parseFloat(t))*r.D2R},nadgrids:function(t){\"@null\"===t?u.datumCode=\"none\":u.nadgrids=t},axis:function(t){var n=\"ewnsud\";3===t.length&&-1!==n.indexOf(t.substr(0,1))&&-1!==n.indexOf(t.substr(1,1))&&-1!==n.indexOf(t.substr(2,1))&&(u.axis=t)}};for(n in e)o=e[n],n in c?\"function\"==typeof(a=c[n])?a(o):u[a]=o:u[n]=o;return\"string\"==typeof u.datumCode&&\"WGS84\"!==u.datumCode&&(u.datumCode=u.datumCode.toLowerCase()),u}},\n", | |
" function _(P,A,_,D,I){D(),_.PJD_3PARAM=1,_.PJD_7PARAM=2,_.PJD_WGS84=4,_.PJD_NODATUM=5,_.SEC_TO_RAD=484813681109536e-20,_.HALF_PI=Math.PI/2,_.SIXTH=.16666666666666666,_.RA4=.04722222222222222,_.RA6=.022156084656084655,_.EPSLN=1e-10,_.D2R=.017453292519943295,_.R2D=57.29577951308232,_.FORTPI=Math.PI/4,_.TWO_PI=2*Math.PI,_.SPI=3.14159265359},\n", | |
" function _(o,r,a,e,s){e();var n={};a.default=n,n.greenwich=0,n.lisbon=-9.131906111111,n.paris=2.337229166667,n.bogota=-74.080916666667,n.madrid=-3.687938888889,n.rome=12.452333333333,n.bern=7.439583333333,n.jakarta=106.807719444444,n.ferro=-17.666666666667,n.brussels=4.367975,n.stockholm=18.058277777778,n.athens=23.7163375,n.oslo=10.722916666667},\n", | |
" function _(t,e,f,o,u){o(),f.default={ft:{to_meter:.3048},\"us-ft\":{to_meter:1200/3937}}},\n", | |
" function _(e,r,t,a,n){a();var o=/[\\s_\\-\\/\\(\\)]/g;t.default=function(e,r){if(e[r])return e[r];for(var t,a=Object.keys(e),n=r.toLowerCase().replace(o,\"\"),f=-1;++f<a.length;)if((t=a[f]).toLowerCase().replace(o,\"\")===n)return e[t]}},\n", | |
" function _(e,t,a,o,d){o();const r=e(1);const n=r.__importDefault(e(77)),l=e(78);function i(e){return.017453292519943295*e}a.default=function(e){var t=n.default(e),a=t.shift(),o=t.shift();t.unshift([\"name\",o]),t.unshift([\"type\",a]);var d={};return l.sExpr(t,d),function(e){if(\"GEOGCS\"===e.type?e.projName=\"longlat\":\"LOCAL_CS\"===e.type?(e.projName=\"identity\",e.local=!0):\"object\"==typeof e.PROJECTION?e.projName=Object.keys(e.PROJECTION)[0]:e.projName=e.PROJECTION,e.AXIS){for(var t=\"\",a=0,o=e.AXIS.length;a<o;++a){var d=e.AXIS[a][0].toLowerCase();-1!==d.indexOf(\"north\")?t+=\"n\":-1!==d.indexOf(\"south\")?t+=\"s\":-1!==d.indexOf(\"east\")?t+=\"e\":-1!==d.indexOf(\"west\")&&(t+=\"w\")}2===t.length&&(t+=\"u\"),3===t.length&&(e.axis=t)}e.UNIT&&(e.units=e.UNIT.name.toLowerCase(),\"metre\"===e.units&&(e.units=\"meter\"),e.UNIT.convert&&(\"GEOGCS\"===e.type?e.DATUM&&e.DATUM.SPHEROID&&(e.to_meter=e.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter=e.UNIT.convert));var r=e.GEOGCS;function n(t){return t*(e.to_meter||1)}\"GEOGCS\"===e.type&&(r=e),r&&(r.DATUM?e.datumCode=r.DATUM.name.toLowerCase():e.datumCode=r.name.toLowerCase(),\"d_\"===e.datumCode.slice(0,2)&&(e.datumCode=e.datumCode.slice(2)),\"new_zealand_geodetic_datum_1949\"!==e.datumCode&&\"new_zealand_1949\"!==e.datumCode||(e.datumCode=\"nzgd49\"),\"wgs_1984\"!==e.datumCode&&\"world_geodetic_system_1984\"!==e.datumCode||(\"Mercator_Auxiliary_Sphere\"===e.PROJECTION&&(e.sphere=!0),e.datumCode=\"wgs84\"),\"_ferro\"===e.datumCode.slice(-6)&&(e.datumCode=e.datumCode.slice(0,-6)),\"_jakarta\"===e.datumCode.slice(-8)&&(e.datumCode=e.datumCode.slice(0,-8)),~e.datumCode.indexOf(\"belge\")&&(e.datumCode=\"rnb72\"),r.DATUM&&r.DATUM.SPHEROID&&(e.ellps=r.DATUM.SPHEROID.name.replace(\"_19\",\"\").replace(/[Cc]larke\\_18/,\"clrk\"),\"international\"===e.ellps.toLowerCase().slice(0,13)&&(e.ellps=\"intl\"),e.a=r.DATUM.SPHEROID.a,e.rf=parseFloat(r.DATUM.SPHEROID.rf,10)),r.DATUM&&r.DATUM.TOWGS84&&(e.datum_params=r.DATUM.TOWGS84),~e.datumCode.indexOf(\"osgb_1936\")&&(e.datumCode=\"osgb36\"),~e.datumCode.indexOf(\"osni_1952\")&&(e.datumCode=\"osni52\"),(~e.datumCode.indexOf(\"tm65\")||~e.datumCode.indexOf(\"geodetic_datum_of_1965\"))&&(e.datumCode=\"ire65\"),\"ch1903+\"===e.datumCode&&(e.datumCode=\"ch1903\"),~e.datumCode.indexOf(\"israel\")&&(e.datumCode=\"isr93\")),e.b&&!isFinite(e.b)&&(e.b=e.a),[[\"standard_parallel_1\",\"Standard_Parallel_1\"],[\"standard_parallel_2\",\"Standard_Parallel_2\"],[\"false_easting\",\"False_Easting\"],[\"false_northing\",\"False_Northing\"],[\"central_meridian\",\"Central_Meridian\"],[\"latitude_of_origin\",\"Latitude_Of_Origin\"],[\"latitude_of_origin\",\"Central_Parallel\"],[\"scale_factor\",\"Scale_Factor\"],[\"k0\",\"scale_factor\"],[\"latitude_of_center\",\"Latitude_Of_Center\"],[\"latitude_of_center\",\"Latitude_of_center\"],[\"lat0\",\"latitude_of_center\",i],[\"longitude_of_center\",\"Longitude_Of_Center\"],[\"longitude_of_center\",\"Longitude_of_center\"],[\"longc\",\"longitude_of_center\",i],[\"x0\",\"false_easting\",n],[\"y0\",\"false_northing\",n],[\"long0\",\"central_meridian\",i],[\"lat0\",\"latitude_of_origin\",i],[\"lat0\",\"standard_parallel_1\",i],[\"lat1\",\"standard_parallel_1\",i],[\"lat2\",\"standard_parallel_2\",i],[\"azimuth\",\"Azimuth\"],[\"alpha\",\"azimuth\",i],[\"srsCode\",\"name\"]].forEach((function(t){return a=e,d=(o=t)[0],r=o[1],void(!(d in a)&&r in a&&(a[d]=a[r],3===o.length&&(a[d]=o[2](a[d]))));var a,o,d,r})),e.long0||!e.longc||\"Albers_Conic_Equal_Area\"!==e.projName&&\"Lambert_Azimuthal_Equal_Area\"!==e.projName||(e.long0=e.longc),e.lat_ts||!e.lat1||\"Stereographic_South_Pole\"!==e.projName&&\"Polar Stereographic (variant B)\"!==e.projName||(e.lat0=i(e.lat1>0?90:-90),e.lat_ts=e.lat1)}(d),d}},\n", | |
" function _(t,e,r,i,s){i(),r.default=function(t){return new d(t).output()};var h=/\\s/,o=/[A-Za-z]/,n=/[A-Za-z84]/,a=/[,\\]]/,u=/[\\d\\.E\\-\\+]/;function d(t){if(\"string\"!=typeof t)throw new Error(\"not a string\");this.text=t.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=1}d.prototype.readCharicter=function(){var t=this.text[this.place++];if(4!==this.state)for(;h.test(t);){if(this.place>=this.text.length)return;t=this.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},d.prototype.afterquote=function(t){if('\"'===t)return this.word+='\"',void(this.state=4);if(a.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error(\"havn't handled \\\"\"+t+'\" in afterquote yet, index '+this.place)},d.prototype.afterItem=function(t){return\",\"===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=1)):\"]\"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=1,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},d.prototype.number=function(t){if(!u.test(t)){if(a.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error(\"havn't handled \\\"\"+t+'\" in number yet, index '+this.place)}this.word+=t},d.prototype.quoted=function(t){'\"'!==t?this.word+=t:this.state=5},d.prototype.keyword=function(t){if(n.test(t))this.word+=t;else{if(\"[\"===t){var e=[];return e.push(this.word),this.level++,null===this.root?this.root=e:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject=e,void(this.state=1)}if(!a.test(t))throw new Error(\"havn't handled \\\"\"+t+'\" in keyword yet, index '+this.place);this.afterItem(t)}},d.prototype.neutral=function(t){if(o.test(t))return this.word=t,void(this.state=2);if('\"'===t)return this.word=\"\",void(this.state=4);if(u.test(t))return this.word=t,void(this.state=3);if(!a.test(t))throw new Error(\"havn't handled \\\"\"+t+'\" in neutral yet, index '+this.place);this.afterItem(t)},d.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(-1===this.state)return this.root;throw new Error('unable to parse string \"'+this.text+'\". State is '+this.state)}},\n", | |
" function _(e,a,r,s,c){function n(e,a,r){Array.isArray(a)&&(r.unshift(a),a=null);var s=a?{}:e,c=r.reduce((function(e,a){return E(a,e),e}),s);a&&(e[a]=c)}function E(e,a){if(Array.isArray(e)){var r=e.shift();if(\"PARAMETER\"===r&&(r=e.shift()),1===e.length)return Array.isArray(e[0])?(a[r]={},void E(e[0],a[r])):void(a[r]=e[0]);if(e.length)if(\"TOWGS84\"!==r){if(\"AXIS\"===r)return r in a||(a[r]=[]),void a[r].push(e);var s;switch(Array.isArray(r)||(a[r]={}),r){case\"UNIT\":case\"PRIMEM\":case\"VERT_DATUM\":return a[r]={name:e[0].toLowerCase(),convert:e[1]},void(3===e.length&&E(e[2],a[r]));case\"SPHEROID\":case\"ELLIPSOID\":return a[r]={name:e[0],a:e[1],rf:e[2]},void(4===e.length&&E(e[3],a[r]));case\"PROJECTEDCRS\":case\"PROJCRS\":case\"GEOGCS\":case\"GEOCCS\":case\"PROJCS\":case\"LOCAL_CS\":case\"GEODCRS\":case\"GEODETICCRS\":case\"GEODETICDATUM\":case\"EDATUM\":case\"ENGINEERINGDATUM\":case\"VERT_CS\":case\"VERTCRS\":case\"VERTICALCRS\":case\"COMPD_CS\":case\"COMPOUNDCRS\":case\"ENGINEERINGCRS\":case\"ENGCRS\":case\"FITTED_CS\":case\"LOCAL_DATUM\":case\"DATUM\":return e[0]=[\"name\",e[0]],void n(a,r,e);default:for(s=-1;++s<e.length;)if(!Array.isArray(e[s]))return E(e,a[r]);return n(a,r,e)}}else a[r]=e;else a[r]=!0}else a[e]=!0}s(),r.sExpr=E},\n", | |
" function _(n,r,f,i,t){i(),f.default=function(n,r){var f,i;if(n=n||{},!r)return n;for(i in r)void 0!==(f=r[i])&&(n[i]=f);return n}},\n", | |
" function _(t,o,a,e,n){e();const r=t(1),f=r.__importDefault(t(81)),u=r.__importDefault(t(87));var i=[f.default,u.default],c={},d=[];function s(t,o){var a=d.length;return t.names?(d[a]=t,t.names.forEach((function(t){c[t.toLowerCase()]=a})),this):(console.log(o),!0)}function l(t){if(!t)return!1;var o=t.toLowerCase();return void 0!==c[o]&&d[c[o]]?d[c[o]]:void 0}function v(){i.forEach(s)}a.add=s,a.get=l,a.start=v,a.default={start:v,add:s,get:l}},\n", | |
" function _(t,i,s,h,a){h();const e=t(1),r=e.__importDefault(t(82)),n=e.__importDefault(t(83)),l=e.__importDefault(t(85)),u=e.__importDefault(t(86)),o=t(72);function f(){var t=this.b/this.a;this.es=1-t*t,\"x0\"in this||(this.x0=0),\"y0\"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=r.default(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)}function _(t){var i,s,h=t.x,a=t.y;if(a*o.R2D>90&&a*o.R2D<-90&&h*o.R2D>180&&h*o.R2D<-180)return null;if(Math.abs(Math.abs(a)-o.HALF_PI)<=o.EPSLN)return null;if(this.sphere)i=this.x0+this.a*this.k0*n.default(h-this.long0),s=this.y0+this.a*this.k0*Math.log(Math.tan(o.FORTPI+.5*a));else{var e=Math.sin(a),r=l.default(this.e,a,e);i=this.x0+this.a*this.k0*n.default(h-this.long0),s=this.y0-this.a*this.k0*Math.log(r)}return t.x=i,t.y=s,t}function M(t){var i,s,h=t.x-this.x0,a=t.y-this.y0;if(this.sphere)s=o.HALF_PI-2*Math.atan(Math.exp(-a/(this.a*this.k0)));else{var e=Math.exp(-a/(this.a*this.k0));if(-9999===(s=u.default(this.e,e)))return null}return i=n.default(this.long0+h/(this.a*this.k0)),t.x=i,t.y=s,t}s.init=f,s.forward=_,s.inverse=M,s.names=[\"Mercator\",\"Popular Visualisation Pseudo Mercator\",\"Mercator_1SP\",\"Mercator_Auxiliary_Sphere\",\"merc\"],s.default={init:f,forward:_,inverse:M,names:s.names}},\n", | |
" function _(t,n,r,u,a){u(),r.default=function(t,n,r){var u=t*n;return r/Math.sqrt(1-u*u)}},\n", | |
" function _(t,n,u,a,f){a();const e=t(1),o=t(72),_=e.__importDefault(t(84));u.default=function(t){return Math.abs(t)<=o.SPI?t:t-_.default(t)*o.TWO_PI}},\n", | |
" function _(n,t,u,f,c){f(),u.default=function(n){return n<0?-1:1}},\n", | |
" function _(t,n,a,o,u){o();const c=t(72);a.default=function(t,n,a){var o=t*a,u=.5*t;return o=Math.pow((1-o)/(1+o),u),Math.tan(.5*(c.HALF_PI-n))/o}},\n", | |
" function _(t,a,n,r,f){r();const h=t(72);n.default=function(t,a){for(var n,r,f=.5*t,o=h.HALF_PI-2*Math.atan(a),u=0;u<=15;u++)if(n=t*Math.sin(o),o+=r=h.HALF_PI-2*Math.atan(a*Math.pow((1-n)/(1+n),f))-o,Math.abs(r)<=1e-10)return o;return-9999}},\n", | |
" function _(n,i,e,t,r){function a(){}function f(n){return n}t(),e.init=a,e.forward=f,e.inverse=f,e.names=[\"longlat\",\"identity\"],e.default={init:a,forward:f,inverse:f,names:e.names}},\n", | |
" function _(t,r,e,a,n){a();const f=t(1),i=t(72),u=f.__importStar(t(89)),c=f.__importDefault(t(75));e.eccentricity=function(t,r,e,a){var n=t*t,f=r*r,u=(n-f)/n,c=0;return a?(n=(t*=1-u*(i.SIXTH+u*(i.RA4+u*i.RA6)))*t,u=0):c=Math.sqrt(u),{es:u,e:c,ep2:(n-f)/f}},e.sphere=function(t,r,e,a,n){if(!t){var f=c.default(u.default,a);f||(f=u.WGS84),t=f.a,r=f.b,e=f.rf}return e&&!r&&(r=(1-1/e)*t),(0===e||Math.abs(t-r)<i.EPSLN)&&(n=!0,r=t),{a:t,b:r,rf:e,sphere:n}}},\n", | |
" function _(e,a,l,s,r){s();var i={};l.default=i,i.MERIT={a:6378137,rf:298.257,ellipseName:\"MERIT 1983\"},i.SGS85={a:6378136,rf:298.257,ellipseName:\"Soviet Geodetic System 85\"},i.GRS80={a:6378137,rf:298.257222101,ellipseName:\"GRS 1980(IUGG, 1980)\"},i.IAU76={a:6378140,rf:298.257,ellipseName:\"IAU 1976\"},i.airy={a:6377563.396,b:6356256.91,ellipseName:\"Airy 1830\"},i.APL4={a:6378137,rf:298.25,ellipseName:\"Appl. Physics. 1965\"},i.NWL9D={a:6378145,rf:298.25,ellipseName:\"Naval Weapons Lab., 1965\"},i.mod_airy={a:6377340.189,b:6356034.446,ellipseName:\"Modified Airy\"},i.andrae={a:6377104.43,rf:300,ellipseName:\"Andrae 1876 (Den., Iclnd.)\"},i.aust_SA={a:6378160,rf:298.25,ellipseName:\"Australian Natl & S. Amer. 1969\"},i.GRS67={a:6378160,rf:298.247167427,ellipseName:\"GRS 67(IUGG 1967)\"},i.bessel={a:6377397.155,rf:299.1528128,ellipseName:\"Bessel 1841\"},i.bess_nam={a:6377483.865,rf:299.1528128,ellipseName:\"Bessel 1841 (Namibia)\"},i.clrk66={a:6378206.4,b:6356583.8,ellipseName:\"Clarke 1866\"},i.clrk80={a:6378249.145,rf:293.4663,ellipseName:\"Clarke 1880 mod.\"},i.clrk58={a:6378293.645208759,rf:294.2606763692654,ellipseName:\"Clarke 1858\"},i.CPM={a:6375738.7,rf:334.29,ellipseName:\"Comm. des Poids et Mesures 1799\"},i.delmbr={a:6376428,rf:311.5,ellipseName:\"Delambre 1810 (Belgium)\"},i.engelis={a:6378136.05,rf:298.2566,ellipseName:\"Engelis 1985\"},i.evrst30={a:6377276.345,rf:300.8017,ellipseName:\"Everest 1830\"},i.evrst48={a:6377304.063,rf:300.8017,ellipseName:\"Everest 1948\"},i.evrst56={a:6377301.243,rf:300.8017,ellipseName:\"Everest 1956\"},i.evrst69={a:6377295.664,rf:300.8017,ellipseName:\"Everest 1969\"},i.evrstSS={a:6377298.556,rf:300.8017,ellipseName:\"Everest (Sabah & Sarawak)\"},i.fschr60={a:6378166,rf:298.3,ellipseName:\"Fischer (Mercury Datum) 1960\"},i.fschr60m={a:6378155,rf:298.3,ellipseName:\"Fischer 1960\"},i.fschr68={a:6378150,rf:298.3,ellipseName:\"Fischer 1968\"},i.helmert={a:6378200,rf:298.3,ellipseName:\"Helmert 1906\"},i.hough={a:6378270,rf:297,ellipseName:\"Hough\"},i.intl={a:6378388,rf:297,ellipseName:\"International 1909 (Hayford)\"},i.kaula={a:6378163,rf:298.24,ellipseName:\"Kaula 1961\"},i.lerch={a:6378139,rf:298.257,ellipseName:\"Lerch 1979\"},i.mprts={a:6397300,rf:191,ellipseName:\"Maupertius 1738\"},i.new_intl={a:6378157.5,b:6356772.2,ellipseName:\"New International 1967\"},i.plessis={a:6376523,rf:6355863,ellipseName:\"Plessis 1817 (France)\"},i.krass={a:6378245,rf:298.3,ellipseName:\"Krassovsky, 1942\"},i.SEasia={a:6378155,b:6356773.3205,ellipseName:\"Southeast Asia\"},i.walbeck={a:6376896,b:6355834.8467,ellipseName:\"Walbeck\"},i.WGS60={a:6378165,rf:298.3,ellipseName:\"WGS 60\"},i.WGS66={a:6378145,rf:298.25,ellipseName:\"WGS 66\"},i.WGS7={a:6378135,rf:298.26,ellipseName:\"WGS 72\"},l.WGS84=i.WGS84={a:6378137,rf:298.257223563,ellipseName:\"WGS 84\"},i.sphere={a:6370997,b:6370997,ellipseName:\"Normal Sphere (r=6370997)\"}},\n", | |
" function _(e,a,s,t,l){t();var m={};s.default=m,m.wgs84={towgs84:\"0,0,0\",ellipse:\"WGS84\",datumName:\"WGS84\"},m.ch1903={towgs84:\"674.374,15.056,405.346\",ellipse:\"bessel\",datumName:\"swiss\"},m.ggrs87={towgs84:\"-199.87,74.79,246.62\",ellipse:\"GRS80\",datumName:\"Greek_Geodetic_Reference_System_1987\"},m.nad83={towgs84:\"0,0,0\",ellipse:\"GRS80\",datumName:\"North_American_Datum_1983\"},m.nad27={nadgrids:\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",ellipse:\"clrk66\",datumName:\"North_American_Datum_1927\"},m.potsdam={towgs84:\"606.0,23.0,413.0\",ellipse:\"bessel\",datumName:\"Potsdam Rauenberg 1950 DHDN\"},m.carthage={towgs84:\"-263.0,6.0,431.0\",ellipse:\"clark80\",datumName:\"Carthage 1934 Tunisia\"},m.hermannskogel={towgs84:\"653.0,-212.0,449.0\",ellipse:\"bessel\",datumName:\"Hermannskogel\"},m.osni52={towgs84:\"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",ellipse:\"airy\",datumName:\"Irish National\"},m.ire65={towgs84:\"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",ellipse:\"mod_airy\",datumName:\"Ireland 1965\"},m.rassadiran={towgs84:\"-133.63,-157.5,-158.62\",ellipse:\"intl\",datumName:\"Rassadiran\"},m.nzgd49={towgs84:\"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",ellipse:\"intl\",datumName:\"New Zealand Geodetic Datum 1949\"},m.osgb36={towgs84:\"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",ellipse:\"airy\",datumName:\"Airy 1830\"},m.s_jtsk={towgs84:\"589,76,480\",ellipse:\"bessel\",datumName:\"S-JTSK (Ferro)\"},m.beduaram={towgs84:\"-106,-87,188\",ellipse:\"clrk80\",datumName:\"Beduaram\"},m.gunung_segara={towgs84:\"-403,684,41\",ellipse:\"bessel\",datumName:\"Gunung Segara Jakarta\"},m.rnb72={towgs84:\"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",ellipse:\"intl\",datumName:\"Reseau National Belge 1972\"}},\n", | |
" function _(a,m,_,t,u){t();const p=a(72);_.default=function(a,m,_,t,u,d){var r={};return r.datum_type=void 0===a||\"none\"===a?p.PJD_NODATUM:p.PJD_WGS84,m&&(r.datum_params=m.map(parseFloat),0===r.datum_params[0]&&0===r.datum_params[1]&&0===r.datum_params[2]||(r.datum_type=p.PJD_3PARAM),r.datum_params.length>3&&(0===r.datum_params[3]&&0===r.datum_params[4]&&0===r.datum_params[5]&&0===r.datum_params[6]||(r.datum_type=p.PJD_7PARAM,r.datum_params[3]*=p.SEC_TO_RAD,r.datum_params[4]*=p.SEC_TO_RAD,r.datum_params[5]*=p.SEC_TO_RAD,r.datum_params[6]=r.datum_params[6]/1e6+1))),r.a=_,r.b=t,r.es=u,r.ep2=d,r}},\n", | |
" function _(t,e,a,r,u){r();const m=t(1),_=t(72),o=m.__importDefault(t(93)),d=m.__importDefault(t(95)),f=m.__importDefault(t(67)),n=m.__importDefault(t(96)),i=m.__importDefault(t(97));a.default=function t(e,a,r){var u;if(Array.isArray(r)&&(r=n.default(r)),i.default(r),e.datum&&a.datum&&function(t,e){return(t.datum.datum_type===_.PJD_3PARAM||t.datum.datum_type===_.PJD_7PARAM)&&\"WGS84\"!==e.datumCode||(e.datum.datum_type===_.PJD_3PARAM||e.datum.datum_type===_.PJD_7PARAM)&&\"WGS84\"!==t.datumCode}(e,a)&&(r=t(e,u=new f.default(\"WGS84\"),r),e=u),\"enu\"!==e.axis&&(r=d.default(e,!1,r)),\"longlat\"===e.projName)r={x:r.x*_.D2R,y:r.y*_.D2R,z:r.z||0};else if(e.to_meter&&(r={x:r.x*e.to_meter,y:r.y*e.to_meter,z:r.z||0}),!(r=e.inverse(r)))return;return e.from_greenwich&&(r.x+=e.from_greenwich),r=o.default(e.datum,a.datum,r),a.from_greenwich&&(r={x:r.x-a.from_greenwich,y:r.y,z:r.z||0}),\"longlat\"===a.projName?r={x:r.x*_.R2D,y:r.y*_.R2D,z:r.z||0}:(r=a.forward(r),a.to_meter&&(r={x:r.x/a.to_meter,y:r.y/a.to_meter,z:r.z||0})),\"enu\"!==a.axis?d.default(a,!0,r):r}},\n", | |
" function _(t,e,a,u,c){u();const m=t(72),o=t(94);function _(t){return t===m.PJD_3PARAM||t===m.PJD_7PARAM}a.default=function(t,e,a){return o.compareDatums(t,e)||t.datum_type===m.PJD_NODATUM||e.datum_type===m.PJD_NODATUM?a:t.es!==e.es||t.a!==e.a||_(t.datum_type)||_(e.datum_type)?(a=o.geodeticToGeocentric(a,t.es,t.a),_(t.datum_type)&&(a=o.geocentricToWgs84(a,t.datum_type,t.datum_params)),_(e.datum_type)&&(a=o.geocentricFromWgs84(a,e.datum_type,e.datum_params)),o.geocentricToGeodetic(a,e.es,e.a,e.b)):a}},\n", | |
" function _(a,t,r,m,s){m();const u=a(72);r.compareDatums=function(a,t){return a.datum_type===t.datum_type&&(!(a.a!==t.a||Math.abs(a.es-t.es)>5e-11)&&(a.datum_type===u.PJD_3PARAM?a.datum_params[0]===t.datum_params[0]&&a.datum_params[1]===t.datum_params[1]&&a.datum_params[2]===t.datum_params[2]:a.datum_type!==u.PJD_7PARAM||a.datum_params[0]===t.datum_params[0]&&a.datum_params[1]===t.datum_params[1]&&a.datum_params[2]===t.datum_params[2]&&a.datum_params[3]===t.datum_params[3]&&a.datum_params[4]===t.datum_params[4]&&a.datum_params[5]===t.datum_params[5]&&a.datum_params[6]===t.datum_params[6]))},r.geodeticToGeocentric=function(a,t,r){var m,s,_,e,n=a.x,d=a.y,i=a.z?a.z:0;if(d<-u.HALF_PI&&d>-1.001*u.HALF_PI)d=-u.HALF_PI;else if(d>u.HALF_PI&&d<1.001*u.HALF_PI)d=u.HALF_PI;else{if(d<-u.HALF_PI)return{x:-1/0,y:-1/0,z:a.z};if(d>u.HALF_PI)return{x:1/0,y:1/0,z:a.z}}return n>Math.PI&&(n-=2*Math.PI),s=Math.sin(d),e=Math.cos(d),_=s*s,{x:((m=r/Math.sqrt(1-t*_))+i)*e*Math.cos(n),y:(m+i)*e*Math.sin(n),z:(m*(1-t)+i)*s}},r.geocentricToGeodetic=function(a,t,r,m){var s,_,e,n,d,i,p,P,y,z,M,o,A,c,x,h=1e-12,f=a.x,I=a.y,F=a.z?a.z:0;if(s=Math.sqrt(f*f+I*I),_=Math.sqrt(f*f+I*I+F*F),s/r<h){if(c=0,_/r<h)return u.HALF_PI,x=-m,{x:a.x,y:a.y,z:a.z}}else c=Math.atan2(I,f);e=F/_,P=(n=s/_)*(1-t)*(d=1/Math.sqrt(1-t*(2-t)*n*n)),y=e*d,A=0;do{A++,i=t*(p=r/Math.sqrt(1-t*y*y))/(p+(x=s*P+F*y-p*(1-t*y*y))),o=(M=e*(d=1/Math.sqrt(1-i*(2-i)*n*n)))*P-(z=n*(1-i)*d)*y,P=z,y=M}while(o*o>1e-24&&A<30);return{x:c,y:Math.atan(M/Math.abs(z)),z:x}},r.geocentricToWgs84=function(a,t,r){if(t===u.PJD_3PARAM)return{x:a.x+r[0],y:a.y+r[1],z:a.z+r[2]};if(t===u.PJD_7PARAM){var m=r[0],s=r[1],_=r[2],e=r[3],n=r[4],d=r[5],i=r[6];return{x:i*(a.x-d*a.y+n*a.z)+m,y:i*(d*a.x+a.y-e*a.z)+s,z:i*(-n*a.x+e*a.y+a.z)+_}}},r.geocentricFromWgs84=function(a,t,r){if(t===u.PJD_3PARAM)return{x:a.x-r[0],y:a.y-r[1],z:a.z-r[2]};if(t===u.PJD_7PARAM){var m=r[0],s=r[1],_=r[2],e=r[3],n=r[4],d=r[5],i=r[6],p=(a.x-m)/i,P=(a.y-s)/i,y=(a.z-_)/i;return{x:p+d*P-n*y,y:-d*p+P+e*y,z:n*p-e*P+y}}}},\n", | |
" function _(e,a,i,r,s){r(),i.default=function(e,a,i){var r,s,n,c=i.x,d=i.y,f=i.z||0,u={};for(n=0;n<3;n++)if(!a||2!==n||void 0!==i.z)switch(0===n?(r=c,s=-1!==\"ew\".indexOf(e.axis[n])?\"x\":\"y\"):1===n?(r=d,s=-1!==\"ns\".indexOf(e.axis[n])?\"y\":\"x\"):(r=f,s=\"z\"),e.axis[n]){case\"e\":u[s]=r;break;case\"w\":u[s]=-r;break;case\"n\":u[s]=r;break;case\"s\":u[s]=-r;break;case\"u\":void 0!==i[s]&&(u.z=r);break;case\"d\":void 0!==i[s]&&(u.z=-r);break;default:return null}return u}},\n", | |
" function _(n,t,e,u,f){u(),e.default=function(n){var t={x:n[0],y:n[1]};return n.length>2&&(t.z=n[2]),n.length>3&&(t.m=n[3]),t}},\n", | |
" function _(e,i,n,t,r){function o(e){if(\"function\"==typeof Number.isFinite){if(Number.isFinite(e))return;throw new TypeError(\"coordinates must be finite numbers\")}if(\"number\"!=typeof e||e!=e||!isFinite(e))throw new TypeError(\"coordinates must be finite numbers\")}t(),n.default=function(e){o(e.x),o(e.y)}},\n", | |
" function _(e,t,s,i,n){i();const r=e(1),a=r.__importStar(e(18)),o=r.__importStar(e(99)),_=r.__importStar(e(45)),l=e(42),c=e(53),h=e(19),d=e(24),u=e(8),f=e(100),p=e(12),g=e(26),y=e(101),x=e(104),v=e(59),{abs:b,ceil:m}=Math;class w extends l.View{constructor(){super(...arguments),this._index=null,this._data_size=null,this._nohit_warned=new Set}get renderer(){return this.parent}get has_webgl(){return null!=this.glglyph}get index(){const{_index:e}=this;if(null!=e)return e;throw new Error(`${this}.index_data() wasn't called`)}get data_size(){const{_data_size:e}=this;if(null!=e)return e;throw new Error(`${this}.set_data() wasn't called`)}initialize(){super.initialize(),this.visuals=new _.Visuals(this)}request_render(){this.parent.request_render()}get canvas(){return this.renderer.parent.canvas_view}render(e,t,s){var i;null!=this.glglyph&&(this.renderer.needs_webgl_blit=this.glglyph.render(e,t,null!==(i=this.base)&&void 0!==i?i:this),this.renderer.needs_webgl_blit)||(e.beginPath(),this._render(e,t,null!=s?s:this.base))}has_finished(){return!0}notify_finished(){this.renderer.notify_finished()}_bounds(e){return e}bounds(){return this._bounds(this.index.bbox)}log_bounds(){const{x0:e,x1:t}=this.index.bounds(o.positive_x()),{y0:s,y1:i}=this.index.bounds(o.positive_y());return this._bounds({x0:e,y0:s,x1:t,y1:i})}get_anchor_point(e,t,[s,i]){switch(e){case\"center\":case\"center_center\":{const[e,n]=this.scenterxy(t,s,i);return{x:e,y:n}}default:return null}}scenterx(e,t,s){return this.scenterxy(e,t,s)[0]}scentery(e,t,s){return this.scenterxy(e,t,s)[1]}sdist(e,t,s,i=\"edge\",n=!1){const r=t.length,a=new d.ScreenArray(r),o=e.s_compute;if(\"center\"==i)for(let e=0;e<r;e++){const i=t[e],n=s.get(e)/2,r=o(i-n),_=o(i+n);a[e]=b(_-r)}else for(let e=0;e<r;e++){const i=t[e],n=o(i),r=o(i+s.get(e));a[e]=b(r-n)}return n&&p.inplace_map(a,(e=>m(e))),a}draw_legend_for_index(e,t,s){}hit_test(e){switch(e.type){case\"point\":if(null!=this._hit_point)return this._hit_point(e);break;case\"span\":if(null!=this._hit_span)return this._hit_span(e);break;case\"rect\":if(null!=this._hit_rect)return this._hit_rect(e);break;case\"poly\":if(null!=this._hit_poly)return this._hit_poly(e)}return this._nohit_warned.has(e.type)||(h.logger.debug(`'${e.type}' selection not available for ${this.model.type}`),this._nohit_warned.add(e.type)),null}_hit_rect_against_index(e){const{sx0:t,sx1:s,sy0:i,sy1:n}=e,[r,a]=this.renderer.coordinates.x_scale.r_invert(t,s),[o,_]=this.renderer.coordinates.y_scale.r_invert(i,n),l=[...this.index.indices({x0:r,x1:a,y0:o,y1:_})];return new v.Selection({indices:l})}_project_data(){}*_iter_visuals(){for(const e of this.visuals)for(const t of e)(t instanceof a.VectorSpec||t instanceof a.ScalarSpec)&&(yield t)}set_base(e){e!=this&&e instanceof this.constructor&&(this.base=e)}_configure(e,t){Object.defineProperty(this,u.isString(e)?e:e.attr,Object.assign({configurable:!0,enumerable:!0},t))}set_visuals(e,t){var s;for(const s of this._iter_visuals()){const{base:i}=this;if(null!=i){const e=i.model.properties[s.attr];if(null!=e&&g.is_equal(s.get_value(),e.get_value())){this._configure(s,{get:()=>i[`${s.attr}`]});continue}}const n=s.uniform(e).select(t);this._configure(s,{value:n})}for(const e of this.visuals)e.update();null===(s=this.glglyph)||void 0===s||s.set_visuals_changed()}set_data(e,t,s){var i;const{x_range:n,y_range:r}=this.renderer.coordinates,o=new Set(this._iter_visuals());this._data_size=t.count;for(const s of this.model)if((s instanceof a.VectorSpec||s instanceof a.ScalarSpec)&&!o.has(s))if(s instanceof a.BaseCoordinateSpec){const i=s.array(e);let o=t.select(i);const _=\"x\"==s.dimension?n:r;if(_ instanceof x.FactorRange)if(s instanceof a.CoordinateSpec)o=_.v_synthetic(o);else if(s instanceof a.CoordinateSeqSpec)for(let e=0;e<o.length;e++)o[e]=_.v_synthetic(o[e]);let l;l=s instanceof a.CoordinateSeqSpec?f.RaggedArray.from(o,Float64Array):o,this._configure(`_${s.attr}`,{value:l})}else{const i=s.uniform(e).select(t);if(this._configure(s,{value:i}),s instanceof a.DistanceSpec){const e=i.is_Scalar()?i.value:p.max(i.array);this._configure(`max_${s.attr}`,{value:e})}}this.renderer.plot_view.model.use_map&&this._project_data(),this._set_data(null!=s?s:null),null===(i=this.glglyph)||void 0===i||i.set_data_changed(),this.index_data()}_set_data(e){}get _index_size(){return this.data_size}index_data(){const e=new y.SpatialIndex(this._index_size);this._index_data(e),e.finish(),this._index=e}mask_data(){return null==this._mask_data?d.Indices.all_set(this.data_size):this._mask_data()}map_data(){var e;const t=this,{x_scale:s,y_scale:i}=this.renderer.coordinates;for(const e of this.model)if(e instanceof a.BaseCoordinateSpec){const n=\"x\"==e.dimension?s:i;let r=t[`_${e.attr}`];if(r instanceof f.RaggedArray){const e=n.v_compute(r.array);r=new f.RaggedArray(r.offsets,e)}else r=n.v_compute(r);this[`s${e.attr}`]=r}this._map_data(),null===(e=this.glglyph)||void 0===e||e.set_data_changed()}_map_data(){}}s.GlyphView=w,w.__name__=\"GlyphView\";class S extends c.Model{constructor(e){super(e)}}s.Glyph=S,S.__name__=\"Glyph\"},\n", | |
" function _(t,i,e,h,s){h();const r=t(24),n=t(26),{min:x,max:y}=Math;e.empty=function(){return{x0:1/0,y0:1/0,x1:-1/0,y1:-1/0}},e.positive_x=function(){return{x0:Number.MIN_VALUE,y0:-1/0,x1:1/0,y1:1/0}},e.positive_y=function(){return{x0:-1/0,y0:Number.MIN_VALUE,x1:1/0,y1:1/0}},e.union=function(t,i){return{x0:x(t.x0,i.x0),x1:y(t.x1,i.x1),y0:x(t.y0,i.y0),y1:y(t.y1,i.y1)}};class o{constructor(t){if(null==t)this.x0=0,this.y0=0,this.x1=0,this.y1=0;else if(\"x0\"in t){const{x0:i,y0:e,x1:h,y1:s}=t;if(!(i<=h&&e<=s))throw new Error(`invalid bbox {x0: ${i}, y0: ${e}, x1: ${h}, y1: ${s}}`);this.x0=i,this.y0=e,this.x1=h,this.y1=s}else if(\"x\"in t){const{x:i,y:e,width:h,height:s}=t;if(!(h>=0&&s>=0))throw new Error(`invalid bbox {x: ${i}, y: ${e}, width: ${h}, height: ${s}}`);this.x0=i,this.y0=e,this.x1=i+h,this.y1=e+s}else{let i,e,h,s;if(\"width\"in t)if(\"left\"in t)i=t.left,e=i+t.width;else if(\"right\"in t)e=t.right,i=e-t.width;else{const h=t.width/2;i=t.hcenter-h,e=t.hcenter+h}else i=t.left,e=t.right;if(\"height\"in t)if(\"top\"in t)h=t.top,s=h+t.height;else if(\"bottom\"in t)s=t.bottom,h=s-t.height;else{const i=t.height/2;h=t.vcenter-i,s=t.vcenter+i}else h=t.top,s=t.bottom;if(!(i<=e&&h<=s))throw new Error(`invalid bbox {left: ${i}, top: ${h}, right: ${e}, bottom: ${s}}`);this.x0=i,this.y0=h,this.x1=e,this.y1=s}}equals(t){return this.x0==t.x0&&this.y0==t.y0&&this.x1==t.x1&&this.y1==t.y1}[n.equals](t,i){return i.eq(this.x0,t.x0)&&i.eq(this.y0,t.y0)&&i.eq(this.x1,t.x1)&&i.eq(this.y1,t.y1)}toString(){return`BBox({left: ${this.left}, top: ${this.top}, width: ${this.width}, height: ${this.height}})`}get left(){return this.x0}get top(){return this.y0}get right(){return this.x1}get bottom(){return this.y1}get p0(){return[this.x0,this.y0]}get p1(){return[this.x1,this.y1]}get x(){return this.x0}get y(){return this.y0}get width(){return this.x1-this.x0}get height(){return this.y1-this.y0}get size(){return{width:this.width,height:this.height}}get rect(){const{x0:t,y0:i,x1:e,y1:h}=this;return{p0:{x:t,y:i},p1:{x:e,y:i},p2:{x:e,y:h},p3:{x:t,y:h}}}get box(){const{x:t,y:i,width:e,height:h}=this;return{x:t,y:i,width:e,height:h}}get h_range(){return{start:this.x0,end:this.x1}}get v_range(){return{start:this.y0,end:this.y1}}get ranges(){return[this.h_range,this.v_range]}get aspect(){return this.width/this.height}get hcenter(){return(this.left+this.right)/2}get vcenter(){return(this.top+this.bottom)/2}get area(){return this.width*this.height}relative(){const{width:t,height:i}=this;return new o({x:0,y:0,width:t,height:i})}translate(t,i){const{x:e,y:h,width:s,height:r}=this;return new o({x:t+e,y:i+h,width:s,height:r})}relativize(t,i){return[t-this.x,i-this.y]}contains(t,i){return this.x0<=t&&t<=this.x1&&this.y0<=i&&i<=this.y1}clip(t,i){return t<this.x0?t=this.x0:t>this.x1&&(t=this.x1),i<this.y0?i=this.y0:i>this.y1&&(i=this.y1),[t,i]}grow_by(t){return new o({left:this.left-t,right:this.right+t,top:this.top-t,bottom:this.bottom+t})}shrink_by(t){return new o({left:this.left+t,right:this.right-t,top:this.top+t,bottom:this.bottom-t})}union(t){return new o({x0:x(this.x0,t.x0),y0:x(this.y0,t.y0),x1:y(this.x1,t.x1),y1:y(this.y1,t.y1)})}intersection(t){return this.intersects(t)?new o({x0:y(this.x0,t.x0),y0:y(this.y0,t.y0),x1:x(this.x1,t.x1),y1:x(this.y1,t.y1)}):null}intersects(t){return!(t.x1<this.x0||t.x0>this.x1||t.y1<this.y0||t.y0>this.y1)}get xview(){return{compute:t=>this.left+t,v_compute:t=>{const i=new r.ScreenArray(t.length),e=this.left;for(let h=0;h<t.length;h++)i[h]=e+t[h];return i}}}get yview(){return{compute:t=>this.bottom-t,v_compute:t=>{const i=new r.ScreenArray(t.length),e=this.bottom;for(let h=0;h<t.length;h++)i[h]=e-t[h];return i}}}}e.BBox=o,o.__name__=\"BBox\"},\n", | |
" function _(t,s,r,e,n){e();const a=t(26),o=t(11);class h{constructor(t,s){this.offsets=t,this.array=s}[a.equals](t,s){return s.arrays(this.offsets,t.offsets)&&s.arrays(this.array,t.array)}get length(){return this.offsets.length}clone(){return new h(this.offsets.slice(),this.array.slice())}static from(t,s){const r=t.length;let e=0;const n=(()=>{const s=new Uint32Array(r);for(let n=0;n<r;n++){const r=t[n].length;s[n]=e,e+=r}return e<256?new Uint8Array(s):e<65536?new Uint16Array(s):s})(),a=new s(e);for(let s=0;s<r;s++)a.set(t[s],n[s]);return new h(n,a)}*[Symbol.iterator](){const{offsets:t,length:s}=this;for(let r=0;r<s;r++)yield this.array.subarray(t[r],t[r+1])}_check_bounds(t){o.assert(0<=t&&t<this.length,`Out of bounds: 0 <= ${t} < ${this.length}`)}get(t){this._check_bounds(t);const{offsets:s}=this;return this.array.subarray(s[t],s[t+1])}set(t,s){this._check_bounds(t),this.array.set(s,this.offsets[t])}}r.RaggedArray=h,h.__name__=\"RaggedArray\",h[Symbol.toStringTag]=\"RaggedArray\"},\n", | |
" function _(n,i,t,e,s){e();const o=n(1).__importDefault(n(102)),d=n(24),x=n(99);function h(n,i){let t=0,e=i.length-1;for(;t<e;){const s=t+e>>1;i[s]>n?e=s:t=s+1}return i[t]}class r extends o.default{search_indices(n,i,t,e){if(this._pos!==this._boxes.length)throw new Error(\"Data not yet indexed - call index.finish().\");let s=this._boxes.length-4;const o=[],x=new d.Indices(this.numItems);for(;void 0!==s;){const d=Math.min(s+4*this.nodeSize,h(s,this._levelBounds));for(let h=s;h<d;h+=4){const d=0|this._indices[h>>2];t<this._boxes[h+0]||(e<this._boxes[h+1]||n>this._boxes[h+2]||i>this._boxes[h+3]||(s<4*this.numItems?x.set(d):o.push(d)))}s=o.pop()}return x}}r.__name__=\"_FlatBush\";class l{constructor(n){this.index=null,n>0&&(this.index=new r(n))}add(n,i,t,e){var s;null===(s=this.index)||void 0===s||s.add(n,i,t,e)}add_empty(){var n;null===(n=this.index)||void 0===n||n.add(1/0,1/0,-1/0,-1/0)}finish(){var n;null===(n=this.index)||void 0===n||n.finish()}_normalize(n){let{x0:i,y0:t,x1:e,y1:s}=n;return i>e&&([i,e]=[e,i]),t>s&&([t,s]=[s,t]),{x0:i,y0:t,x1:e,y1:s}}get bbox(){if(null==this.index)return x.empty();{const{minX:n,minY:i,maxX:t,maxY:e}=this.index;return{x0:n,y0:i,x1:t,y1:e}}}indices(n){if(null==this.index)return new d.Indices(0);{const{x0:i,y0:t,x1:e,y1:s}=this._normalize(n);return this.index.search_indices(i,t,e,s)}}bounds(n){const i=x.empty();for(const t of this.indices(n)){const n=this.index._boxes,e=n[4*t+0],s=n[4*t+1],o=n[4*t+2],d=n[4*t+3];o<i.x0&&(i.x0=o),e>i.x1&&(i.x1=e),d<i.y0&&(i.y0=d),s>i.y1&&(i.y1=s)}return i}}t.SpatialIndex=l,l.__name__=\"SpatialIndex\"},\n", | |
" function _(t,s,i,e,h){e();const n=t(1).__importDefault(t(103)),o=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class r{static from(t){if(!(t instanceof ArrayBuffer))throw new Error(\"Data must be an instance of ArrayBuffer.\");const[s,i]=new Uint8Array(t,0,2);if(251!==s)throw new Error(\"Data does not appear to be in a Flatbush format.\");if(i>>4!=3)throw new Error(`Got v${i>>4} data when expected v3.`);const[e]=new Uint16Array(t,2,1),[h]=new Uint32Array(t,4,1);return new r(h,e,o[15&i],t)}constructor(t,s=16,i=Float64Array,e){if(void 0===t)throw new Error(\"Missing required argument: numItems.\");if(isNaN(t)||t<=0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+s,2),65535);let h=t,r=h;this._levelBounds=[4*h];do{h=Math.ceil(h/this.nodeSize),r+=h,this._levelBounds.push(4*r)}while(1!==h);this.ArrayType=i||Float64Array,this.IndexArrayType=r<16384?Uint16Array:Uint32Array;const a=o.indexOf(this.ArrayType),_=4*r*this.ArrayType.BYTES_PER_ELEMENT;if(a<0)throw new Error(`Unexpected typed array class: ${i}.`);e&&e instanceof ArrayBuffer?(this.data=e,this._boxes=new this.ArrayType(this.data,8,4*r),this._indices=new this.IndexArrayType(this.data,8+_,r),this._pos=4*r,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1]):(this.data=new ArrayBuffer(8+_+r*this.IndexArrayType.BYTES_PER_ELEMENT),this._boxes=new this.ArrayType(this.data,8,4*r),this._indices=new this.IndexArrayType(this.data,8+_,r),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(this.data,0,2).set([251,48+a]),new Uint16Array(this.data,2,1)[0]=s,new Uint32Array(this.data,4,1)[0]=t),this._queue=new n.default}add(t,s,i,e){const h=this._pos>>2;return this._indices[h]=h,this._boxes[this._pos++]=t,this._boxes[this._pos++]=s,this._boxes[this._pos++]=i,this._boxes[this._pos++]=e,t<this.minX&&(this.minX=t),s<this.minY&&(this.minY=s),i>this.maxX&&(this.maxX=i),e>this.maxY&&(this.maxY=e),h}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);if(this.numItems<=this.nodeSize)return this._boxes[this._pos++]=this.minX,this._boxes[this._pos++]=this.minY,this._boxes[this._pos++]=this.maxX,void(this._boxes[this._pos++]=this.maxY);const t=this.maxX-this.minX,s=this.maxY-this.minY,i=new Uint32Array(this.numItems);for(let e=0;e<this.numItems;e++){let h=4*e;const n=this._boxes[h++],o=this._boxes[h++],r=this._boxes[h++],a=this._boxes[h++],_=Math.floor(65535*((n+r)/2-this.minX)/t),x=Math.floor(65535*((o+a)/2-this.minY)/s);i[e]=m(_,x)}x(i,this._boxes,this._indices,0,this.numItems-1,this.nodeSize);for(let t=0,s=0;t<this._levelBounds.length-1;t++){const i=this._levelBounds[t];for(;s<i;){const t=s;let e=1/0,h=1/0,n=-1/0,o=-1/0;for(let t=0;t<this.nodeSize&&s<i;t++)e=Math.min(e,this._boxes[s++]),h=Math.min(h,this._boxes[s++]),n=Math.max(n,this._boxes[s++]),o=Math.max(o,this._boxes[s++]);this._indices[this._pos>>2]=t,this._boxes[this._pos++]=e,this._boxes[this._pos++]=h,this._boxes[this._pos++]=n,this._boxes[this._pos++]=o}}}search(t,s,i,e,h){if(this._pos!==this._boxes.length)throw new Error(\"Data not yet indexed - call index.finish().\");let n=this._boxes.length-4;const o=[],r=[];for(;void 0!==n;){const a=Math.min(n+4*this.nodeSize,_(n,this._levelBounds));for(let _=n;_<a;_+=4){const a=0|this._indices[_>>2];i<this._boxes[_]||(e<this._boxes[_+1]||t>this._boxes[_+2]||s>this._boxes[_+3]||(n<4*this.numItems?(void 0===h||h(a))&&r.push(a):o.push(a)))}n=o.pop()}return r}neighbors(t,s,i=1/0,e=1/0,h){if(this._pos!==this._boxes.length)throw new Error(\"Data not yet indexed - call index.finish().\");let n=this._boxes.length-4;const o=this._queue,r=[],x=e*e;for(;void 0!==n;){const e=Math.min(n+4*this.nodeSize,_(n,this._levelBounds));for(let i=n;i<e;i+=4){const e=0|this._indices[i>>2],r=a(t,this._boxes[i],this._boxes[i+2]),_=a(s,this._boxes[i+1],this._boxes[i+3]),x=r*r+_*_;n<4*this.numItems?(void 0===h||h(e))&&o.push(-e-1,x):o.push(e,x)}for(;o.length&&o.peek()<0;){if(o.peekValue()>x)return o.clear(),r;if(r.push(-o.pop()-1),r.length===i)return o.clear(),r}n=o.pop()}return o.clear(),r}}function a(t,s,i){return t<s?s-t:t<=i?0:t-i}function _(t,s){let i=0,e=s.length-1;for(;i<e;){const h=i+e>>1;s[h]>t?e=h:i=h+1}return s[i]}function x(t,s,i,e,h,n){if(Math.floor(e/n)>=Math.floor(h/n))return;const o=t[e+h>>1];let r=e-1,a=h+1;for(;;){do{r++}while(t[r]<o);do{a--}while(t[a]>o);if(r>=a)break;d(t,s,i,r,a)}x(t,s,i,e,a,n),x(t,s,i,a+1,h,n)}function d(t,s,i,e,h){const n=t[e];t[e]=t[h],t[h]=n;const o=4*e,r=4*h,a=s[o],_=s[o+1],x=s[o+2],d=s[o+3];s[o]=s[r],s[o+1]=s[r+1],s[o+2]=s[r+2],s[o+3]=s[r+3],s[r]=a,s[r+1]=_,s[r+2]=x,s[r+3]=d;const m=i[e];i[e]=i[h],i[h]=m}function m(t,s){let i=t^s,e=65535^i,h=65535^(t|s),n=t&(65535^s),o=i|e>>1,r=i>>1^i,a=h>>1^e&n>>1^h,_=i&h>>1^n>>1^n;i=o,e=r,h=a,n=_,o=i&i>>2^e&e>>2,r=i&e>>2^e&(i^e)>>2,a^=i&h>>2^e&n>>2,_^=e&h>>2^(i^e)&n>>2,i=o,e=r,h=a,n=_,o=i&i>>4^e&e>>4,r=i&e>>4^e&(i^e)>>4,a^=i&h>>4^e&n>>4,_^=e&h>>4^(i^e)&n>>4,i=o,e=r,h=a,n=_,a^=i&h>>8^e&n>>8,_^=e&h>>8^(i^e)&n>>8,i=a^a>>1,e=_^_>>1;let x=t^s,d=e|65535^(x|i);return x=16711935&(x|x<<8),x=252645135&(x|x<<4),x=858993459&(x|x<<2),x=1431655765&(x|x<<1),d=16711935&(d|d<<8),d=252645135&(d|d<<4),d=858993459&(d|d<<2),d=1431655765&(d|d<<1),(d<<1|x)>>>0}i.default=r},\n", | |
" function _(s,t,i,h,e){h();i.default=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(s,t){let i=this.length++;for(this.ids[i]=s,this.values[i]=t;i>0;){const s=i-1>>1,h=this.values[s];if(t>=h)break;this.ids[i]=this.ids[s],this.values[i]=h,i=s}this.ids[i]=s,this.values[i]=t}pop(){if(0===this.length)return;const s=this.ids[0];if(this.length--,this.length>0){const s=this.ids[0]=this.ids[this.length],t=this.values[0]=this.values[this.length],i=this.length>>1;let h=0;for(;h<i;){let s=1+(h<<1);const i=s+1;let e=this.ids[s],l=this.values[s];const n=this.values[i];if(i<this.length&&n<l&&(s=i,e=this.ids[i],l=n),l>=t)break;this.ids[h]=e,this.values[h]=l,h=s}this.ids[h]=s,this.values[h]=t}return s}peek(){if(0!==this.length)return this.ids[0]}peekValue(){if(0!==this.length)return this.values[0]}}},\n", | |
" function _(t,n,e,i,s){i();const r=t(105),a=t(20),o=t(21),g=t(24),p=t(9),c=t(8),l=t(11);function u(t,n,e=0){const i=new Map;for(let s=0;s<t.length;s++){const r=t[s];if(i.has(r))throw new Error(`duplicate factor or subfactor: ${r}`);i.set(r,{value:.5+s*(1+n)+e})}return[i,(t.length-1)*n]}function h(t,n,e,i=0){var s;const r=new Map,a=new Map;for(const[n,e]of t){const t=null!==(s=a.get(n))&&void 0!==s?s:[];a.set(n,[...t,e])}let o=i,g=0;for(const[t,i]of a){const s=i.length,[a,c]=u(i,e,o);g+=c;const l=p.sum(i.map((t=>a.get(t).value)));r.set(t,{value:l/s,mapping:a}),o+=s+n+c}return[r,(a.size-1)*n+g]}function d(t,n,e,i,s=0){var r;const a=new Map,o=new Map;for(const[n,e,i]of t){const t=null!==(r=o.get(n))&&void 0!==r?r:[];o.set(n,[...t,[e,i]])}let g=s,c=0;for(const[t,s]of o){const r=s.length,[o,l]=h(s,e,i,g);c+=l;const u=p.sum(s.map((([t])=>o.get(t).value)));a.set(t,{value:u/r,mapping:o}),g+=r+n+l}return[a,(o.size-1)*n+c]}e.Factor=o.Or(o.String,o.Tuple(o.String,o.String),o.Tuple(o.String,o.String,o.String)),e.FactorSeq=o.Or(o.Array(o.String),o.Array(o.Tuple(o.String,o.String)),o.Array(o.Tuple(o.String,o.String,o.String))),e.map_one_level=u,e.map_two_levels=h,e.map_three_levels=d;class _ extends r.Range{constructor(t){super(t)}static init_FactorRange(){this.define((({Number:t})=>({factors:[e.FactorSeq,[]],factor_padding:[t,0],subgroup_padding:[t,.8],group_padding:[t,1.4],range_padding:[t,0],range_padding_units:[a.PaddingUnits,\"percent\"],start:[t],end:[t]}))),this.internal((({Number:t,String:n,Array:e,Tuple:i,Nullable:s})=>({levels:[t],mids:[s(e(i(n,n))),null],tops:[s(e(n)),null]})))}get min(){return this.start}get max(){return this.end}initialize(){super.initialize(),this._init(!0)}connect_signals(){super.connect_signals(),this.connect(this.properties.factors.change,(()=>this.reset())),this.connect(this.properties.factor_padding.change,(()=>this.reset())),this.connect(this.properties.group_padding.change,(()=>this.reset())),this.connect(this.properties.subgroup_padding.change,(()=>this.reset())),this.connect(this.properties.range_padding.change,(()=>this.reset())),this.connect(this.properties.range_padding_units.change,(()=>this.reset()))}reset(){this._init(!1),this.change.emit()}_lookup(t){switch(t.length){case 1:{const[n]=t,e=this._mapping.get(n);return null!=e?e.value:NaN}case 2:{const[n,e]=t,i=this._mapping.get(n);if(null!=i){const t=i.mapping.get(e);if(null!=t)return t.value}return NaN}case 3:{const[n,e,i]=t,s=this._mapping.get(n);if(null!=s){const t=s.mapping.get(e);if(null!=t){const n=t.mapping.get(i);if(null!=n)return n.value}}return NaN}default:l.unreachable()}}synthetic(t){if(c.isNumber(t))return t;if(c.isString(t))return this._lookup([t]);let n=0;const e=t[t.length-1];return c.isNumber(e)&&(n=e,t=t.slice(0,-1)),this._lookup(t)+n}v_synthetic(t){const n=t.length,e=new g.ScreenArray(n);for(let i=0;i<n;i++)e[i]=this.synthetic(t[i]);return e}_init(t){const{levels:n,mapping:e,tops:i,mids:s,inside_padding:r}=(()=>{if(p.every(this.factors,c.isString)){const t=this.factors,[n,e]=u(t,this.factor_padding);return{levels:1,mapping:n,tops:null,mids:null,inside_padding:e}}if(p.every(this.factors,(t=>c.isArray(t)&&2==t.length&&c.isString(t[0])&&c.isString(t[1])))){const t=this.factors,[n,e]=h(t,this.group_padding,this.factor_padding),i=[...n.keys()];return{levels:2,mapping:n,tops:i,mids:null,inside_padding:e}}if(p.every(this.factors,(t=>c.isArray(t)&&3==t.length&&c.isString(t[0])&&c.isString(t[1])&&c.isString(t[2])))){const t=this.factors,[n,e]=d(t,this.group_padding,this.subgroup_padding,this.factor_padding),i=[...n.keys()],s=[];for(const[t,e]of n)for(const n of e.mapping.keys())s.push([t,n]);return{levels:3,mapping:n,tops:i,mids:s,inside_padding:e}}l.unreachable()})();this._mapping=e,this.tops=i,this.mids=s;let a=0,o=this.factors.length+r;if(\"percent\"==this.range_padding_units){const t=(o-a)*this.range_padding/2;a-=t,o+=t}else a-=this.range_padding,o+=this.range_padding;this.setv({start:a,end:o,levels:n},{silent:t}),\"auto\"==this.bounds&&this.setv({bounds:[a,o]},{silent:!0})}}e.FactorRange=_,_.__name__=\"FactorRange\",_.init_FactorRange()},\n", | |
" function _(e,t,i,n,s){n();const a=e(53);class l extends a.Model{constructor(e){super(e),this.have_updated_interactively=!1}static init_Range(){this.define((({Number:e,Tuple:t,Or:i,Auto:n,Nullable:s})=>({bounds:[s(i(t(s(e),s(e)),n)),null],min_interval:[s(e),null],max_interval:[s(e),null]}))),this.internal((({Array:e,AnyRef:t})=>({plots:[e(t()),[]]})))}get is_reversed(){return this.start>this.end}get is_valid(){return isFinite(this.min)&&isFinite(this.max)}}i.Range=l,l.__name__=\"Range\",l.init_Range()},\n", | |
" function _(e,t,i,n,l){n();const o=e(1).__importStar(e(107));function a(e,t,{x0:i,x1:n,y0:l,y1:o},a){t.save(),t.beginPath(),t.moveTo(i,(l+o)/2),t.lineTo(n,(l+o)/2),e.line.doit&&(e.line.set_vectorize(t,a),t.stroke()),t.restore()}function r(e,t,{x0:i,x1:n,y0:l,y1:o},a){var r,c;const s=.1*Math.abs(n-i),_=.1*Math.abs(o-l),v=i+s,d=n-s,h=l+_,g=o-_;t.beginPath(),t.rect(v,h,d-v,g-h),e.fill.doit&&(e.fill.set_vectorize(t,a),t.fill()),(null===(r=e.hatch)||void 0===r?void 0:r.doit)&&(e.hatch.set_vectorize(t,a),t.fill()),(null===(c=e.line)||void 0===c?void 0:c.doit)&&(e.line.set_vectorize(t,a),t.stroke())}i.generic_line_scalar_legend=function(e,t,{x0:i,x1:n,y0:l,y1:o}){t.save(),t.beginPath(),t.moveTo(i,(l+o)/2),t.lineTo(n,(l+o)/2),e.line.doit&&(e.line.set_value(t),t.stroke()),t.restore()},i.generic_line_vector_legend=a,i.generic_line_legend=a,i.generic_area_scalar_legend=function(e,t,{x0:i,x1:n,y0:l,y1:o}){var a,r;const c=.1*Math.abs(n-i),s=.1*Math.abs(o-l),_=i+c,v=n-c,d=l+s,h=o-s;t.beginPath(),t.rect(_,d,v-_,h-d),e.fill.doit&&(e.fill.set_value(t),t.fill()),(null===(a=e.hatch)||void 0===a?void 0:a.doit)&&(e.hatch.set_value(t),t.fill()),(null===(r=e.line)||void 0===r?void 0:r.doit)&&(e.line.set_value(t),t.stroke())},i.generic_area_vector_legend=r,i.generic_area_legend=r,i.line_interpolation=function(e,t,i,n,l,a){const{sx:r,sy:c}=t;let s,_,v,d;\"point\"==t.type?([v,d]=e.yscale.r_invert(c-1,c+1),[s,_]=e.xscale.r_invert(r-1,r+1)):\"v\"==t.direction?([v,d]=e.yscale.r_invert(c,c),[s,_]=[Math.min(i-1,l-1),Math.max(i+1,l+1)]):([s,_]=e.xscale.r_invert(r,r),[v,d]=[Math.min(n-1,a-1),Math.max(n+1,a+1)]);const{x:h,y:g}=o.check_2_segments_intersect(s,v,_,d,i,n,l,a);return[h,g]}},\n", | |
" function _(t,n,e,i,r){function s(t,n){return(t.x-n.x)**2+(t.y-n.y)**2}function o(t,n,e){const i=s(n,e);if(0==i)return s(t,n);const r=((t.x-n.x)*(e.x-n.x)+(t.y-n.y)*(e.y-n.y))/i;if(r<0)return s(t,n);if(r>1)return s(t,e);return s(t,{x:n.x+r*(e.x-n.x),y:n.y+r*(e.y-n.y)})}i(),e.point_in_poly=function(t,n,e,i){let r=!1,s=e[e.length-1],o=i[i.length-1];for(let u=0;u<e.length;u++){const c=e[u],_=i[u];o<n!=_<n&&s+(n-o)/(_-o)*(c-s)<t&&(r=!r),s=c,o=_}return r},e.point_in_ellipse=function(t,n,e,i,r,s,o){return((Math.cos(e)/r)**2+(Math.sin(e)/i)**2)*(t-s)**2+2*Math.cos(e)*Math.sin(e)*((1/r)**2-(1/i)**2)*(t-s)*(n-o)+((Math.cos(e)/i)**2+(Math.sin(e)/r)**2)*(n-o)**2<=1},e.dist_2_pts=s,e.dist_to_segment_squared=o,e.dist_to_segment=function(t,n,e){return Math.sqrt(o(t,n,e))},e.check_2_segments_intersect=function(t,n,e,i,r,s,o,u){const c=(u-s)*(e-t)-(o-r)*(i-n);if(0==c)return{hit:!1,x:null,y:null};{let _=n-s,h=t-r;const l=(e-t)*_-(i-n)*h;_=((o-r)*_-(u-s)*h)/c,h=l/c;return{hit:_>0&&_<1&&h>0&&h<1,x:t+_*(e-t),y:n+_*(i-n)}}}},\n", | |
" function _(t,e,s,i,a){i();const o=t(1),n=t(109),_=t(113),r=o.__importDefault(t(114)),h=o.__importDefault(t(115)),l=t(22),g=t(46);class u{constructor(t){this._atlas=new Map,this._width=256,this._height=256,this.tex=new n.Texture2d(t),this.tex.set_wrapping(t.REPEAT,t.REPEAT),this.tex.set_interpolation(t.NEAREST,t.NEAREST),this.tex.set_size([this._width,this._height],t.RGBA),this.tex.set_data([0,0],[this._width,this._height],new Uint8Array(4*this._width*this._height)),this.get_atlas_data([1])}get_atlas_data(t){const e=t.join(\"-\");let s=this._atlas.get(e);if(null==s){const[i,a]=this.make_pattern(t),o=this._atlas.size;this.tex.set_data([0,o],[this._width,1],new Uint8Array(i.map((t=>t+10)))),s=[o/this._height,a],this._atlas.set(e,s)}return s}make_pattern(t){t.length>1&&t.length%2&&(t=t.concat(t));let e=0;for(const s of t)e+=s;const s=[];let i=0;for(let e=0,a=t.length+2;e<a;e+=2){const a=Math.max(1e-4,t[e%t.length]),o=Math.max(1e-4,t[(e+1)%t.length]);s.push(i,i+a),i+=a+o}const a=this._width,o=new Float32Array(4*a);for(let t=0,i=a;t<i;t++){let i,n,_;const r=e*t/(a-1);let h=0,l=1e16;for(let t=0,e=s.length;t<e;t++){const e=Math.abs(s[t]-r);e<l&&(h=t,l=e)}h%2==0?(_=r<=s[h]?1:0,n=s[h],i=s[h+1]):(_=r>s[h]?-1:0,n=s[h-1],i=s[h]),o[4*t+0]=s[h],o[4*t+1]=_,o[4*t+2]=n,o[4*t+3]=i}return[o,e]}}u.__name__=\"DashAtlas\";const f={miter:0,round:1,bevel:2},c={\"\":0,none:0,\".\":0,round:1,\")\":1,\"(\":1,o:1,\"triangle in\":2,\"<\":2,\"triangle out\":3,\">\":3,square:4,\"[\":4,\"]\":4,\"=\":4,butt:5,\"|\":5};class d extends _.BaseGLGlyph{constructor(t,e){super(t,e),this.glyph=e,this._scale_aspect=0;const s=r.default,i=h.default;this.prog=new n.Program(t),this.prog.set_shaders(s,i),this.index_buffer=new n.IndexBuffer(t),this.vbo_position=new n.VertexBuffer(t),this.vbo_tangents=new n.VertexBuffer(t),this.vbo_segment=new n.VertexBuffer(t),this.vbo_angles=new n.VertexBuffer(t),this.vbo_texcoord=new n.VertexBuffer(t),this.dash_atlas=new u(t)}draw(t,e,s){const i=e.glglyph;if(i.data_changed&&(i._set_data(),i.data_changed=!1),this.visuals_changed&&(this._set_visuals(),this.visuals_changed=!1),i._update_scale(1,1),this._scale_aspect=1,this.prog.set_attribute(\"a_position\",\"vec2\",i.vbo_position),this.prog.set_attribute(\"a_tangents\",\"vec4\",i.vbo_tangents),this.prog.set_attribute(\"a_segment\",\"vec2\",i.vbo_segment),this.prog.set_attribute(\"a_angles\",\"vec2\",i.vbo_angles),this.prog.set_attribute(\"a_texcoord\",\"vec2\",i.vbo_texcoord),this.prog.set_uniform(\"u_length\",\"float\",[i.cumsum]),this.prog.set_texture(\"u_dash_atlas\",this.dash_atlas.tex),this.prog.set_uniform(\"u_pixel_ratio\",\"float\",[s.pixel_ratio]),this.prog.set_uniform(\"u_canvas_size\",\"vec2\",[s.width,s.height]),this.prog.set_uniform(\"u_scale_aspect\",\"vec2\",[1,1]),this.prog.set_uniform(\"u_scale_length\",\"float\",[Math.sqrt(2)]),this.I_triangles=i.I_triangles,this.I_triangles.length<65535)this.index_buffer.set_size(2*this.I_triangles.length),this.index_buffer.set_data(0,new Uint16Array(this.I_triangles)),this.prog.draw(this.gl.TRIANGLES,this.index_buffer);else{t=Array.from(this.I_triangles);const e=this.I_triangles.length,s=64008,a=[];for(let t=0,i=Math.ceil(e/s);t<i;t++)a.push([]);for(let e=0,i=t.length;e<i;e++){const i=t[e]%s;a[Math.floor(t[e]/s)].push(i)}for(let t=0,e=a.length;t<e;t++){const e=new Uint16Array(a[t]),o=t*s*4;0!==e.length&&(this.prog.set_attribute(\"a_position\",\"vec2\",i.vbo_position,0,2*o),this.prog.set_attribute(\"a_tangents\",\"vec4\",i.vbo_tangents,0,4*o),this.prog.set_attribute(\"a_segment\",\"vec2\",i.vbo_segment,0,2*o),this.prog.set_attribute(\"a_angles\",\"vec2\",i.vbo_angles,0,2*o),this.prog.set_attribute(\"a_texcoord\",\"vec2\",i.vbo_texcoord,0,2*o),this.index_buffer.set_size(2*e.length),this.index_buffer.set_data(0,e),this.prog.draw(this.gl.TRIANGLES,this.index_buffer))}}}_set_data(){this._bake(),this.vbo_position.set_size(4*this.V_position.length),this.vbo_position.set_data(0,this.V_position),this.vbo_tangents.set_size(4*this.V_tangents.length),this.vbo_tangents.set_data(0,this.V_tangents),this.vbo_angles.set_size(4*this.V_angles.length),this.vbo_angles.set_data(0,this.V_angles),this.vbo_texcoord.set_size(4*this.V_texcoord.length),this.vbo_texcoord.set_data(0,this.V_texcoord)}_set_visuals(){const{line_color:t,line_alpha:e,line_width:s,line_cap:i,line_join:a,line_dash:o,line_dash_offset:n}=this.glyph.visuals.line,[_,r,h,u]=l.color2rgba(t.value,e.value),d=s.value,p=c[i.value],v=f[a.value];this.prog.set_uniform(\"u_color\",\"vec4\",[_/255,r/255,h/255,u/255]),this.prog.set_uniform(\"u_linewidth\",\"float\",[d]),this.prog.set_uniform(\"u_antialias\",\"float\",[.9]),this.prog.set_uniform(\"u_linecaps\",\"vec2\",[p,p]),this.prog.set_uniform(\"u_linejoin\",\"float\",[v]),this.prog.set_uniform(\"u_miter_limit\",\"float\",[10]);const b=g.resolve_line_dash(o.value);let m=0,w=1;b.length&&([m,w]=this.dash_atlas.get_atlas_data(b)),this.prog.set_uniform(\"u_dash_index\",\"float\",[m]),this.prog.set_uniform(\"u_dash_phase\",\"float\",[n.value]),this.prog.set_uniform(\"u_dash_period\",\"float\",[w]),this.prog.set_uniform(\"u_dash_caps\",\"vec2\",[p,p]),this.prog.set_uniform(\"u_closed\",\"float\",[0])}_bake(){let t,e,s,i,a,o,n,_;const r=this.nvertices,h=this.glyph.sx,l=this.glyph.sy,g=n=new Float32Array(2*r),u=new Float32Array(2*r),f=_=new Float32Array(4*r);for(let t=0,e=r;t<e;t++)g[2*t+0]=isFinite(h[t])?h[t]:0,g[2*t+1]=isFinite(l[t])?l[t]:0;this.tangents=e=new Float32Array(2*r-2);for(let t=0,s=r-1;t<s;t++)e[2*t+0]=n[2*(t+1)+0]-n[2*t+0],e[2*t+1]=n[2*(t+1)+1]-n[2*t+1];for(let t=0,s=r-1;t<s;t++)f[4*(t+1)+0]=e[2*t+0],f[4*(t+1)+1]=e[2*t+1],f[4*t+2]=e[2*t+0],f[4*t+3]=e[2*t+1];f[0]=e[0],f[1]=e[1],f[4*(r-1)+2]=e[2*(r-2)+0],f[4*(r-1)+3]=e[2*(r-2)+1];const c=new Float32Array(r);for(let t=0,e=r;t<e;t++)c[t]=Math.atan2(_[4*t+0]*_[4*t+3]-_[4*t+1]*_[4*t+2],_[4*t+0]*_[4*t+2]+_[4*t+1]*_[4*t+3]);for(let t=0,e=r-1;t<e;t++)u[2*t+0]=c[t],u[2*t+1]=c[t+1];for(let t=0,e=r;t<e;t++)isFinite(h[t])||(g[2*t+0]=h[t]),isFinite(l[t])||(g[2*t+1]=l[t]);const d=4*r-4;this.V_position=i=new Float32Array(2*d),this.V_angles=s=new Float32Array(2*d),this.V_tangents=a=new Float32Array(4*d),this.V_texcoord=o=new Float32Array(2*d);for(let t=0,e=r;t<e;t++)for(let e=0;e<4;e++){for(let a=0;a<2;a++)i[2*(4*t+e-2)+a]=g[2*t+a],s[2*(4*t+e)+a]=u[2*t+a];for(let s=0;s<4;s++)a[4*(4*t+e-2)+s]=f[4*t+s]}for(let t=0,e=r;t<e;t++)o[2*(4*t+0)+0]=-1,o[2*(4*t+1)+0]=-1,o[2*(4*t+2)+0]=1,o[2*(4*t+3)+0]=1,o[2*(4*t+0)+1]=-1,o[2*(4*t+1)+1]=1,o[2*(4*t+2)+1]=-1,o[2*(4*t+3)+1]=1;const p=6*(r-1);this.I_triangles=t=new Uint32Array(p);for(let e=0,s=r;e<s;e++)t[6*e+0]=0+4*e,t[6*e+1]=1+4*e,t[6*e+2]=3+4*e,t[6*e+3]=2+4*e,t[6*e+4]=0+4*e,t[6*e+5]=3+4*e}_update_scale(t,e){let s;const i=this.nvertices,a=4*i-4,o=this.tangents,n=new Float32Array(i-1),_=new Float32Array(2*i);this.V_segment=s=new Float32Array(2*a);for(let s=0,a=i-1;s<a;s++)n[s]=Math.sqrt((o[2*s+0]*t)**2+(o[2*s+1]*e)**2);let r=0;for(let t=0,e=i-1;t<e;t++)r+=n[t],_[2*(t+1)+0]=r,_[2*t+1]=r;for(let t=0,e=i;t<e;t++)for(let e=0;e<4;e++)for(let i=0;i<2;i++)s[2*(4*t+e)+i]=_[2*t+i];this.cumsum=r,this.vbo_segment.set_size(4*this.V_segment.length),this.vbo_segment.set_data(0,this.V_segment)}}s.LineGL=d,d.__name__=\"LineGL\"},\n", | |
" function _(e,r,f,u,x){u(),x(\"Program\",e(110).Program),x(\"Texture2d\",e(112).Texture2d);var t=e(111);x(\"IndexBuffer\",t.IndexBuffer),x(\"VertexBuffer\",t.VertexBuffer)},\n", | |
" function _(t,e,i,s,a){s();const r=t(111);class n{constructor(t){this.gl=t,this.UTYPEMAP={float:\"uniform1fv\",vec2:\"uniform2fv\",vec3:\"uniform3fv\",vec4:\"uniform4fv\",int:\"uniform1iv\",ivec2:\"uniform2iv\",ivec3:\"uniform3iv\",ivec4:\"uniform4iv\",bool:\"uniform1iv\",bvec2:\"uniform2iv\",bvec3:\"uniform3iv\",bvec4:\"uniform4iv\",mat2:\"uniformMatrix2fv\",mat3:\"uniformMatrix3fv\",mat4:\"uniformMatrix4fv\",sampler1D:\"uniform1i\",sampler2D:\"uniform1i\",sampler3D:\"uniform1i\"},this.ATYPEMAP={float:\"vertexAttrib1f\",vec2:\"vertexAttrib2f\",vec3:\"vertexAttrib3f\",vec4:\"vertexAttrib4f\"},this.ATYPEINFO={float:[1,5126],vec2:[2,5126],vec3:[3,5126],vec4:[4,5126],vec4_uint8:[4,5121]},this._linked=!1,this._validated=!1,this._unset_variables=new Set,this._known_invalid=new Set,this._locations=new Map,this._samplers=new Map,this._attributes=new Map,this.handle=this.gl.createProgram()}delete(){this.gl.deleteProgram(this.handle)}activate(){this.gl.useProgram(this.handle)}deactivate(){this.gl.useProgram(0)}set_shaders(t,e){const i=this.gl;this._linked=!1;const s=i.createShader(i.VERTEX_SHADER),a=i.createShader(i.FRAGMENT_SHADER),r=[[t,s,\"vertex\"],[e,a,\"fragment\"]];for(const[t,e,s]of r){i.shaderSource(e,t),i.compileShader(e);if(!i.getShaderParameter(e,i.COMPILE_STATUS)){const t=i.getShaderInfoLog(e);throw new Error(`errors in ${s} shader:\\n${t}`)}}if(i.attachShader(this.handle,s),i.attachShader(this.handle,a),i.linkProgram(this.handle),!i.getProgramParameter(this.handle,i.LINK_STATUS)){const t=i.getProgramInfoLog(this.handle);throw new Error(`Program link error:\\n${t}`)}this._unset_variables=this._get_active_attributes_and_uniforms(),i.detachShader(this.handle,s),i.detachShader(this.handle,a),i.deleteShader(s),i.deleteShader(a),this._known_invalid.clear(),this._linked=!0}_get_active_attributes_and_uniforms(){const t=this.gl;this._locations.clear();const e=new RegExp(\"(\\\\w+)\\\\s*(\\\\[(\\\\d+)\\\\])\\\\s*\"),i=t.getProgramParameter(this.handle,t.ACTIVE_UNIFORMS),s=[],a=[],r=[[s,t.getProgramParameter(this.handle,t.ACTIVE_ATTRIBUTES),t.getActiveAttrib,t.getAttribLocation],[a,i,t.getActiveUniform,t.getUniformLocation]];for(const[i,s,a,n]of r)for(let r=0;r<s;r+=1){const s=a.call(t,this.handle,r),o=s.name,h=o.match(e);if(null!=h){const t=h[1];for(let e=0;e<s.size;e+=1)i.push([`${t}[${e}]`,s.type])}else i.push([o,s.type]);this._locations.set(o,n.call(t,this.handle,o))}const n=new Set;for(const[t]of s)n.add(t);for(const[t]of a)n.add(t);return n}set_texture(t,e){var i;if(!this._linked)throw new Error(\"Cannot set uniform when program has no code\");const s=null!==(i=this._locations.get(t))&&void 0!==i?i:-1;if(s<0)this._known_invalid.has(t)||(this._known_invalid.add(t),console.log(`\"Variable ${t} is not an active texture`));else{this._unset_variables.has(t)&&this._unset_variables.delete(t),this.activate();{let i=this._samplers.size;this._samplers.has(t)&&(i=this._samplers.get(t)[2]),this._samplers.set(t,[e._target,e.handle,i]),this.gl.uniform1i(s,i)}}}set_uniform(t,e,i){var s;if(!this._linked)throw new Error(\"Cannot set uniform when program has no code\");const a=null!==(s=this._locations.get(t))&&void 0!==s?s:-1;if(a<0)return void(this._known_invalid.has(t)||(this._known_invalid.add(t),console.log(`Variable ${t} is not an active uniform`)));this._unset_variables.has(t)&&this._unset_variables.delete(t);let r=1;if(!e.startsWith(\"mat\")){const t=\"int\"==e||\"bool\"==e?\"float\":e.replace(/^ib/,\"\");r=Math.floor(i.length/this.ATYPEINFO[t][0])}if(r>1)for(let e=0;e<r;e+=1)if(this._unset_variables.has(`${t}[${e}]`)){const i=`${t}[${e}]`;this._unset_variables.has(i)&&this._unset_variables.delete(i)}const n=this.UTYPEMAP[e];this.activate(),e.startsWith(\"mat\")?this.gl[n](a,!1,i):this.gl[n](a,i)}set_attribute(t,e,i,s=0,a=0,n=!1){var o;if(!this._linked)throw new Error(\"Cannot set attribute when program has no code\");const h=null!==(o=this._locations.get(t))&&void 0!==o?o:-1;if(h<0)this._known_invalid.has(t)||(this._known_invalid.add(t),i instanceof r.VertexBuffer&&a>0||console.log(`Variable ${t} is not an active attribute`));else if(this._unset_variables.has(t)&&this._unset_variables.delete(t),this.activate(),i instanceof r.VertexBuffer){const[r,o]=this.ATYPEINFO[e],l=\"vertexAttribPointer\",_=[r,o,n,s,a];this._attributes.set(t,[i.handle,h,l,_])}else{const s=this.ATYPEMAP[e];this._attributes.set(t,[null,h,s,i])}}_pre_draw(){this.activate();for(const[t,e,i]of this._samplers.values())this.gl.activeTexture(this.gl.TEXTURE0+i),this.gl.bindTexture(t,e);for(const[t,e,i,s]of this._attributes.values())null!=t?(this.gl.bindBuffer(this.gl.ARRAY_BUFFER,t),this.gl.enableVertexAttribArray(e),this.gl[i].apply(this.gl,[e,...s])):(this.gl.bindBuffer(this.gl.ARRAY_BUFFER,null),this.gl.disableVertexAttribArray(e),this.gl[i].apply(this.gl,[e,...s]));this._validated||(this._validated=!0,this._validate())}_validate(){if(this._unset_variables.size&&console.log(`Program has unset variables: ${this._unset_variables}`),this.gl.validateProgram(this.handle),!this.gl.getProgramParameter(this.handle,this.gl.VALIDATE_STATUS))throw console.log(this.gl.getProgramInfoLog(this.handle)),new Error(\"Program validation error\")}draw(t,e){if(!this._linked)throw new Error(\"Cannot draw program if code has not been set\");if(e instanceof r.IndexBuffer){this._pre_draw(),e.activate();const i=e.buffer_size/2,s=this.gl.UNSIGNED_SHORT;this.gl.drawElements(t,i,s,0),e.deactivate()}else{const[i,s]=e;0!=s&&(this._pre_draw(),this.gl.drawArrays(t,i,s))}}}i.Program=n,n.__name__=\"Program\"},\n", | |
" function _(t,e,s,i,a){i();class r{constructor(t){this.gl=t,this._usage=35048,this.buffer_size=0,this.handle=this.gl.createBuffer()}delete(){this.gl.deleteBuffer(this.handle)}activate(){this.gl.bindBuffer(this._target,this.handle)}deactivate(){this.gl.bindBuffer(this._target,null)}set_size(t){t!=this.buffer_size&&(this.activate(),this.gl.bufferData(this._target,t,this._usage),this.buffer_size=t)}set_data(t,e){this.activate(),this.gl.bufferSubData(this._target,t,e)}}s.Buffer=r,r.__name__=\"Buffer\";class f extends r{constructor(){super(...arguments),this._target=34962}}s.VertexBuffer=f,f.__name__=\"VertexBuffer\";class h extends r{constructor(){super(...arguments),this._target=34963}}s.IndexBuffer=h,h.__name__=\"IndexBuffer\"},\n", | |
" function _(t,e,i,a,r){a();const s=t(11);class h{constructor(t){this.gl=t,this._target=3553,this._types={Int8Array:5120,Uint8Array:5121,Int16Array:5122,Uint16Array:5123,Int32Array:5124,Uint32Array:5125,Float32Array:5126},this.handle=this.gl.createTexture()}delete(){this.gl.deleteTexture(this.handle)}activate(){this.gl.bindTexture(this._target,this.handle)}deactivate(){this.gl.bindTexture(this._target,0)}_get_alignment(t){const e=[4,8,2,1];for(const i of e)if(t%i==0)return i;s.unreachable()}set_wrapping(t,e){this.activate(),this.gl.texParameterf(this._target,this.gl.TEXTURE_WRAP_S,t),this.gl.texParameterf(this._target,this.gl.TEXTURE_WRAP_T,e)}set_interpolation(t,e){this.activate(),this.gl.texParameterf(this._target,this.gl.TEXTURE_MIN_FILTER,t),this.gl.texParameterf(this._target,this.gl.TEXTURE_MAG_FILTER,e)}set_size([t,e],i){var a,r,s;t==(null===(a=this._shape_format)||void 0===a?void 0:a.width)&&e==(null===(r=this._shape_format)||void 0===r?void 0:r.height)&&i==(null===(s=this._shape_format)||void 0===s?void 0:s.format)||(this._shape_format={width:t,height:e,format:i},this.activate(),this.gl.texImage2D(this._target,0,i,t,e,0,i,this.gl.UNSIGNED_BYTE,null))}set_data(t,[e,i],a){this.activate();const{format:r}=this._shape_format,[s,h]=t,l=this._types[a.constructor.name];if(null==l)throw new Error(`Type ${a.constructor.name} not allowed for texture`);const _=this._get_alignment(e);4!=_&&this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,_),this.gl.texSubImage2D(this._target,0,s,h,e,i,r,l,a),4!=_&&this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,4)}}i.Texture2d=h,h.__name__=\"Texture2d\"},\n", | |
" function _(e,t,s,i,h){i();class a{constructor(e,t){this.gl=e,this.glyph=t,this.nvertices=0,this.size_changed=!1,this.data_changed=!1,this.visuals_changed=!1}set_data_changed(){const{data_size:e}=this.glyph;e!=this.nvertices&&(this.nvertices=e,this.size_changed=!0),this.data_changed=!0}set_visuals_changed(){this.visuals_changed=!0}render(e,t,s){if(0==t.length)return!0;const{width:i,height:h}=this.glyph.renderer.plot_view.canvas_view.webgl.canvas,a={pixel_ratio:this.glyph.renderer.plot_view.canvas_view.pixel_ratio,width:i,height:h};return this.draw(t,s,a),!0}}s.BaseGLGlyph=a,a.__name__=\"BaseGLGlyph\"},\n", | |
" function _(n,e,t,a,i){a();t.default=\"\\nprecision mediump float;\\n\\nconst float PI = 3.14159265358979323846264;\\nconst float THETA = 15.0 * 3.14159265358979323846264/180.0;\\n\\nuniform float u_pixel_ratio;\\nuniform vec2 u_canvas_size, u_offset;\\nuniform vec2 u_scale_aspect;\\nuniform float u_scale_length;\\n\\nuniform vec4 u_color;\\nuniform float u_antialias;\\nuniform float u_length;\\nuniform float u_linewidth;\\nuniform float u_dash_index;\\nuniform float u_closed;\\n\\nattribute vec2 a_position;\\nattribute vec4 a_tangents;\\nattribute vec2 a_segment;\\nattribute vec2 a_angles;\\nattribute vec2 a_texcoord;\\n\\nvarying vec4 v_color;\\nvarying vec2 v_segment;\\nvarying vec2 v_angles;\\nvarying vec2 v_texcoord;\\nvarying vec2 v_miter;\\nvarying float v_length;\\nvarying float v_linewidth;\\n\\nfloat cross(in vec2 v1, in vec2 v2)\\n{\\n return v1.x*v2.y - v1.y*v2.x;\\n}\\n\\nfloat signed_distance(in vec2 v1, in vec2 v2, in vec2 v3)\\n{\\n return cross(v2-v1,v1-v3) / length(v2-v1);\\n}\\n\\nvoid rotate( in vec2 v, in float alpha, out vec2 result )\\n{\\n float c = cos(alpha);\\n float s = sin(alpha);\\n result = vec2( c*v.x - s*v.y,\\n s*v.x + c*v.y );\\n}\\n\\nvoid main()\\n{\\n bool closed = (u_closed > 0.0);\\n\\n // Attributes and uniforms to varyings\\n v_color = u_color;\\n v_linewidth = u_linewidth;\\n v_segment = a_segment * u_scale_length;\\n v_length = u_length * u_scale_length;\\n\\n // Scale to map to pixel coordinates. The original algorithm from the paper\\n // assumed isotropic scale. We obviously do not have this.\\n vec2 abs_scale_aspect = abs(u_scale_aspect);\\n vec2 abs_scale = u_scale_length * abs_scale_aspect;\\n\\n // Correct angles for aspect ratio\\n vec2 av;\\n av = vec2(1.0, tan(a_angles.x)) / abs_scale_aspect;\\n v_angles.x = atan(av.y, av.x);\\n av = vec2(1.0, tan(a_angles.y)) / abs_scale_aspect;\\n v_angles.y = atan(av.y, av.x);\\n\\n // Thickness below 1 pixel are represented using a 1 pixel thickness\\n // and a modified alpha\\n v_color.a = min(v_linewidth, v_color.a);\\n v_linewidth = max(v_linewidth, 1.0);\\n\\n // If color is fully transparent we just will discard the fragment anyway\\n if( v_color.a <= 0.0 ) {\\n gl_Position = vec4(0.0,0.0,0.0,1.0);\\n return;\\n }\\n\\n // This is the actual half width of the line\\n float w = ceil(u_antialias+v_linewidth)/2.0;\\n\\n vec2 position = a_position;\\n\\n vec2 t1 = normalize(a_tangents.xy * abs_scale_aspect); // note the scaling for aspect ratio here\\n vec2 t2 = normalize(a_tangents.zw * abs_scale_aspect);\\n float u = a_texcoord.x;\\n float v = a_texcoord.y;\\n vec2 o1 = vec2( +t1.y, -t1.x);\\n vec2 o2 = vec2( +t2.y, -t2.x);\\n\\n // This is a join\\n // ----------------------------------------------------------------\\n if( t1 != t2 ) {\\n float angle = atan (t1.x*t2.y-t1.y*t2.x, t1.x*t2.x+t1.y*t2.y); // Angle needs recalculation for some reason\\n vec2 t = normalize(t1+t2);\\n vec2 o = vec2( + t.y, - t.x);\\n\\n if ( u_dash_index > 0.0 )\\n {\\n // Broken angle\\n // ----------------------------------------------------------------\\n if( (abs(angle) > THETA) ) {\\n position += v * w * o / cos(angle/2.0);\\n float s = sign(angle);\\n if( angle < 0.0 ) {\\n if( u == +1.0 ) {\\n u = v_segment.y + v * w * tan(angle/2.0);\\n if( v == 1.0 ) {\\n position -= 2.0 * w * t1 / sin(angle);\\n u -= 2.0 * w / sin(angle);\\n }\\n } else {\\n u = v_segment.x - v * w * tan(angle/2.0);\\n if( v == 1.0 ) {\\n position += 2.0 * w * t2 / sin(angle);\\n u += 2.0*w / sin(angle);\\n }\\n }\\n } else {\\n if( u == +1.0 ) {\\n u = v_segment.y + v * w * tan(angle/2.0);\\n if( v == -1.0 ) {\\n position += 2.0 * w * t1 / sin(angle);\\n u += 2.0 * w / sin(angle);\\n }\\n } else {\\n u = v_segment.x - v * w * tan(angle/2.0);\\n if( v == -1.0 ) {\\n position -= 2.0 * w * t2 / sin(angle);\\n u -= 2.0*w / sin(angle);\\n }\\n }\\n }\\n // Continuous angle\\n // ------------------------------------------------------------\\n } else {\\n position += v * w * o / cos(angle/2.0);\\n if( u == +1.0 ) u = v_segment.y;\\n else u = v_segment.x;\\n }\\n }\\n\\n // Solid line\\n // --------------------------------------------------------------------\\n else\\n {\\n position.xy += v * w * o / cos(angle/2.0);\\n if( angle < 0.0 ) {\\n if( u == +1.0 ) {\\n u = v_segment.y + v * w * tan(angle/2.0);\\n } else {\\n u = v_segment.x - v * w * tan(angle/2.0);\\n }\\n } else {\\n if( u == +1.0 ) {\\n u = v_segment.y + v * w * tan(angle/2.0);\\n } else {\\n u = v_segment.x - v * w * tan(angle/2.0);\\n }\\n }\\n }\\n\\n // This is a line start or end (t1 == t2)\\n // ------------------------------------------------------------------------\\n } else {\\n position += v * w * o1;\\n if( u == -1.0 ) {\\n u = v_segment.x - w;\\n position -= w * t1;\\n } else {\\n u = v_segment.y + w;\\n position += w * t2;\\n }\\n }\\n\\n // Miter distance\\n // ------------------------------------------------------------------------\\n vec2 t;\\n vec2 curr = a_position * abs_scale;\\n if( a_texcoord.x < 0.0 ) {\\n vec2 next = curr + t2*(v_segment.y-v_segment.x);\\n\\n rotate( t1, +v_angles.x/2.0, t);\\n v_miter.x = signed_distance(curr, curr+t, position);\\n\\n rotate( t2, +v_angles.y/2.0, t);\\n v_miter.y = signed_distance(next, next+t, position);\\n } else {\\n vec2 prev = curr - t1*(v_segment.y-v_segment.x);\\n\\n rotate( t1, -v_angles.x/2.0,t);\\n v_miter.x = signed_distance(prev, prev+t, position);\\n\\n rotate( t2, -v_angles.y/2.0,t);\\n v_miter.y = signed_distance(curr, curr+t, position);\\n }\\n\\n if (!closed && v_segment.x <= 0.0) {\\n v_miter.x = 1e10;\\n }\\n if (!closed && v_segment.y >= v_length)\\n {\\n v_miter.y = 1e10;\\n }\\n\\n v_texcoord = vec2( u, v*w );\\n\\n // Calculate position in device coordinates. Note that we\\n // already scaled with abs scale above.\\n vec2 normpos = position * sign(u_scale_aspect);\\n normpos += 0.5; // make up for Bokeh's offset\\n normpos /= u_canvas_size / u_pixel_ratio; // in 0..1\\n gl_Position = vec4(normpos*2.0-1.0, 0.0, 1.0);\\n gl_Position.y *= -1.0;\\n}\\n\"},\n", | |
" function _(n,t,e,s,a){s();e.default=\"\\nprecision mediump float;\\n\\nconst float PI = 3.14159265358979323846264;\\nconst float THETA = 15.0 * 3.14159265358979323846264/180.0;\\n\\nuniform sampler2D u_dash_atlas;\\n\\nuniform vec2 u_linecaps;\\nuniform float u_miter_limit;\\nuniform float u_linejoin;\\nuniform float u_antialias;\\nuniform float u_dash_phase;\\nuniform float u_dash_period;\\nuniform float u_dash_index;\\nuniform vec2 u_dash_caps;\\nuniform float u_closed;\\n\\nvarying vec4 v_color;\\nvarying vec2 v_segment;\\nvarying vec2 v_angles;\\nvarying vec2 v_texcoord;\\nvarying vec2 v_miter;\\nvarying float v_length;\\nvarying float v_linewidth;\\n\\n// Compute distance to cap ----------------------------------------------------\\nfloat cap( int type, float dx, float dy, float t, float linewidth )\\n{\\n float d = 0.0;\\n dx = abs(dx);\\n dy = abs(dy);\\n if (type == 0) discard; // None\\n else if (type == 1) d = sqrt(dx*dx+dy*dy); // Round\\n else if (type == 3) d = (dx+abs(dy)); // Triangle in\\n else if (type == 2) d = max(abs(dy),(t+dx-abs(dy))); // Triangle out\\n else if (type == 4) d = max(dx,dy); // Square\\n else if (type == 5) d = max(dx+t,dy); // Butt\\n return d;\\n}\\n\\n// Compute distance to join -------------------------------------------------\\nfloat join( in int type, in float d, in vec2 segment, in vec2 texcoord, in vec2 miter,\\n in float linewidth )\\n{\\n // texcoord.x is distance from start\\n // texcoord.y is distance from centerline\\n // segment.x and y indicate the limits (as for texcoord.x) for this segment\\n\\n float dx = texcoord.x;\\n\\n // Round join\\n if( type == 1 ) {\\n if (dx < segment.x) {\\n d = max(d,length( texcoord - vec2(segment.x,0.0)));\\n //d = length( texcoord - vec2(segment.x,0.0));\\n } else if (dx > segment.y) {\\n d = max(d,length( texcoord - vec2(segment.y,0.0)));\\n //d = length( texcoord - vec2(segment.y,0.0));\\n }\\n }\\n // Bevel join\\n else if ( type == 2 ) {\\n if (dx < segment.x) {\\n vec2 x = texcoord - vec2(segment.x,0.0);\\n d = max(d, max(abs(x.x), abs(x.y)));\\n\\n } else if (dx > segment.y) {\\n vec2 x = texcoord - vec2(segment.y,0.0);\\n d = max(d, max(abs(x.x), abs(x.y)));\\n }\\n /* Original code for bevel which does not work for us\\n if( (dx < segment.x) || (dx > segment.y) )\\n d = max(d, min(abs(x.x),abs(x.y)));\\n */\\n }\\n\\n return d;\\n}\\n\\nvoid main()\\n{\\n // If color is fully transparent we just discard the fragment\\n if( v_color.a <= 0.0 ) {\\n discard;\\n }\\n\\n // Test if dash pattern is the solid one (0)\\n bool solid = (u_dash_index == 0.0);\\n\\n // Test if path is closed\\n bool closed = (u_closed > 0.0);\\n\\n vec4 color = v_color;\\n float dx = v_texcoord.x;\\n float dy = v_texcoord.y;\\n float t = v_linewidth/2.0-u_antialias;\\n float width = 1.0; //v_linewidth; original code had dashes scale with line width, we do not\\n float d = 0.0;\\n\\n vec2 linecaps = u_linecaps;\\n vec2 dash_caps = u_dash_caps;\\n float line_start = 0.0;\\n float line_stop = v_length;\\n\\n // Apply miter limit; fragments too far into the miter are simply discarded\\n if( (dx < v_segment.x) || (dx > v_segment.y) ) {\\n float into_miter = max(v_segment.x - dx, dx - v_segment.y);\\n if (into_miter > u_miter_limit*v_linewidth/2.0)\\n discard;\\n }\\n\\n // Solid line --------------------------------------------------------------\\n if( solid ) {\\n d = abs(dy);\\n if( (!closed) && (dx < line_start) ) {\\n d = cap( int(u_linecaps.x), abs(dx), abs(dy), t, v_linewidth );\\n }\\n else if( (!closed) && (dx > line_stop) ) {\\n d = cap( int(u_linecaps.y), abs(dx)-line_stop, abs(dy), t, v_linewidth );\\n }\\n else {\\n d = join( int(u_linejoin), abs(dy), v_segment, v_texcoord, v_miter, v_linewidth );\\n }\\n\\n // Dash line --------------------------------------------------------------\\n } else {\\n float segment_start = v_segment.x;\\n float segment_stop = v_segment.y;\\n float segment_center= (segment_start+segment_stop)/2.0;\\n float freq = u_dash_period*width;\\n float u = mod( dx + u_dash_phase*width, freq);\\n vec4 tex = texture2D(u_dash_atlas, vec2(u/freq, u_dash_index)) * 255.0 -10.0; // conversion to int-like\\n float dash_center= tex.x * width;\\n float dash_type = tex.y;\\n float _start = tex.z * width;\\n float _stop = tex.a * width;\\n float dash_start = dx - u + _start;\\n float dash_stop = dx - u + _stop;\\n\\n // Compute extents of the first dash (the one relative to v_segment.x)\\n // Note: this could be computed in the vertex shader\\n if( (dash_stop < segment_start) && (dash_caps.x != 5.0) ) {\\n float u = mod(segment_start + u_dash_phase*width, freq);\\n vec4 tex = texture2D(u_dash_atlas, vec2(u/freq, u_dash_index)) * 255.0 -10.0; // conversion to int-like\\n dash_center= tex.x * width;\\n //dash_type = tex.y;\\n float _start = tex.z * width;\\n float _stop = tex.a * width;\\n dash_start = segment_start - u + _start;\\n dash_stop = segment_start - u + _stop;\\n }\\n\\n // Compute extents of the last dash (the one relatives to v_segment.y)\\n // Note: This could be computed in the vertex shader\\n else if( (dash_start > segment_stop) && (dash_caps.y != 5.0) ) {\\n float u = mod(segment_stop + u_dash_phase*width, freq);\\n vec4 tex = texture2D(u_dash_atlas, vec2(u/freq, u_dash_index)) * 255.0 -10.0; // conversion to int-like\\n dash_center= tex.x * width;\\n //dash_type = tex.y;\\n float _start = tex.z * width;\\n float _stop = tex.a * width;\\n dash_start = segment_stop - u + _start;\\n dash_stop = segment_stop - u + _stop;\\n }\\n\\n // This test if the we are dealing with a discontinuous angle\\n bool discontinuous = ((dx < segment_center) && abs(v_angles.x) > THETA) ||\\n ((dx >= segment_center) && abs(v_angles.y) > THETA);\\n //if( dx < line_start) discontinuous = false;\\n //if( dx > line_stop) discontinuous = false;\\n\\n float d_join = join( int(u_linejoin), abs(dy),\\n v_segment, v_texcoord, v_miter, v_linewidth );\\n\\n // When path is closed, we do not have room for linecaps, so we make room\\n // by shortening the total length\\n if (closed) {\\n line_start += v_linewidth/2.0;\\n line_stop -= v_linewidth/2.0;\\n }\\n\\n // We also need to take antialias area into account\\n //line_start += u_antialias;\\n //line_stop -= u_antialias;\\n\\n // Check is dash stop is before line start\\n if( dash_stop <= line_start ) {\\n discard;\\n }\\n // Check is dash start is beyond line stop\\n if( dash_start >= line_stop ) {\\n discard;\\n }\\n\\n // Check if current dash start is beyond segment stop\\n if( discontinuous ) {\\n // Dash start is beyond segment, we discard\\n if( (dash_start > segment_stop) ) {\\n discard;\\n //gl_FragColor = vec4(1.0,0.0,0.0,.25); return;\\n }\\n\\n // Dash stop is before segment, we discard\\n if( (dash_stop < segment_start) ) {\\n discard; //gl_FragColor = vec4(0.0,1.0,0.0,.25); return;\\n }\\n\\n // Special case for round caps (nicer with this)\\n if( dash_caps.x == 1.0 ) {\\n if( (u > _stop) && (dash_stop > segment_stop ) && (abs(v_angles.y) < PI/2.0)) {\\n discard;\\n }\\n }\\n\\n // Special case for round caps (nicer with this)\\n if( dash_caps.y == 1.0 ) {\\n if( (u < _start) && (dash_start < segment_start ) && (abs(v_angles.x) < PI/2.0)) {\\n discard;\\n }\\n }\\n\\n // Special case for triangle caps (in & out) and square\\n // We make sure the cap stop at crossing frontier\\n if( (dash_caps.x != 1.0) && (dash_caps.x != 5.0) ) {\\n if( (dash_start < segment_start ) && (abs(v_angles.x) < PI/2.0) ) {\\n float a = v_angles.x/2.0;\\n float x = (segment_start-dx)*cos(a) - dy*sin(a);\\n float y = (segment_start-dx)*sin(a) + dy*cos(a);\\n if( x > 0.0 ) discard;\\n // We transform the cap into square to avoid holes\\n dash_caps.x = 4.0;\\n }\\n }\\n\\n // Special case for triangle caps (in & out) and square\\n // We make sure the cap stop at crossing frontier\\n if( (dash_caps.y != 1.0) && (dash_caps.y != 5.0) ) {\\n if( (dash_stop > segment_stop ) && (abs(v_angles.y) < PI/2.0) ) {\\n float a = v_angles.y/2.0;\\n float x = (dx-segment_stop)*cos(a) - dy*sin(a);\\n float y = (dx-segment_stop)*sin(a) + dy*cos(a);\\n if( x > 0.0 ) discard;\\n // We transform the caps into square to avoid holes\\n dash_caps.y = 4.0;\\n }\\n }\\n }\\n\\n // Line cap at start\\n if( (dx < line_start) && (dash_start < line_start) && (dash_stop > line_start) ) {\\n d = cap( int(linecaps.x), dx-line_start, dy, t, v_linewidth);\\n }\\n // Line cap at stop\\n else if( (dx > line_stop) && (dash_stop > line_stop) && (dash_start < line_stop) ) {\\n d = cap( int(linecaps.y), dx-line_stop, dy, t, v_linewidth);\\n }\\n // Dash cap left - dash_type = -1, 0 or 1, but there may be roundoff errors\\n else if( dash_type < -0.5 ) {\\n d = cap( int(dash_caps.y), abs(u-dash_center), dy, t, v_linewidth);\\n if( (dx > line_start) && (dx < line_stop) )\\n d = max(d,d_join);\\n }\\n // Dash cap right\\n else if( dash_type > 0.5 ) {\\n d = cap( int(dash_caps.x), abs(dash_center-u), dy, t, v_linewidth);\\n if( (dx > line_start) && (dx < line_stop) )\\n d = max(d,d_join);\\n }\\n // Dash body (plain)\\n else {// if( dash_type > -0.5 && dash_type < 0.5) {\\n d = abs(dy);\\n }\\n\\n // Line join\\n if( (dx > line_start) && (dx < line_stop)) {\\n if( (dx <= segment_start) && (dash_start <= segment_start)\\n && (dash_stop >= segment_start) ) {\\n d = d_join;\\n // Antialias at outer border\\n float angle = PI/2.+v_angles.x;\\n float f = abs( (segment_start - dx)*cos(angle) - dy*sin(angle));\\n d = max(f,d);\\n }\\n else if( (dx > segment_stop) && (dash_start <= segment_stop)\\n && (dash_stop >= segment_stop) ) {\\n d = d_join;\\n // Antialias at outer border\\n float angle = PI/2.+v_angles.y;\\n float f = abs((dx - segment_stop)*cos(angle) - dy*sin(angle));\\n d = max(f,d);\\n }\\n else if( dx < (segment_start - v_linewidth/2.)) {\\n discard;\\n }\\n else if( dx > (segment_stop + v_linewidth/2.)) {\\n discard;\\n }\\n }\\n else if( dx < (segment_start - v_linewidth/2.)) {\\n discard;\\n }\\n else if( dx > (segment_stop + v_linewidth/2.)) {\\n discard;\\n }\\n }\\n\\n // Distance to border ------------------------------------------------------\\n d = d - t;\\n if( d < 0.0 ) {\\n gl_FragColor = color;\\n } else {\\n d /= u_antialias;\\n gl_FragColor = vec4(color.rgb, exp(-d*d)*color.a);\\n }\\n}\\n\"},\n", | |
" function _(i,t,s,e,l){e();const a=i(1),n=i(64),_=i(106),o=a.__importStar(i(107)),h=a.__importStar(i(48)),c=i(59);class r extends n.XYGlyphView{_inner_loop(i,t,s,e,l){for(const a of t){const t=s[a],n=e[a];0!=a?isNaN(t+n)?(i.closePath(),l.apply(i),i.beginPath()):i.lineTo(t,n):(i.beginPath(),i.moveTo(t,n))}i.closePath(),l.call(i)}_render(i,t,s){const{sx:e,sy:l}=null!=s?s:this;this.visuals.fill.doit&&(this.visuals.fill.set_value(i),this._inner_loop(i,t,e,l,i.fill)),this.visuals.hatch.doit&&(this.visuals.hatch.set_value(i),this._inner_loop(i,t,e,l,i.fill)),this.visuals.line.doit&&(this.visuals.line.set_value(i),this._inner_loop(i,t,e,l,i.stroke))}draw_legend_for_index(i,t,s){_.generic_area_scalar_legend(this.visuals,i,t)}_hit_point(i){const t=new c.Selection;return o.point_in_poly(i.sx,i.sy,this.sx,this.sy)&&(t.add_to_selected_glyphs(this.model),t.view=this),t}}s.PatchView=r,r.__name__=\"PatchView\";class p extends n.XYGlyph{constructor(i){super(i)}static init_Patch(){this.prototype.default_view=r,this.mixins([h.LineScalar,h.FillScalar,h.HatchScalar])}}s.Patch=p,p.__name__=\"Patch\",p.init_Patch()},\n", | |
" function _(t,e,s,i,n){i();const a=t(1),r=t(24),h=t(118),_=a.__importStar(t(107)),l=a.__importStar(t(18)),o=t(59);class c extends h.AreaView{_index_data(t){const{min:e,max:s}=Math,{data_size:i}=this;for(let n=0;n<i;n++){const i=this._x1[n],a=this._x2[n],r=this._y[n];isNaN(i+a+r)||!isFinite(i+a+r)?t.add_empty():t.add(e(i,a),r,s(i,a),r)}}_inner(t,e,s,i,n){t.beginPath();for(let s=0,n=e.length;s<n;s++)t.lineTo(e[s],i[s]);for(let e=s.length-1;e>=0;e--)t.lineTo(s[e],i[e]);t.closePath(),n.call(t)}_render(t,e,s){const{sx1:i,sx2:n,sy:a}=null!=s?s:this;this.visuals.fill.doit&&(this.visuals.fill.set_value(t),this._inner(t,i,n,a,t.fill)),this.visuals.hatch.doit&&(this.visuals.hatch.set_value(t),this._inner(t,i,n,a,t.fill))}_hit_point(t){const e=this.sy.length,s=new r.ScreenArray(2*e),i=new r.ScreenArray(2*e);for(let t=0,n=e;t<n;t++)s[t]=this.sx1[t],i[t]=this.sy[t],s[e+t]=this.sx2[e-t-1],i[e+t]=this.sy[e-t-1];const n=new o.Selection;return _.point_in_poly(t.sx,t.sy,s,i)&&(n.add_to_selected_glyphs(this.model),n.view=this),n}scenterxy(t){return[(this.sx1[t]+this.sx2[t])/2,this.sy[t]]}_map_data(){this.sx1=this.renderer.xscale.v_compute(this._x1),this.sx2=this.renderer.xscale.v_compute(this._x2),this.sy=this.renderer.yscale.v_compute(this._y)}}s.HAreaView=c,c.__name__=\"HAreaView\";class d extends h.Area{constructor(t){super(t)}static init_HArea(){this.prototype.default_view=c,this.define((({})=>({x1:[l.XCoordinateSpec,{field:\"x1\"}],x2:[l.XCoordinateSpec,{field:\"x2\"}],y:[l.YCoordinateSpec,{field:\"y\"}]})))}}s.HArea=d,d.__name__=\"HArea\",d.init_HArea()},\n", | |
" function _(e,a,_,i,r){i();const s=e(1),n=e(98),t=e(106),c=s.__importStar(e(48));class l extends n.GlyphView{draw_legend_for_index(e,a,_){t.generic_area_scalar_legend(this.visuals,e,a)}}_.AreaView=l,l.__name__=\"AreaView\";class d extends n.Glyph{constructor(e){super(e)}static init_Area(){this.mixins([c.FillScalar,c.HatchScalar])}}_.Area=d,d.__name__=\"Area\",d.init_Area()},\n", | |
" function _(t,e,s,i,n){i();const a=t(1),r=t(24),h=t(118),_=a.__importStar(t(107)),l=a.__importStar(t(18)),o=t(59);class c extends h.AreaView{_index_data(t){const{min:e,max:s}=Math,{data_size:i}=this;for(let n=0;n<i;n++){const i=this._x[n],a=this._y1[n],r=this._y2[n];isNaN(i+a+r)||!isFinite(i+a+r)?t.add_empty():t.add(i,e(a,r),i,s(a,r))}}_inner(t,e,s,i,n){t.beginPath();for(let i=0,n=s.length;i<n;i++)t.lineTo(e[i],s[i]);for(let s=i.length-1;s>=0;s--)t.lineTo(e[s],i[s]);t.closePath(),n.call(t)}_render(t,e,s){const{sx:i,sy1:n,sy2:a}=null!=s?s:this;this.visuals.fill.doit&&(this.visuals.fill.set_value(t),this._inner(t,i,n,a,t.fill)),this.visuals.hatch.doit&&(this.visuals.hatch.set_value(t),this._inner(t,i,n,a,t.fill))}scenterxy(t){return[this.sx[t],(this.sy1[t]+this.sy2[t])/2]}_hit_point(t){const e=this.sx.length,s=new r.ScreenArray(2*e),i=new r.ScreenArray(2*e);for(let t=0,n=e;t<n;t++)s[t]=this.sx[t],i[t]=this.sy1[t],s[e+t]=this.sx[e-t-1],i[e+t]=this.sy2[e-t-1];const n=new o.Selection;return _.point_in_poly(t.sx,t.sy,s,i)&&(n.add_to_selected_glyphs(this.model),n.view=this),n}_map_data(){this.sx=this.renderer.xscale.v_compute(this._x),this.sy1=this.renderer.yscale.v_compute(this._y1),this.sy2=this.renderer.yscale.v_compute(this._y2)}}s.VAreaView=c,c.__name__=\"VAreaView\";class d extends h.Area{constructor(t){super(t)}static init_VArea(){this.prototype.default_view=c,this.define((({})=>({x:[l.XCoordinateSpec,{field:\"x\"}],y1:[l.YCoordinateSpec,{field:\"y1\"}],y2:[l.YCoordinateSpec,{field:\"y2\"}]})))}}s.VArea=d,d.__name__=\"VArea\",d.init_VArea()},\n", | |
" function _(i,e,s,t,n){t();const c=i(53),o=i(59),r=i(24),a=i(121),u=i(57);class _ extends c.Model{constructor(i){super(i)}static init_CDSView(){this.define((({Array:i,Ref:e})=>({filters:[i(e(a.Filter)),[]],source:[e(u.ColumnarDataSource)]}))),this.internal((({Int:i,Dict:e,Ref:s,Nullable:t})=>({indices:[s(r.Indices)],indices_map:[e(i),{}],masked:[t(s(r.Indices)),null]})))}initialize(){super.initialize(),this.compute_indices()}connect_signals(){super.connect_signals(),this.connect(this.properties.filters.change,(()=>this.compute_indices()));const i=()=>{const i=()=>this.compute_indices();null!=this.source&&(this.connect(this.source.change,i),this.source instanceof u.ColumnarDataSource&&(this.connect(this.source.streaming,i),this.connect(this.source.patching,i)))};let e=null!=this.source;e?i():this.connect(this.properties.source.change,(()=>{e||(i(),e=!0)}))}compute_indices(){var i;const{source:e}=this;if(null==e)return;const s=null!==(i=e.get_length())&&void 0!==i?i:1,t=r.Indices.all_set(s);for(const i of this.filters)t.intersect(i.compute_indices(e));this.indices=t,this._indices=[...t],this.indices_map_to_subset()}indices_map_to_subset(){this.indices_map={};for(let i=0;i<this._indices.length;i++)this.indices_map[this._indices[i]]=i}convert_selection_from_subset(i){const e=i.indices.map((i=>this._indices[i]));return new o.Selection(Object.assign(Object.assign({},i.attributes),{indices:e}))}convert_selection_to_subset(i){const e=i.indices.map((i=>this.indices_map[i]));return new o.Selection(Object.assign(Object.assign({},i.attributes),{indices:e}))}convert_indices_from_subset(i){return i.map((i=>this._indices[i]))}}s.CDSView=_,_.__name__=\"CDSView\",_.init_CDSView()},\n", | |
" function _(e,t,n,s,c){s();const o=e(53);class r extends o.Model{constructor(e){super(e)}}n.Filter=r,r.__name__=\"Filter\"},\n", | |
" function _(n,e,t,i,o){i();const s=n(9);async function c(n,e,t){const i=new n(Object.assign(Object.assign({},t),{model:e}));return i.initialize(),await i.lazy_initialize(),i}t.build_view=async function(n,e={parent:null},t=(n=>n.default_view)){const i=await c(t(n),n,e);return i.connect_signals(),i},t.build_views=async function(n,e,t={parent:null},i=(n=>n.default_view)){const o=s.difference([...n.keys()],e);for(const e of o)n.get(e).remove(),n.delete(e);const a=[],f=e.filter((e=>!n.has(e)));for(const e of f){const o=await c(i(e),e,t);n.set(e,o),a.push(o)}for(const n of a)n.connect_signals();return a},t.remove_views=function(n){for(const[e,t]of n)t.remove(),n.delete(e)}},\n", | |
" function _(e,r,n,t,i){t();const s=e(62),o=e(61),l=e(124),d=e(125),a=e(126),p=e(122),_=e(64),h=e(127),c=e(128),u=e(11);class y extends s.DataRendererView{get glyph_view(){return this.node_view.glyph}async lazy_initialize(){await super.lazy_initialize();const e=this.model;let r=null,n=null;const t=new class extends l.Expression{_v_compute(n){u.assert(null==r);const[t]=r=e.layout_provider.get_edge_coordinates(n);return t}},i=new class extends l.Expression{_v_compute(e){u.assert(null!=r);const[,n]=r;return r=null,n}},s=new class extends l.Expression{_v_compute(r){u.assert(null==n);const[t]=n=e.layout_provider.get_node_coordinates(r);return t}},o=new class extends l.Expression{_v_compute(e){u.assert(null!=n);const[,r]=n;return n=null,r}},{edge_renderer:d,node_renderer:a}=this.model;if(!(d.glyph instanceof h.MultiLine||d.glyph instanceof c.Patches))throw new Error(`${this}.edge_renderer.glyph must be a MultiLine glyph`);if(!(a.glyph instanceof _.XYGlyph))throw new Error(`${this}.node_renderer.glyph must be a XYGlyph glyph`);d.glyph.properties.xs.internal=!0,d.glyph.properties.ys.internal=!0,a.glyph.properties.x.internal=!0,a.glyph.properties.y.internal=!0,d.glyph.xs={expr:t},d.glyph.ys={expr:i},a.glyph.x={expr:s},a.glyph.y={expr:o};const{parent:y}=this;this.edge_view=await p.build_view(d,{parent:y}),this.node_view=await p.build_view(a,{parent:y})}connect_signals(){super.connect_signals(),this.connect(this.model.layout_provider.change,(()=>{this.edge_view.set_data(),this.node_view.set_data(),this.request_render()}))}remove(){this.edge_view.remove(),this.node_view.remove(),super.remove()}_render(){this.edge_view.render(),this.node_view.render()}renderer_view(e){if(e instanceof o.GlyphRenderer){if(e==this.edge_view.model)return this.edge_view;if(e==this.node_view.model)return this.node_view}return super.renderer_view(e)}}n.GraphRendererView=y,y.__name__=\"GraphRendererView\";class g extends s.DataRenderer{constructor(e){super(e)}static init_GraphRenderer(){this.prototype.default_view=y,this.define((({Ref:e})=>({layout_provider:[e(d.LayoutProvider)],node_renderer:[e(o.GlyphRenderer)],edge_renderer:[e(o.GlyphRenderer)],selection_policy:[e(a.GraphHitTestPolicy),()=>new a.NodesOnly],inspection_policy:[e(a.GraphHitTestPolicy),()=>new a.NodesOnly]})))}get_selection_manager(){return this.node_renderer.data_source.selection_manager}}n.GraphRenderer=g,g.__name__=\"GraphRenderer\",g.init_GraphRenderer()},\n", | |
" function _(e,t,s,n,i){n();const c=e(53);class l extends c.Model{constructor(e){super(e)}initialize(){super.initialize(),this._connected=new Set,this._result=new Map}v_compute(e){this._connected.has(e)||(this.connect(e.change,(()=>this._result.delete(e))),this.connect(e.patching,(()=>this._result.delete(e))),this.connect(e.streaming,(()=>this._result.delete(e))),this._connected.add(e));let t=this._result.get(e);return null==t&&(t=this._v_compute(e),this._result.set(e,t)),t}}s.Expression=l,l.__name__=\"Expression\";class h extends c.Model{constructor(e){super(e)}initialize(){super.initialize(),this._connected=new Set,this._result=new Map}compute(e){this._connected.has(e)||(this.connect(e.change,(()=>this._result.delete(e))),this.connect(e.patching,(()=>this._result.delete(e))),this.connect(e.streaming,(()=>this._result.delete(e))),this._connected.add(e));let t=this._result.get(e);return null==t&&(t=this._compute(e),this._result.set(e,t)),t}}s.ScalarExpression=h,h.__name__=\"ScalarExpression\"},\n", | |
" function _(o,e,r,t,n){t();const s=o(53);class c extends s.Model{constructor(o){super(o)}}r.LayoutProvider=c,c.__name__=\"LayoutProvider\"},\n", | |
" function _(e,t,d,n,s){n();const o=e(53),r=e(12),_=e(9),i=e(59);class c extends o.Model{constructor(e){super(e)}_hit_test(e,t,d){if(!t.model.visible)return null;const n=d.glyph.hit_test(e);return null==n?null:d.model.view.convert_selection_from_subset(n)}}d.GraphHitTestPolicy=c,c.__name__=\"GraphHitTestPolicy\";class a extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.edge_view)}do_selection(e,t,d,n){if(null==e)return!1;const s=t.edge_renderer.data_source.selected;return s.update(e,d,n),t.edge_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null==e)return!1;const{edge_renderer:o}=d.model,r=o.get_selection_manager().get_or_create_inspector(d.edge_view.model);return r.update(e,n,s),d.edge_view.model.data_source.setv({inspected:r},{silent:!0}),d.edge_view.model.data_source.inspect.emit([d.edge_view.model,{geometry:t}]),!r.is_empty()}}d.EdgesOnly=a,a.__name__=\"EdgesOnly\";class l extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.node_view)}do_selection(e,t,d,n){if(null==e)return!1;const s=t.node_renderer.data_source.selected;return s.update(e,d,n),t.node_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null==e)return!1;const{node_renderer:o}=d.model,r=o.get_selection_manager().get_or_create_inspector(d.node_view.model);return r.update(e,n,s),d.node_view.model.data_source.setv({inspected:r},{silent:!0}),d.node_view.model.data_source.inspect.emit([d.node_view.model,{geometry:t}]),!r.is_empty()}}d.NodesOnly=l,l.__name__=\"NodesOnly\";class u extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.node_view)}get_linked_edges(e,t,d){let n=[];\"selection\"==d?n=e.selected.indices.map((t=>e.data.index[t])):\"inspection\"==d&&(n=e.inspected.indices.map((t=>e.data.index[t])));const s=[];for(let e=0;e<t.data.start.length;e++)(_.contains(n,t.data.start[e])||_.contains(n,t.data.end[e]))&&s.push(e);const o=new i.Selection;for(const e of s)o.multiline_indices[e]=[0];return o.indices=s,o}do_selection(e,t,d,n){if(null==e)return!1;const s=t.node_renderer.data_source.selected;s.update(e,d,n);const o=t.edge_renderer.data_source.selected,r=this.get_linked_edges(t.node_renderer.data_source,t.edge_renderer.data_source,\"selection\");return o.update(r,d,n),t.node_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null==e)return!1;const o=d.node_view.model.data_source.selection_manager.get_or_create_inspector(d.node_view.model);o.update(e,n,s),d.node_view.model.data_source.setv({inspected:o},{silent:!0});const r=d.edge_view.model.data_source.selection_manager.get_or_create_inspector(d.edge_view.model),_=this.get_linked_edges(d.node_view.model.data_source,d.edge_view.model.data_source,\"inspection\");return r.update(_,n,s),d.edge_view.model.data_source.setv({inspected:r},{silent:!0}),d.node_view.model.data_source.inspect.emit([d.node_view.model,{geometry:t}]),!o.is_empty()}}d.NodesAndLinkedEdges=u,u.__name__=\"NodesAndLinkedEdges\";class m extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.edge_view)}get_linked_nodes(e,t,d){let n=[];\"selection\"==d?n=t.selected.indices:\"inspection\"==d&&(n=t.inspected.indices);const s=[];for(const e of n)s.push(t.data.start[e]),s.push(t.data.end[e]);const o=_.uniq(s).map((t=>r.indexOf(e.data.index,t)));return new i.Selection({indices:o})}do_selection(e,t,d,n){if(null==e)return!1;const s=t.edge_renderer.data_source.selected;s.update(e,d,n);const o=t.node_renderer.data_source.selected,r=this.get_linked_nodes(t.node_renderer.data_source,t.edge_renderer.data_source,\"selection\");return o.update(r,d,n),t.edge_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null==e)return!1;const o=d.edge_view.model.data_source.selection_manager.get_or_create_inspector(d.edge_view.model);o.update(e,n,s),d.edge_view.model.data_source.setv({inspected:o},{silent:!0});const r=d.node_view.model.data_source.selection_manager.get_or_create_inspector(d.node_view.model),_=this.get_linked_nodes(d.node_view.model.data_source,d.edge_view.model.data_source,\"inspection\");return r.update(_,n,s),d.node_view.model.data_source.setv({inspected:r},{silent:!0}),d.edge_view.model.data_source.inspect.emit([d.edge_view.model,{geometry:t}]),!o.is_empty()}}d.EdgesAndLinkedNodes=m,m.__name__=\"EdgesAndLinkedNodes\"},\n", | |
" function _(t,e,i,s,n){s();const o=t(1),r=t(65),l=t(48),_=o.__importStar(t(107)),c=o.__importStar(t(18)),h=t(12),a=t(13),d=t(98),x=t(106),y=t(59);class g extends d.GlyphView{_project_data(){r.inplace.project_xy(this._xs.array,this._ys.array)}_index_data(t){const{data_size:e}=this;for(let i=0;i<e;i++){const e=this._xs.get(i);if(0==e.length){t.add_empty();continue}const s=this._ys.get(i);if(0==s.length){t.add_empty();continue}const[n,o]=h.minmax(e),[r,l]=h.minmax(s);t.add(n,r,o,l)}}_render(t,e,i){const{sxs:s,sys:n}=null!=i?i:this;for(const i of e){const e=s.get(i),o=n.get(i);this.visuals.line.set_vectorize(t,i);for(let i=0,s=e.length;i<s;i++){const s=e[i],n=o[i];0!=i?isNaN(s+n)?(t.stroke(),t.beginPath()):t.lineTo(s,n):(t.beginPath(),t.moveTo(s,n))}t.stroke()}}_hit_point(t){const e={x:t.sx,y:t.sy};let i=9999;const s=new Map;for(let t=0,n=this.sxs.length;t<n;t++){const n=Math.max(2,this.line_width.get(t)/2),o=this.sxs.get(t),r=this.sys.get(t);let l=null;for(let t=0,s=o.length-1;t<s;t++){const s={x:o[t],y:r[t]},c={x:o[t+1],y:r[t+1]},h=_.dist_to_segment(e,s,c);h<n&&h<i&&(i=h,l=[t])}null!=l&&s.set(t,l)}return new y.Selection({indices:[...s.keys()],multiline_indices:a.to_object(s)})}_hit_span(t){const{sx:e,sy:i}=t;let s,n;\"v\"==t.direction?(s=this.renderer.yscale.invert(i),n=this._ys):(s=this.renderer.xscale.invert(e),n=this._xs);const o=new Map;for(let t=0,e=n.length;t<e;t++){const e=n.get(t),i=[];for(let t=0,n=e.length-1;t<n;t++)e[t]<=s&&s<=e[t+1]&&i.push(t);i.length>0&&o.set(t,i)}return new y.Selection({indices:[...o.keys()],multiline_indices:a.to_object(o)})}get_interpolation_hit(t,e,i){const s=this._xs.get(t),n=this._ys.get(t),o=s[e],r=n[e],l=s[e+1],_=n[e+1];return x.line_interpolation(this.renderer,i,o,r,l,_)}draw_legend_for_index(t,e,i){x.generic_line_vector_legend(this.visuals,t,e,i)}scenterxy(){throw new Error(`${this}.scenterxy() is not implemented`)}}i.MultiLineView=g,g.__name__=\"MultiLineView\";class u extends d.Glyph{constructor(t){super(t)}static init_MultiLine(){this.prototype.default_view=g,this.define((({})=>({xs:[c.XCoordinateSeqSpec,{field:\"xs\"}],ys:[c.YCoordinateSeqSpec,{field:\"ys\"}]}))),this.mixins(l.LineVector)}}i.MultiLine=u,u.__name__=\"MultiLine\",u.init_MultiLine()},\n", | |
" function _(e,t,s,i,n){i();const r=e(1),o=e(98),a=e(106),_=e(12),c=e(48),l=r.__importStar(e(107)),h=r.__importStar(e(18)),d=e(59),y=e(11),p=e(65);class x extends o.GlyphView{_project_data(){p.inplace.project_xy(this._xs.array,this._ys.array)}_index_data(e){const{data_size:t}=this;for(let s=0;s<t;s++){const t=this._xs.get(s),i=this._ys.get(s);if(0==t.length)e.add_empty();else{const[s,n]=_.minmax(t),[r,o]=_.minmax(i);e.add(s,r,n,o)}}}_mask_data(){const{x_range:e,y_range:t}=this.renderer.plot_view.frame;return this.index.indices({x0:e.min,x1:e.max,y0:t.min,y1:t.max})}_inner_loop(e,t,s,i){for(let n=0,r=t.length;n<r;n++)0!=n?isNaN(t[n]+s[n])?(e.closePath(),i.apply(e),e.beginPath()):e.lineTo(t[n],s[n]):(e.beginPath(),e.moveTo(t[n],s[n]));e.closePath(),i.call(e)}_render(e,t,s){const{sxs:i,sys:n}=null!=s?s:this;for(const s of t){const t=i.get(s),r=n.get(s);this.visuals.fill.doit&&(this.visuals.fill.set_vectorize(e,s),this._inner_loop(e,t,r,e.fill)),this.visuals.hatch.doit&&(this.visuals.hatch.set_vectorize(e,s),this._inner_loop(e,t,r,e.fill)),this.visuals.line.doit&&(this.visuals.line.set_vectorize(e,s),this._inner_loop(e,t,r,e.stroke))}}_hit_rect(e){const{sx0:t,sx1:s,sy0:i,sy1:n}=e,r=[t,s,s,t],o=[i,i,n,n],[a,_]=this.renderer.xscale.r_invert(t,s),[c,h]=this.renderer.yscale.r_invert(i,n),y=this.index.indices({x0:a,x1:_,y0:c,y1:h}),p=[];for(const e of y){const t=this.sxs.get(e),s=this.sys.get(e);let i=!0;for(let e=0,n=t.length;e<n;e++){const n=t[e],a=s[e];if(!l.point_in_poly(n,a,r,o)){i=!1;break}}i&&p.push(e)}return new d.Selection({indices:p})}_hit_point(e){const{sx:t,sy:s}=e,i=this.renderer.xscale.invert(t),n=this.renderer.yscale.invert(s),r=this.index.indices({x0:i,y0:n,x1:i,y1:n}),o=[];for(const e of r){const i=this.sxs.get(e),n=this.sys.get(e),r=i.length;for(let a=0,_=0;;_++){if(isNaN(i[_])||_==r){const r=i.subarray(a,_),c=n.subarray(a,_);if(l.point_in_poly(t,s,r,c)){o.push(e);break}a=_+1}if(_==r)break}}return new d.Selection({indices:o})}_get_snap_coord(e){return _.sum(e)/e.length}scenterxy(e,t,s){const i=this.sxs.get(e),n=this.sys.get(e),r=i.length;let o=!1;for(let e=0,a=0;;a++){const _=isNaN(i[a]);if(o=o||_,a==r&&!o){return[this._get_snap_coord(i),this._get_snap_coord(n)]}if(_||a==r){const r=i.subarray(e,a),o=n.subarray(e,a);if(l.point_in_poly(t,s,r,o)){return[this._get_snap_coord(r),this._get_snap_coord(o)]}e=a+1}if(a==r)break}y.unreachable()}draw_legend_for_index(e,t,s){a.generic_area_vector_legend(this.visuals,e,t,s)}}s.PatchesView=x,x.__name__=\"PatchesView\";class f extends o.Glyph{constructor(e){super(e)}static init_Patches(){this.prototype.default_view=x,this.define((({})=>({xs:[h.XCoordinateSeqSpec,{field:\"xs\"}],ys:[h.YCoordinateSeqSpec,{field:\"ys\"}]}))),this.mixins([c.LineVector,c.FillVector,c.HatchVector])}}s.Patches=f,f.__name__=\"Patches\",f.init_Patches()},\n", | |
" function _(e,t,n,s,o){s();const r=e(53);class c extends r.Model{do_selection(e,t,n,s){return null!=e&&(t.selected.update(e,n,s),t._select.emit(),!t.selected.is_empty())}}n.SelectionPolicy=c,c.__name__=\"SelectionPolicy\";class l extends c{hit_test(e,t){const n=[];for(const s of t){const t=s.hit_test(e);null!=t&&n.push(t)}if(n.length>0){const e=n[0];for(const t of n)e.update_through_intersection(t);return e}return null}}n.IntersectRenderers=l,l.__name__=\"IntersectRenderers\";class _ extends c{hit_test(e,t){const n=[];for(const s of t){const t=s.hit_test(e);null!=t&&n.push(t)}if(n.length>0){const e=n[0];for(const t of n)e.update_through_union(t);return e}return null}}n.UnionRenderers=_,_.__name__=\"UnionRenderers\"},\n", | |
" function _(t,n,e,s,o){s();const r=t(1),i=t(57),l=t(8),c=t(13),a=r.__importStar(t(131)),u=t(132),h=t(35);function d(t,n,e){if(l.isArray(t)){const s=t.concat(n);return null!=e&&s.length>e?s.slice(-e):s}if(l.isTypedArray(t)){const s=t.length+n.length;if(null!=e&&s>e){const o=s-e,r=t.length;let i;t.length<e?(i=new t.constructor(e),i.set(t,0)):i=t;for(let t=o,n=r;t<n;t++)i[t-o]=i[t];for(let t=0,e=n.length;t<e;t++)i[t+(r-o)]=n[t];return i}{const e=new t.constructor(n);return a.concat(t,e)}}throw new Error(\"unsupported array types\")}function f(t,n){let e,s,o;return l.isNumber(t)?(e=t,o=t+1,s=1):(e=null!=t.start?t.start:0,o=null!=t.stop?t.stop:n,s=null!=t.step?t.step:1),[e,o,s]}function m(t,n){const e=new Set;let s=!1;for(const[o,r]of n){let n,i,c,a;if(l.isArray(o)){const[s]=o;e.add(s),n=t[s].shape,i=t[s],a=r,2===o.length?(n=[1,n[0]],c=[o[0],0,o[1]]):c=o}else l.isNumber(o)?(a=[r],e.add(o)):(a=r,s=!0),c=[0,0,o],n=[1,t.length],i=t;let u=0;const[h,d,m]=f(c[1],n[0]),[_,p,g]=f(c[2],n[1]);for(let t=h;t<d;t+=m)for(let o=_;o<p;o+=g)s&&e.add(o),i[t*n[1]+o]=a[u],u++}return e}e.stream_to_column=d,e.slice=f,e.patch_to_column=m;class _ extends i.ColumnarDataSource{constructor(t){super(t)}static init_ColumnDataSource(){this.define((({Dict:t,Any:n})=>({data:[t(n),{}]})))}stream(t,n,e){const{data:s}=this;for(const[e,o]of c.entries(t))s[e]=d(s[e],o,n);if(this.setv({data:s},{silent:!0}),this.streaming.emit(),null!=this.document){const s=new h.ColumnsStreamedEvent(this.document,this.ref(),t,n);this.document._notify_change(this,\"data\",null,null,{setter_id:e,hint:s})}}patch(t,n){const{data:e}=this;let s=new Set;for(const[n,o]of c.entries(t))s=u.union(s,m(e[n],o));if(this.setv({data:e},{silent:!0}),this.patching.emit([...s]),null!=this.document){const e=new h.ColumnsPatchedEvent(this.document,this.ref(),t);this.document._notify_change(this,\"data\",null,null,{setter_id:n,hint:e})}}}e.ColumnDataSource=_,_.__name__=\"ColumnDataSource\",_.init_ColumnDataSource()},\n", | |
" function _(t,n,o,e,c){e(),o.concat=function(t,...n){let o=t.length;for(const t of n)o+=t.length;const e=new t.constructor(o);e.set(t,0);let c=t.length;for(const t of n)e.set(t,c),c+=t.length;return e}},\n", | |
" function _(n,o,t,e,f){function c(...n){const o=new Set;for(const t of n)for(const n of t)o.add(n);return o}e(),t.union=c,t.intersection=function(n,...o){const t=new Set;n:for(const e of n){for(const n of o)if(!n.has(e))continue n;t.add(e)}return t},t.difference=function(n,...o){const t=new Set(n);for(const n of c(...o))t.delete(n);return t}},\n", | |
" function _(e,i,t,s,o){s();const n=e(1),a=e(53),l=e(42),r=n.__importStar(e(45)),_=e(48),c=n.__importStar(e(18));class d extends l.View{initialize(){super.initialize(),this.visuals=new r.Visuals(this)}request_render(){this.parent.request_render()}get canvas(){return this.parent.canvas}set_data(e){const i=this;for(const t of this.model){if(!(t instanceof c.VectorSpec||t instanceof c.ScalarSpec))continue;const s=t.uniform(e);i[`${t.attr}`]=s}}}t.ArrowHeadView=d,d.__name__=\"ArrowHeadView\";class h extends a.Model{constructor(e){super(e)}static init_ArrowHead(){this.define((()=>({size:[c.NumberSpec,25]})))}}t.ArrowHead=h,h.__name__=\"ArrowHead\",h.init_ArrowHead();class v extends d{clip(e,i){this.visuals.line.set_vectorize(e,i);const t=this.size.get(i);e.moveTo(.5*t,t),e.lineTo(.5*t,-2),e.lineTo(-.5*t,-2),e.lineTo(-.5*t,t),e.lineTo(0,0),e.lineTo(.5*t,t)}render(e,i){if(this.visuals.line.doit){this.visuals.line.set_vectorize(e,i);const t=this.size.get(i);e.beginPath(),e.moveTo(.5*t,t),e.lineTo(0,0),e.lineTo(-.5*t,t),e.stroke()}}}t.OpenHeadView=v,v.__name__=\"OpenHeadView\";class u extends h{constructor(e){super(e)}static init_OpenHead(){this.prototype.default_view=v,this.mixins(_.LineVector)}}t.OpenHead=u,u.__name__=\"OpenHead\",u.init_OpenHead();class m extends d{clip(e,i){this.visuals.line.set_vectorize(e,i);const t=this.size.get(i);e.moveTo(.5*t,t),e.lineTo(.5*t,-2),e.lineTo(-.5*t,-2),e.lineTo(-.5*t,t),e.lineTo(.5*t,t)}render(e,i){this.visuals.fill.doit&&(this.visuals.fill.set_vectorize(e,i),this._normal(e,i),e.fill()),this.visuals.line.doit&&(this.visuals.line.set_vectorize(e,i),this._normal(e,i),e.stroke())}_normal(e,i){const t=this.size.get(i);e.beginPath(),e.moveTo(.5*t,t),e.lineTo(0,0),e.lineTo(-.5*t,t),e.closePath()}}t.NormalHeadView=m,m.__name__=\"NormalHeadView\";class T extends h{constructor(e){super(e)}static init_NormalHead(){this.prototype.default_view=m,this.mixins([_.LineVector,_.FillVector]),this.override({fill_color:\"black\"})}}t.NormalHead=T,T.__name__=\"NormalHead\",T.init_NormalHead();class p extends d{clip(e,i){this.visuals.line.set_vectorize(e,i);const t=this.size.get(i);e.moveTo(.5*t,t),e.lineTo(.5*t,-2),e.lineTo(-.5*t,-2),e.lineTo(-.5*t,t),e.lineTo(0,.5*t),e.lineTo(.5*t,t)}render(e,i){this.visuals.fill.doit&&(this.visuals.fill.set_vectorize(e,i),this._vee(e,i),e.fill()),this.visuals.line.doit&&(this.visuals.line.set_vectorize(e,i),this._vee(e,i),e.stroke())}_vee(e,i){const t=this.size.get(i);e.beginPath(),e.moveTo(.5*t,t),e.lineTo(0,0),e.lineTo(-.5*t,t),e.lineTo(0,.5*t),e.closePath()}}t.VeeHeadView=p,p.__name__=\"VeeHeadView\";class H extends h{constructor(e){super(e)}static init_VeeHead(){this.prototype.default_view=p,this.mixins([_.LineVector,_.FillVector]),this.override({fill_color:\"black\"})}}t.VeeHead=H,H.__name__=\"VeeHead\",H.init_VeeHead();class V extends d{render(e,i){if(this.visuals.line.doit){this.visuals.line.set_vectorize(e,i);const t=this.size.get(i);e.beginPath(),e.moveTo(.5*t,0),e.lineTo(-.5*t,0),e.stroke()}}clip(e,i){}}t.TeeHeadView=V,V.__name__=\"TeeHeadView\";class f extends h{constructor(e){super(e)}static init_TeeHead(){this.prototype.default_view=V,this.mixins(_.LineVector)}}t.TeeHead=f,f.__name__=\"TeeHead\",f.init_TeeHead()},\n", | |
" function _(s,e,i,t,l){t();const _=s(1),o=s(135),r=_.__importStar(s(48));class h extends o.UpperLowerView{paint(s){s.beginPath(),s.moveTo(this._lower_sx[0],this._lower_sy[0]);for(let e=0,i=this._lower_sx.length;e<i;e++)s.lineTo(this._lower_sx[e],this._lower_sy[e]);for(let e=this._upper_sx.length-1;e>=0;e--)s.lineTo(this._upper_sx[e],this._upper_sy[e]);s.closePath(),this.visuals.fill.doit&&(this.visuals.fill.set_value(s),s.fill()),s.beginPath(),s.moveTo(this._lower_sx[0],this._lower_sy[0]);for(let e=0,i=this._lower_sx.length;e<i;e++)s.lineTo(this._lower_sx[e],this._lower_sy[e]);this.visuals.line.doit&&(this.visuals.line.set_value(s),s.stroke()),s.beginPath(),s.moveTo(this._upper_sx[0],this._upper_sy[0]);for(let e=0,i=this._upper_sx.length;e<i;e++)s.lineTo(this._upper_sx[e],this._upper_sy[e]);this.visuals.line.doit&&(this.visuals.line.set_value(s),s.stroke())}}i.BandView=h,h.__name__=\"BandView\";class n extends o.UpperLower{constructor(s){super(s)}static init_Band(){this.prototype.default_view=h,this.mixins([r.Line,r.Fill]),this.override({fill_color:\"#fff9ba\",fill_alpha:.4,line_color:\"#cccccc\",line_alpha:.3})}}i.Band=n,n.__name__=\"Band\",n.init_Band()},\n", | |
" function _(e,t,i,s,o){s();const r=e(1),p=e(56),n=e(20),_=r.__importStar(e(18));class a extends p.DataAnnotationView{map_data(){const{frame:e}=this.plot_view,t=this.model.dimension,i=this.coordinates.x_scale,s=this.coordinates.y_scale,o=\"height\"==t?s:i,r=\"height\"==t?i:s,p=\"height\"==t?e.bbox.yview:e.bbox.xview,n=\"height\"==t?e.bbox.xview:e.bbox.yview;let _,a,h;_=\"data\"==this.model.properties.lower.units?o.v_compute(this._lower):p.v_compute(this._lower),a=\"data\"==this.model.properties.upper.units?o.v_compute(this._upper):p.v_compute(this._upper),h=\"data\"==this.model.properties.base.units?r.v_compute(this._base):n.v_compute(this._base);const[d,c]=\"height\"==t?[1,0]:[0,1],u=[_,h],l=[a,h];this._lower_sx=u[d],this._lower_sy=u[c],this._upper_sx=l[d],this._upper_sy=l[c]}}i.UpperLowerView=a,a.__name__=\"UpperLowerView\";class h extends _.CoordinateSpec{get dimension(){return\"width\"==this.obj.dimension?\"x\":\"y\"}get units(){var e;return null!==(e=this.spec.units)&&void 0!==e?e:\"data\"}}i.XOrYCoordinateSpec=h,h.__name__=\"XOrYCoordinateSpec\";class d extends p.DataAnnotation{constructor(e){super(e)}static init_UpperLower(){this.define((()=>({dimension:[n.Dimension,\"height\"],lower:[h,{field:\"lower\"}],upper:[h,{field:\"upper\"}],base:[h,{field:\"base\"}]})))}}i.UpperLower=d,d.__name__=\"UpperLower\",d.init_UpperLower()},\n", | |
" function _(t,i,o,n,e){n();const s=t(1),l=t(40),a=s.__importStar(t(48)),r=t(20),h=t(99);o.EDGE_TOLERANCE=2.5;class u extends l.AnnotationView{constructor(){super(...arguments),this.bbox=new h.BBox}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()=>this.request_render()))}_render(){const{left:t,right:i,top:o,bottom:n}=this.model;if(null==t&&null==i&&null==o&&null==n)return;const{frame:e}=this.plot_view,s=this.coordinates.x_scale,l=this.coordinates.y_scale,a=(t,i,o,n,e)=>{let s;return s=null!=t?this.model.screen?t:\"data\"==i?o.compute(t):n.compute(t):e,s};this.bbox=new h.BBox({left:a(t,this.model.left_units,s,e.bbox.xview,e.bbox.left),right:a(i,this.model.right_units,s,e.bbox.xview,e.bbox.right),top:a(o,this.model.top_units,l,e.bbox.yview,e.bbox.top),bottom:a(n,this.model.bottom_units,l,e.bbox.yview,e.bbox.bottom)}),this._paint_box()}_paint_box(){const{ctx:t}=this.layer;t.save();const{left:i,top:o,width:n,height:e}=this.bbox;t.beginPath(),t.rect(i,o,n,e),this.visuals.fill.doit&&(this.visuals.fill.set_value(t),t.fill()),this.visuals.hatch.doit&&(this.visuals.hatch.set_value(t),t.fill()),this.visuals.line.doit&&(this.visuals.line.set_value(t),t.stroke()),t.restore()}interactive_bbox(){const t=this.model.line_width+o.EDGE_TOLERANCE;return this.bbox.grow_by(t)}interactive_hit(t,i){if(null==this.model.in_cursor)return!1;return this.interactive_bbox().contains(t,i)}cursor(t,i){const{left:o,right:n,bottom:e,top:s}=this.bbox;return Math.abs(t-o)<3||Math.abs(t-n)<3?this.model.ew_cursor:Math.abs(i-e)<3||Math.abs(i-s)<3?this.model.ns_cursor:this.bbox.contains(t,i)?this.model.in_cursor:null}}o.BoxAnnotationView=u,u.__name__=\"BoxAnnotationView\";class c extends l.Annotation{constructor(t){super(t)}static init_BoxAnnotation(){this.prototype.default_view=u,this.mixins([a.Line,a.Fill,a.Hatch]),this.define((({Number:t,Nullable:i})=>({top:[i(t),null],top_units:[r.SpatialUnits,\"data\"],bottom:[i(t),null],bottom_units:[r.SpatialUnits,\"data\"],left:[i(t),null],left_units:[r.SpatialUnits,\"data\"],right:[i(t),null],right_units:[r.SpatialUnits,\"data\"],render_mode:[r.RenderMode,\"canvas\"]}))),this.internal((({Boolean:t,String:i,Nullable:o})=>({screen:[t,!1],ew_cursor:[o(i),null],ns_cursor:[o(i),null],in_cursor:[o(i),null]}))),this.override({fill_color:\"#fff9ba\",fill_alpha:.4,line_color:\"#cccccc\",line_alpha:.3})}update({left:t,right:i,top:o,bottom:n}){this.setv({left:t,right:i,top:o,bottom:n,screen:!0})}}o.BoxAnnotation=c,c.__name__=\"BoxAnnotation\",c.init_BoxAnnotation()},\n", | |
" function _(t,e,i,a,n){a();const o=t(1),r=t(40),s=t(138),l=t(144),_=t(162),c=t(165),h=t(198),u=t(166),p=t(205),m=t(169),g=t(203),d=t(202),f=t(209),w=t(217),b=t(220),v=t(20),y=o.__importStar(t(48)),k=t(9),x=t(221),C=t(222),j=t(225),z=t(140),L=t(11),S=t(122),M=t(8);class T extends r.AnnotationView{get orientation(){return this._orientation}initialize(){super.initialize();const{ticker:t,formatter:e,color_mapper:i}=this.model;this._ticker=\"auto\"!=t?t:(()=>{switch(!0){case i instanceof f.LogColorMapper:return new h.LogTicker;case i instanceof f.ScanningColorMapper:return new h.BinnedTicker({mapper:i});case i instanceof f.CategoricalColorMapper:return new h.CategoricalTicker;default:return new h.BasicTicker}})(),this._formatter=\"auto\"!=e?e:(()=>{switch(!0){case this._ticker instanceof h.LogTicker:return new p.LogTickFormatter;case i instanceof f.CategoricalColorMapper:return new p.CategoricalTickFormatter;default:return new p.BasicTickFormatter}})(),this._major_range=(()=>{if(i instanceof f.CategoricalColorMapper){const{factors:t}=i;return new b.FactorRange({factors:t})}if(i instanceof d.ContinuousColorMapper){const{min:t,max:e}=i.metrics;return new b.Range1d({start:t,end:e})}L.unreachable()})(),this._major_scale=(()=>{if(i instanceof f.LinearColorMapper)return new w.LinearScale;if(i instanceof f.LogColorMapper)return new w.LogScale;if(i instanceof f.ScanningColorMapper){const{binning:t}=i.metrics;return new w.LinearInterpolationScale({binning:t})}if(i instanceof f.CategoricalColorMapper)return new w.CategoricalScale;L.unreachable()})(),this._minor_range=new b.Range1d({start:0,end:1}),this._minor_scale=new w.LinearScale;const a=y.attrs_of(this.model,\"major_label_\",y.Text,!0),n=y.attrs_of(this.model,\"major_tick_\",y.Line,!0),o=y.attrs_of(this.model,\"minor_tick_\",y.Line,!0),r=y.attrs_of(this.model,\"title_\",y.Text),l=i instanceof f.CategoricalColorMapper?_.CategoricalAxis:i instanceof f.LogColorMapper?_.LogAxis:_.LinearAxis;this._axis=new l(Object.assign(Object.assign(Object.assign({ticker:this._ticker,formatter:this._formatter,major_tick_in:this.model.major_tick_in,major_tick_out:this.model.major_tick_out,minor_tick_in:this.model.minor_tick_in,minor_tick_out:this.model.minor_tick_out,major_label_standoff:this.model.label_standoff,major_label_overrides:this.model.major_label_overrides,major_label_policy:this.model.major_label_policy,axis_line_color:null},a),n),o));const{title:c}=this.model;c&&(this._title=new s.Title(Object.assign({text:c,standoff:this.model.title_standoff},r)))}async lazy_initialize(){await super.lazy_initialize();const t=this,e={get parent(){return t.parent},get root(){return t.root},get frame(){return t._frame},get canvas_view(){return t.parent.canvas_view},request_layout(){t.parent.request_layout()}};this._axis_view=await S.build_view(this._axis,{parent:e}),null!=this._title&&(this._title_view=await S.build_view(this._title,{parent:e}))}remove(){var t;null===(t=this._title_view)||void 0===t||t.remove(),this._axis_view.remove(),super.remove()}connect_signals(){super.connect_signals(),this.connect(this._ticker.change,(()=>this.request_render())),this.connect(this._formatter.change,(()=>this.request_render())),this.connect(this.model.color_mapper.metrics_change,(()=>{const t=this._major_range,e=this._major_scale,{color_mapper:i}=this.model;if(i instanceof d.ContinuousColorMapper&&t instanceof b.Range1d){const{min:e,max:a}=i.metrics;t.setv({start:e,end:a})}if(i instanceof f.ScanningColorMapper&&e instanceof w.LinearInterpolationScale){const{binning:t}=i.metrics;e.binning=t}this._set_canvas_image(),this.plot_view.request_layout()}))}_set_canvas_image(){const{orientation:t}=this,e=(()=>{const{palette:e}=this.model.color_mapper;return\"vertical\"==t?k.reversed(e):e})(),[i,a]=\"vertical\"==t?[1,e.length]:[e.length,1],n=this._image=document.createElement(\"canvas\");n.width=i,n.height=a;const o=n.getContext(\"2d\"),r=o.getImageData(0,0,i,a),s=new f.LinearColorMapper({palette:e}).rgba_mapper.v_compute(k.range(0,e.length));r.data.set(s),o.putImageData(r,0,0)}update_layout(){const{location:t,width:e,height:i,padding:a,margin:n}=this.model,[o,r]=(()=>{if(!M.isString(t))return[\"end\",\"start\"];switch(t){case\"top_left\":return[\"start\",\"start\"];case\"top\":case\"top_center\":return[\"start\",\"center\"];case\"top_right\":return[\"start\",\"end\"];case\"bottom_left\":return[\"end\",\"start\"];case\"bottom\":case\"bottom_center\":return[\"end\",\"center\"];case\"bottom_right\":return[\"end\",\"end\"];case\"left\":case\"center_left\":return[\"center\",\"start\"];case\"center\":case\"center_center\":return[\"center\",\"center\"];case\"right\":case\"center_right\":return[\"center\",\"end\"]}})(),s=this._orientation=(()=>{const{orientation:t}=this.model;return\"auto\"==t?null!=this.panel?this.panel.is_horizontal?\"horizontal\":\"vertical\":\"start\"==r||\"end\"==r||\"center\"==r&&\"center\"==o?\"vertical\":\"horizontal\":t})(),_=new C.NodeLayout,c=new C.VStack,h=new C.VStack,u=new C.HStack,p=new C.HStack;_.absolute=!0,c.absolute=!0,h.absolute=!0,u.absolute=!0,p.absolute=!0;const[m,g,d,f]=(()=>\"horizontal\"==s?[this._major_scale,this._minor_scale,this._major_range,this._minor_range]:[this._minor_scale,this._major_scale,this._minor_range,this._major_range])();this._frame=new l.CartesianFrame(m,g,d,f),_.on_resize((t=>this._frame.set_geometry(t)));const w=new j.BorderLayout;this._inner_layout=w,w.absolute=!0,w.center_panel=_,w.top_panel=c,w.bottom_panel=h,w.left_panel=u,w.right_panel=p;const b={left:a,right:a,top:a,bottom:a},v=(()=>{if(null==this.panel){if(M.isString(t))return{left:n,right:n,top:n,bottom:n};{const[e,i]=t;return{left:e,right:n,top:n,bottom:i}}}if(!M.isString(t)){const[e,i]=t;return{left:e,right:0,top:0,bottom:i}}})();let y,k,L,S;if(w.padding=b,null!=this.panel?(y=\"max\",k=void 0,L=void 0,S=void 0):\"auto\"==(\"horizontal\"==s?e:i)?(y=\"fixed\",k=25*this.model.color_mapper.palette.length,L={percent:.3},S={percent:.8}):(y=\"fit\",k=void 0),\"horizontal\"==s){const t=\"auto\"==e?void 0:e,a=\"auto\"==i?25:i;w.set_sizing({width_policy:y,height_policy:\"min\",width:k,min_width:L,max_width:S,halign:r,valign:o,margin:v}),w.center_panel.set_sizing({width_policy:\"auto\"==e?\"fit\":\"fixed\",height_policy:\"fixed\",width:t,height:a})}else{const t=\"auto\"==e?25:e,a=\"auto\"==i?void 0:i;w.set_sizing({width_policy:\"min\",height_policy:y,height:k,min_height:L,max_height:S,halign:r,valign:o,margin:v}),w.center_panel.set_sizing({width_policy:\"fixed\",height_policy:\"auto\"==i?\"fit\":\"fixed\",width:t,height:a})}c.set_sizing({width_policy:\"fit\",height_policy:\"min\"}),h.set_sizing({width_policy:\"fit\",height_policy:\"min\"}),u.set_sizing({width_policy:\"min\",height_policy:\"fit\"}),p.set_sizing({width_policy:\"min\",height_policy:\"fit\"});const{_title_view:T}=this;null!=T&&(\"horizontal\"==s?(T.panel=new z.Panel(\"above\"),T.update_layout(),c.children.push(T.layout)):(T.panel=new z.Panel(\"left\"),T.update_layout(),u.children.push(T.layout)));const{panel:B}=this,A=null!=B&&s==B.orientation?B.side:\"horizontal\"==s?\"below\":\"right\",O=(()=>{switch(A){case\"above\":return c;case\"below\":return h;case\"left\":return u;case\"right\":return p}})(),{_axis_view:R}=this;if(R.panel=new z.Panel(A),R.update_layout(),O.children.push(R.layout),null!=this.panel){const t=new x.Grid([{layout:w,row:0,col:0}]);t.absolute=!0,\"horizontal\"==s?t.set_sizing({width_policy:\"max\",height_policy:\"min\"}):t.set_sizing({width_policy:\"min\",height_policy:\"max\"}),this.layout=t}else this.layout=this._inner_layout;const{visible:F}=this.model;this.layout.sizing.visible=F,this._set_canvas_image()}_render(){var t;const{ctx:e}=this.layer;e.save(),this._paint_bbox(e,this._inner_layout.bbox),this._paint_image(e,this._inner_layout.center_panel.bbox),null===(t=this._title_view)||void 0===t||t.render(),this._axis_view.render(),e.restore()}_paint_bbox(t,e){const{x:i,y:a}=e;let{width:n,height:o}=e;i+n>=this.parent.canvas_view.bbox.width&&(n-=1),a+o>=this.parent.canvas_view.bbox.height&&(o-=1),t.save(),this.visuals.background_fill.doit&&(this.visuals.background_fill.set_value(t),t.fillRect(i,a,n,o)),this.visuals.border_line.doit&&(this.visuals.border_line.set_value(t),t.strokeRect(i,a,n,o)),t.restore()}_paint_image(t,e){const{x:i,y:a,width:n,height:o}=e;t.save(),t.setImageSmoothingEnabled(!1),t.globalAlpha=this.model.scale_alpha,t.drawImage(this._image,i,a,n,o),this.visuals.bar_line.doit&&(this.visuals.bar_line.set_value(t),t.strokeRect(i,a,n,o)),t.restore()}serializable_state(){const t=super.serializable_state(),{children:e=[]}=t,i=o.__rest(t,[\"children\"]);return null!=this._title_view&&e.push(this._title_view.serializable_state()),e.push(this._axis_view.serializable_state()),Object.assign(Object.assign({},i),{children:e})}}i.ColorBarView=T,T.__name__=\"ColorBarView\";class B extends r.Annotation{constructor(t){super(t)}static init_ColorBar(){this.prototype.default_view=T,this.mixins([[\"major_label_\",y.Text],[\"title_\",y.Text],[\"major_tick_\",y.Line],[\"minor_tick_\",y.Line],[\"border_\",y.Line],[\"bar_\",y.Line],[\"background_\",y.Fill]]),this.define((({Alpha:t,Number:e,String:i,Tuple:a,Dict:n,Or:o,Ref:r,Auto:s,Nullable:l})=>({location:[o(v.Anchor,a(e,e)),\"top_right\"],orientation:[o(v.Orientation,s),\"auto\"],title:[l(i),null],title_standoff:[e,2],width:[o(e,s),\"auto\"],height:[o(e,s),\"auto\"],scale_alpha:[t,1],ticker:[o(r(c.Ticker),s),\"auto\"],formatter:[o(r(u.TickFormatter),s),\"auto\"],major_label_overrides:[n(i),{}],major_label_policy:[r(m.LabelingPolicy),()=>new m.NoOverlap],color_mapper:[r(g.ColorMapper)],label_standoff:[e,5],margin:[e,30],padding:[e,10],major_tick_in:[e,5],major_tick_out:[e,0],minor_tick_in:[e,0],minor_tick_out:[e,0]}))),this.override({background_fill_color:\"#ffffff\",background_fill_alpha:.95,bar_line_color:null,border_line_color:null,major_label_text_font_size:\"11px\",major_tick_line_color:\"#ffffff\",minor_tick_line_color:null,title_text_font_size:\"13px\",title_text_font_style:\"italic\"})}}i.ColorBar=B,B.__name__=\"ColorBar\",B.init_ColorBar()},\n", | |
" function _(t,e,i,s,l){s();const o=t(1),a=t(139),n=t(20),r=t(143),c=o.__importStar(t(48));class h extends a.TextAnnotationView{_get_location(){const t=this.model.offset,e=this.model.standoff/2;let i,s;const{bbox:l}=this.layout;switch(this.panel.side){case\"above\":case\"below\":switch(this.model.vertical_align){case\"top\":s=l.top+e;break;case\"middle\":s=l.vcenter;break;case\"bottom\":s=l.bottom-e}switch(this.model.align){case\"left\":i=l.left+t;break;case\"center\":i=l.hcenter;break;case\"right\":i=l.right-t}break;case\"left\":switch(this.model.vertical_align){case\"top\":i=l.left+e;break;case\"middle\":i=l.hcenter;break;case\"bottom\":i=l.right-e}switch(this.model.align){case\"left\":s=l.bottom-t;break;case\"center\":s=l.vcenter;break;case\"right\":s=l.top+t}break;case\"right\":switch(this.model.vertical_align){case\"top\":i=l.right-e;break;case\"middle\":i=l.hcenter;break;case\"bottom\":i=l.left+e}switch(this.model.align){case\"left\":s=l.top+t;break;case\"center\":s=l.vcenter;break;case\"right\":s=l.bottom-t}}return[i,s]}_render(){const{text:t}=this.model;if(null==t||0==t.length)return;this.model.text_baseline=this.model.vertical_align,this.model.text_align=this.model.align;const[e,i]=this._get_location(),s=this.panel.get_label_angle_heuristic(\"parallel\");(\"canvas\"==this.model.render_mode?this._canvas_text.bind(this):this._css_text.bind(this))(this.layer.ctx,t,e,i,s)}_get_size(){const{text:t}=this.model;if(null==t||0==t.length)return{width:0,height:0};{const{ctx:e}=this.layer;this.visuals.text.set_value(e);const{width:i}=this.layer.ctx.measureText(t),{height:s}=r.font_metrics(e.font);return{width:i,height:2+s*this.model.text_line_height+this.model.standoff}}}}i.TitleView=h,h.__name__=\"TitleView\";class _ extends a.TextAnnotation{constructor(t){super(t)}static init_Title(){this.prototype.default_view=h,this.mixins([c.Text,[\"border_\",c.Line],[\"background_\",c.Fill]]),this.define((({Number:t,String:e})=>({text:[e,\"\"],vertical_align:[n.VerticalAlign,\"bottom\"],align:[n.TextAlign,\"left\"],offset:[t,0],standoff:[t,10]}))),this.prototype._props.text_align.options.internal=!0,this.prototype._props.text_baseline.options.internal=!0,this.override({text_font_size:\"13px\",text_font_style:\"bold\",text_line_height:1,background_fill_color:null,border_line_color:null})}}i.Title=_,_.__name__=\"Title\",_.init_Title()},\n", | |
" function _(e,t,s,i,n){i();const l=e(40),a=e(43),o=e(20),r=e(140),d=e(143),c=e(11);class _ extends l.AnnotationView{update_layout(){const{panel:e}=this;this.layout=null!=e?new r.SideLayout(e,(()=>this.get_size()),!0):void 0}initialize(){super.initialize(),\"css\"==this.model.render_mode&&(this.el=a.div(),this.plot_view.canvas_view.add_overlay(this.el))}remove(){null!=this.el&&a.remove(this.el),super.remove()}connect_signals(){super.connect_signals(),\"css\"==this.model.render_mode?this.connect(this.model.change,(()=>this.render())):this.connect(this.model.change,(()=>this.request_render()))}render(){this.model.visible||\"css\"!=this.model.render_mode||a.undisplay(this.el),super.render()}_calculate_text_dimensions(e,t){const{width:s}=e.measureText(t),{height:i}=d.font_metrics(this.visuals.text.font_value());return[s,i]}_calculate_bounding_box_dimensions(e,t){const[s,i]=this._calculate_text_dimensions(e,t);let n,l;switch(e.textAlign){case\"left\":n=0;break;case\"center\":n=-s/2;break;case\"right\":n=-s;break;default:c.unreachable()}switch(e.textBaseline){case\"top\":l=0;break;case\"middle\":l=-.5*i;break;case\"bottom\":l=-1*i;break;case\"alphabetic\":l=-.8*i;break;case\"hanging\":l=-.17*i;break;case\"ideographic\":l=-.83*i;break;default:c.unreachable()}return[n,l,s,i]}_canvas_text(e,t,s,i,n){this.visuals.text.set_value(e);const l=this._calculate_bounding_box_dimensions(e,t);e.save(),e.beginPath(),e.translate(s,i),n&&e.rotate(n),e.rect(l[0],l[1],l[2],l[3]),this.visuals.background_fill.doit&&(this.visuals.background_fill.set_value(e),e.fill()),this.visuals.border_line.doit&&(this.visuals.border_line.set_value(e),e.stroke()),this.visuals.text.doit&&(this.visuals.text.set_value(e),e.fillText(t,0,0)),e.restore()}_css_text(e,t,s,i,n){const{el:l}=this;c.assert(null!=l),a.undisplay(l),this.visuals.text.set_value(e);const[o,r]=this._calculate_bounding_box_dimensions(e,t);l.style.position=\"absolute\",l.style.left=`${s+o}px`,l.style.top=`${i+r}px`,l.style.color=e.fillStyle,l.style.font=e.font,l.style.lineHeight=\"normal\",n&&(l.style.transform=`rotate(${n}rad)`),this.visuals.background_fill.doit&&(this.visuals.background_fill.set_value(e),l.style.backgroundColor=e.fillStyle),this.visuals.border_line.doit&&(this.visuals.border_line.set_value(e),l.style.borderStyle=e.lineDash.length<2?\"solid\":\"dashed\",l.style.borderWidth=`${e.lineWidth}px`,l.style.borderColor=e.strokeStyle),l.textContent=t,a.display(l)}}s.TextAnnotationView=_,_.__name__=\"TextAnnotationView\";class u extends l.Annotation{constructor(e){super(e)}static init_TextAnnotation(){this.define((()=>({render_mode:[o.RenderMode,\"canvas\"]})))}}s.TextAnnotation=u,u.__name__=\"TextAnnotation\",u.init_TextAnnotation()},\n", | |
" function _(t,e,i,l,r){l();const a=t(141),o=t(142),n=t(8),h=Math.PI/2,s={above:{parallel:0,normal:-h,horizontal:0,vertical:-h},below:{parallel:0,normal:h,horizontal:0,vertical:h},left:{parallel:-h,normal:0,horizontal:0,vertical:-h},right:{parallel:h,normal:0,horizontal:0,vertical:h}},c={above:{parallel:\"bottom\",normal:\"center\",horizontal:\"bottom\",vertical:\"center\"},below:{parallel:\"top\",normal:\"center\",horizontal:\"top\",vertical:\"center\"},left:{parallel:\"bottom\",normal:\"center\",horizontal:\"center\",vertical:\"bottom\"},right:{parallel:\"bottom\",normal:\"center\",horizontal:\"center\",vertical:\"bottom\"}},g={above:{parallel:\"center\",normal:\"left\",horizontal:\"center\",vertical:\"left\"},below:{parallel:\"center\",normal:\"left\",horizontal:\"center\",vertical:\"left\"},left:{parallel:\"center\",normal:\"right\",horizontal:\"right\",vertical:\"center\"},right:{parallel:\"center\",normal:\"left\",horizontal:\"left\",vertical:\"center\"}},_={above:\"right\",below:\"left\",left:\"right\",right:\"left\"},b={above:\"left\",below:\"right\",left:\"right\",right:\"left\"};class z{constructor(t){this.side=t}get dimension(){return\"above\"==this.side||\"below\"==this.side?0:1}get normals(){switch(this.side){case\"above\":return[0,-1];case\"below\":return[0,1];case\"left\":return[-1,0];case\"right\":return[1,0]}}get orientation(){return this.is_horizontal?\"horizontal\":\"vertical\"}get is_horizontal(){return 0==this.dimension}get is_vertical(){return 1==this.dimension}get_label_text_heuristics(t){const{side:e}=this;return n.isString(t)?{vertical_align:c[e][t],align:g[e][t]}:{vertical_align:\"center\",align:(t<0?_:b)[e]}}get_label_angle_heuristic(t){return n.isString(t)?s[this.side][t]:-t}}i.Panel=z,z.__name__=\"Panel\";class m extends o.ContentLayoutable{constructor(t,e,i=!1){super(),this.panel=t,this.get_size=e,this.rotate=i,this.panel.is_horizontal?this.set_sizing({width_policy:\"max\",height_policy:\"fixed\"}):this.set_sizing({width_policy:\"fixed\",height_policy:\"max\"})}_content_size(){const{width:t,height:e}=this.get_size();return!this.rotate||this.panel.is_horizontal?new a.Sizeable({width:t,height:e}):new a.Sizeable({width:e,height:t})}has_size_changed(){const{width:t,height:e}=this._content_size();return this.panel.is_horizontal?this.bbox.height!=e:this.bbox.width!=t}}i.SideLayout=m,m.__name__=\"SideLayout\"},\n", | |
" function _(h,t,i,e,w){e();const n=h(21),{min:d,max:s}=Math;class g{constructor(h={}){this.width=null!=h.width?h.width:0,this.height=null!=h.height?h.height:0}bounded_to({width:h,height:t}){return new g({width:this.width==1/0&&null!=h?h:this.width,height:this.height==1/0&&null!=t?t:this.height})}expanded_to({width:h,height:t}){return new g({width:h!=1/0?s(this.width,h):this.width,height:t!=1/0?s(this.height,t):this.height})}expand_to({width:h,height:t}){this.width=s(this.width,h),this.height=s(this.height,t)}narrowed_to({width:h,height:t}){return new g({width:d(this.width,h),height:d(this.height,t)})}narrow_to({width:h,height:t}){this.width=d(this.width,h),this.height=d(this.height,t)}grow_by({left:h,right:t,top:i,bottom:e}){const w=this.width+h+t,n=this.height+i+e;return new g({width:w,height:n})}shrink_by({left:h,right:t,top:i,bottom:e}){const w=s(this.width-h-t,0),n=s(this.height-i-e,0);return new g({width:w,height:n})}map(h,t){return new g({width:h(this.width),height:(null!=t?t:h)(this.height)})}}i.Sizeable=g,g.__name__=\"Sizeable\",i.SizingPolicy=n.Enum(\"fixed\",\"fit\",\"min\",\"max\")},\n", | |
" function _(i,t,h,e,n){e();const s=i(141),r=i(99),g=i(8),{min:l,max:a,round:_}=Math;class o{constructor(){this.absolute=!1,this._bbox=new r.BBox,this._inner_bbox=new r.BBox,this._dirty=!1,this._handlers=[]}*[Symbol.iterator](){}get bbox(){return this._bbox}get inner_bbox(){return this._inner_bbox}get sizing(){return this._sizing}set visible(i){this._sizing.visible=i,this._dirty=!0}set_sizing(i){var t,h,e,n,s;const r=null!==(t=i.width_policy)&&void 0!==t?t:\"fit\",g=i.width,l=i.min_width,a=i.max_width,_=null!==(h=i.height_policy)&&void 0!==h?h:\"fit\",o=i.height,d=i.min_height,u=i.max_height,c=i.aspect,w=null!==(e=i.margin)&&void 0!==e?e:{top:0,right:0,bottom:0,left:0},m=!1!==i.visible,x=null!==(n=i.halign)&&void 0!==n?n:\"start\",b=null!==(s=i.valign)&&void 0!==s?s:\"start\";this._sizing={width_policy:r,min_width:l,width:g,max_width:a,height_policy:_,min_height:d,height:o,max_height:u,aspect:c,margin:w,visible:m,halign:x,valign:b,size:{width:g,height:o}},this._init()}_init(){}_set_geometry(i,t){this._bbox=i,this._inner_bbox=t}set_geometry(i,t){this._set_geometry(i,null!=t?t:i);for(const i of this._handlers)i(this._bbox,this._inner_bbox)}on_resize(i){this._handlers.push(i)}is_width_expanding(){return\"max\"==this.sizing.width_policy}is_height_expanding(){return\"max\"==this.sizing.height_policy}apply_aspect(i,{width:t,height:h}){const{aspect:e}=this.sizing;if(null!=e){const{width_policy:n,height_policy:s}=this.sizing,r=(i,t)=>{const h={max:4,fit:3,min:2,fixed:1};return h[i]>h[t]};if(\"fixed\"!=n&&\"fixed\"!=s)if(n==s){const n=t,s=_(t/e),r=_(h*e),g=h;Math.abs(i.width-n)+Math.abs(i.height-s)<=Math.abs(i.width-r)+Math.abs(i.height-g)?(t=n,h=s):(t=r,h=g)}else r(n,s)?h=_(t/e):t=_(h*e);else\"fixed\"==n?h=_(t/e):\"fixed\"==s&&(t=_(h*e))}return{width:t,height:h}}measure(i){if(!this.sizing.visible)return{width:0,height:0};const t=new s.Sizeable(i).shrink_by(this.sizing.margin).map((i=>i==1/0&&\"fixed\"==this.sizing.width_policy&&null!=this.sizing.width?this.sizing.width:i),(i=>i==1/0&&\"fixed\"==this.sizing.height_policy&&null!=this.sizing.height?this.sizing.height:i)),h=this._measure(t),e=this.clip_size(h,t),n=this.apply_aspect(t,e);return Object.assign(Object.assign({},h),n)}compute(i={}){const t={width:null!=i.width&&this.is_width_expanding()?i.width:1/0,height:null!=i.height&&this.is_height_expanding()?i.height:1/0},h=this.measure(t),{width:e,height:n}=h,s=new r.BBox({left:0,top:0,width:e,height:n});let g;if(null!=h.inner){const{left:i,top:t,right:s,bottom:l}=h.inner;g=new r.BBox({left:i,top:t,right:e-s,bottom:n-l})}this.set_geometry(s,g)}get xview(){return this.bbox.xview}get yview(){return this.bbox.yview}clip_size(i,t){function h(i,t,h,e){return null==h?h=0:g.isNumber(h)||(h=Math.round(h.percent*t)),null==e?e=1/0:g.isNumber(e)||(e=Math.round(e.percent*t)),a(h,l(i,e))}return{width:h(i.width,t.width,this.sizing.min_width,this.sizing.max_width),height:h(i.height,t.height,this.sizing.min_height,this.sizing.max_height)}}has_size_changed(){const{_dirty:i}=this;return this._dirty=!1,i}}h.Layoutable=o,o.__name__=\"Layoutable\";class d extends o{_measure(i){const{width_policy:t,height_policy:h}=this.sizing;return{width:(()=>{const{width:h}=this.sizing;if(i.width==1/0)return null!=h?h:0;switch(t){case\"fixed\":return null!=h?h:0;case\"min\":return null!=h?l(i.width,h):0;case\"fit\":return null!=h?l(i.width,h):i.width;case\"max\":return null!=h?a(i.width,h):i.width}})(),height:(()=>{const{height:t}=this.sizing;if(i.height==1/0)return null!=t?t:0;switch(h){case\"fixed\":return null!=t?t:0;case\"min\":return null!=t?l(i.height,t):0;case\"fit\":return null!=t?l(i.height,t):i.height;case\"max\":return null!=t?a(i.height,t):i.height}})()}}}h.LayoutItem=d,d.__name__=\"LayoutItem\";class u extends o{_measure(i){const t=this._content_size(),h=i.bounded_to(this.sizing.size).bounded_to(t);return{width:(()=>{switch(this.sizing.width_policy){case\"fixed\":return null!=this.sizing.width?this.sizing.width:t.width;case\"min\":return t.width;case\"fit\":return h.width;case\"max\":return Math.max(t.width,h.width)}})(),height:(()=>{switch(this.sizing.height_policy){case\"fixed\":return null!=this.sizing.height?this.sizing.height:t.height;case\"min\":return t.height;case\"fit\":return h.height;case\"max\":return Math.max(t.height,h.height)}})()}}}h.ContentLayoutable=u,u.__name__=\"ContentLayoutable\"},\n", | |
" function _(t,e,n,r,a){r();const l=t(11),c=(()=>{try{return\"undefined\"!=typeof OffscreenCanvas&&null!=new OffscreenCanvas(0,0).getContext(\"2d\")}catch(t){return!1}})()?(t,e)=>new OffscreenCanvas(t,e):(t,e)=>{const n=document.createElement(\"canvas\");return n.width=t,n.height=e,n},o=(()=>{const t=c(0,0).getContext(\"2d\");return e=>{t.font=e;const n=t.measureText(\"M\"),r=t.measureText(\"x\"),a=t.measureText(\"ÅŚg|\"),c=a.fontBoundingBoxAscent,o=a.fontBoundingBoxDescent;if(null!=c&&null!=o)return{height:c+o,ascent:c,descent:o,cap_height:n.actualBoundingBoxAscent,x_height:r.actualBoundingBoxAscent};const s=a.actualBoundingBoxAscent,u=a.actualBoundingBoxDescent;if(null!=s&&null!=u)return{height:s+u,ascent:s,descent:u,cap_height:n.actualBoundingBoxAscent,x_height:r.actualBoundingBoxAscent};l.unreachable()}})(),s=(()=>{const t=c(0,0).getContext(\"2d\");return(e,n)=>{t.font=n;const r=t.measureText(e),a=r.actualBoundingBoxAscent,c=r.actualBoundingBoxDescent;if(null!=a&&null!=c)return{width:r.width,height:a+c,ascent:a,descent:c};l.unreachable()}})(),u=(()=>{const t=document.createElement(\"canvas\"),e=t.getContext(\"2d\");let n=-1,r=-1;return(a,l=1)=>{e.font=a;const{width:c}=e.measureText(\"M\"),o=c*l,s=Math.ceil(o),u=Math.ceil(2*o),i=Math.ceil(1.5*o);n<s&&(n=s,t.width=s),r<u&&(r=u,t.height=u),e.save(),e.scale(l,l),e.fillStyle=\"#f00\",e.fillRect(0,0,s,u);const f=t=>{let e=0;for(let n=0;n<=i;n++)for(let r=0;r<s;r++,e+=4)if(255!=t[e])return i-n;return 0};e.font=a,e.fillStyle=\"#000\";for(const t of\"xa\")e.fillText(t,0,i/l);const{data:h}=e.getImageData(0,0,s,u),g=f(h)/l;for(const t of\"ASQ\")e.fillText(t,0,i/l);const{data:d}=e.getImageData(0,0,s,u),x=f(d)/l;for(const t of\"ÅŚgy\")e.fillText(t,0,i/l);const{data:m}=e.getImageData(0,0,s,u),B=f(m)/l,w=(t=>{let e=t.length-4;for(let n=u;n>=i;n--)for(let r=0;r<s;r++,e-=4)if(255!=t[e])return n-i;return 0})(m)/l;return e.restore(),{height:B+w,ascent:B,cap_height:x,x_height:g,descent:w}}})(),i=(()=>{const t=document.createElement(\"canvas\"),e=t.getContext(\"2d\");let n=-1,r=-1;return(a,l,c=1)=>{e.font=l;const{width:o}=e.measureText(\"M\"),s=o*c,u=Math.ceil(s),i=Math.ceil(2*s),f=Math.ceil(1.5*s);(n<u||r<i)&&(n=u,t.width=u,r=i,t.height=i),e.save(),e.scale(c,c),e.fillStyle=\"#f00\",e.fillRect(0,0,u,i);e.font=l,e.fillStyle=\"#000\",e.fillText(a,0,f/c);const h=e.measureText(a),{data:g}=e.getImageData(0,0,u,i),d=(t=>{let e=0;for(let n=0;n<=f;n++)for(let r=0;r<u;r++,e+=4)if(255!=t[e])return f-n;return 0})(g)/c,x=(t=>{let e=t.length-4;for(let n=i;n>=f;n--)for(let r=0;r<u;r++,e-=4)if(255!=t[e])return n-f;return 0})(g)/c;return e.restore(),{width:h.width,height:d+x,ascent:d,descent:x}}})(),f=(()=>{try{return o(\"normal 10px sans-serif\"),o}catch(t){return u}})(),h=(()=>{try{return s(\"A\",\"normal 10px sans-serif\"),s}catch(t){return i}})(),g=new Map;function d(t){let e=g.get(t);return null==e&&(e={font:f(t),glyphs:new Map},g.set(t,e)),e.font}n.font_metrics=d,n.glyph_metrics=function(t,e){let n=g.get(e);null==n&&(d(e),n=g.get(e));let r=n.glyphs.get(t);return null==r&&(r=h(t,e),n.glyphs.set(t,r)),r}},\n", | |
" function _(e,t,s,_,a){_();const r=e(145),n=e(157),g=e(156),i=e(159),c=e(104),h=e(99),o=e(13),l=e(11);class x{constructor(e,t,s,_,a={},r={}){this.in_x_scale=e,this.in_y_scale=t,this.x_range=s,this.y_range=_,this.extra_x_ranges=a,this.extra_y_ranges=r,this._bbox=new h.BBox,l.assert(null==e.source_range&&null==e.target_range),l.assert(null==t.source_range&&null==t.target_range),this._configure_scales()}get bbox(){return this._bbox}_get_ranges(e,t){return new Map(o.entries(Object.assign(Object.assign({},t),{default:e})))}_get_scales(e,t,s){const _=new Map;for(const[a,g]of t){if(g instanceof c.FactorRange!=e instanceof r.CategoricalScale)throw new Error(`Range ${g.type} is incompatible is Scale ${e.type}`);e instanceof n.LogScale&&g instanceof i.DataRange1d&&(g.scale_hint=\"log\");const t=e.clone();t.setv({source_range:g,target_range:s}),_.set(a,t)}return _}_configure_frame_ranges(){const{bbox:e}=this;this._x_target=new g.Range1d({start:e.left,end:e.right}),this._y_target=new g.Range1d({start:e.bottom,end:e.top})}_configure_scales(){this._configure_frame_ranges(),this._x_ranges=this._get_ranges(this.x_range,this.extra_x_ranges),this._y_ranges=this._get_ranges(this.y_range,this.extra_y_ranges),this._x_scales=this._get_scales(this.in_x_scale,this._x_ranges,this._x_target),this._y_scales=this._get_scales(this.in_y_scale,this._y_ranges,this._y_target)}_update_scales(){this._configure_frame_ranges();for(const[,e]of this._x_scales)e.target_range=this._x_target;for(const[,e]of this._y_scales)e.target_range=this._y_target}set_geometry(e){this._bbox=e,this._update_scales()}get x_target(){return this._x_target}get y_target(){return this._y_target}get x_ranges(){return this._x_ranges}get y_ranges(){return this._y_ranges}get x_scales(){return this._x_scales}get y_scales(){return this._y_scales}get x_scale(){return this._x_scales.get(\"default\")}get y_scale(){return this._y_scales.get(\"default\")}get xscales(){return o.to_object(this.x_scales)}get yscales(){return o.to_object(this.y_scales)}}s.CartesianFrame=x,x.__name__=\"CartesianFrame\"},\n", | |
" function _(e,t,r,n,_){n();const c=e(146);class s extends c.Scale{constructor(e){super(e)}get s_compute(){const[e,t]=this._linear_compute_state(),r=this.source_range;return n=>e*r.synthetic(n)+t}compute(e){return super._linear_compute(this.source_range.synthetic(e))}v_compute(e){return super._linear_v_compute(this.source_range.v_synthetic(e))}invert(e){return this._linear_invert(e)}v_invert(e){return this._linear_v_invert(e)}}r.CategoricalScale=s,s.__name__=\"CategoricalScale\"},\n", | |
" function _(t,e,r,n,s){n();const i=t(147),_=t(105),a=t(156),c=t(24);class o extends i.Transform{constructor(t){super(t)}static init_Scale(){this.internal((({Ref:t})=>({source_range:[t(_.Range)],target_range:[t(a.Range1d)]})))}r_compute(t,e){return this.target_range.is_reversed?[this.compute(e),this.compute(t)]:[this.compute(t),this.compute(e)]}r_invert(t,e){return this.target_range.is_reversed?[this.invert(e),this.invert(t)]:[this.invert(t),this.invert(e)]}_linear_compute(t){const[e,r]=this._linear_compute_state();return e*t+r}_linear_v_compute(t){const[e,r]=this._linear_compute_state(),n=new c.ScreenArray(t.length);for(let s=0;s<t.length;s++)n[s]=e*t[s]+r;return n}_linear_invert(t){const[e,r]=this._linear_compute_state();return(t-r)/e}_linear_v_invert(t){const[e,r]=this._linear_compute_state(),n=new Float64Array(t.length);for(let s=0;s<t.length;s++)n[s]=(t[s]-r)/e;return n}_linear_compute_state(){const t=this.source_range.start,e=this.source_range.end,r=this.target_range.start,n=(this.target_range.end-r)/(e-t);return[n,-n*t+r]}}r.Scale=o,o.__name__=\"Scale\",o.init_Scale()},\n", | |
" function _(r,o,t,e,n){e(),n(\"CustomJSTransform\",r(148).CustomJSTransform),n(\"Dodge\",r(150).Dodge),n(\"Interpolator\",r(152).Interpolator),n(\"Jitter\",r(153).Jitter),n(\"LinearInterpolator\",r(154).LinearInterpolator),n(\"StepInterpolator\",r(155).StepInterpolator),n(\"Transform\",r(149).Transform)},\n", | |
" function _(t,r,s,n,e){n();const a=t(149),o=t(13),u=t(34);class m extends a.Transform{constructor(t){super(t)}static init_CustomJSTransform(){this.define((({Unknown:t,String:r,Dict:s})=>({args:[s(t),{}],func:[r,\"\"],v_func:[r,\"\"]})))}get names(){return o.keys(this.args)}get values(){return o.values(this.args)}_make_transform(t,r){return new Function(...this.names,t,u.use_strict(r))}get scalar_transform(){return this._make_transform(\"x\",this.func)}get vector_transform(){return this._make_transform(\"xs\",this.v_func)}compute(t){return this.scalar_transform(...this.values,t)}v_compute(t){return this.vector_transform(...this.values,t)}}s.CustomJSTransform=m,m.__name__=\"CustomJSTransform\",m.init_CustomJSTransform()},\n", | |
" function _(n,s,o,r,c){r();const e=n(53);class t extends e.Model{constructor(n){super(n)}}o.Transform=t,t.__name__=\"Transform\"},\n", | |
" function _(e,t,n,o,s){o();const i=e(151);class r extends i.RangeTransform{constructor(e){super(e)}static init_Dodge(){this.define((({Number:e})=>({value:[e,0]})))}_compute(e){return e+this.value}}n.Dodge=r,r.__name__=\"Dodge\",r.init_Dodge()},\n", | |
" function _(e,n,t,r,s){r();const a=e(149),i=e(105),o=e(104),c=e(24),f=e(8);class u extends a.Transform{constructor(e){super(e)}static init_RangeTransform(){this.define((({Ref:e,Nullable:n})=>({range:[n(e(i.Range)),null]})))}v_compute(e){let n;if(this.range instanceof o.FactorRange)n=this.range.v_synthetic(e);else{if(!f.isArrayableOf(e,f.isNumber))throw new Error(\"unexpected\");n=e}const t=new(c.infer_type(n))(n.length);for(let e=0;e<n.length;e++){const r=n[e];t[e]=this._compute(r)}return t}compute(e){if(this.range instanceof o.FactorRange)return this._compute(this.range.synthetic(e));if(f.isNumber(e))return this._compute(e);throw new Error(\"unexpected\")}}t.RangeTransform=u,u.__name__=\"RangeTransform\",u.init_RangeTransform()},\n", | |
" function _(t,e,r,n,o){n();const s=t(149),i=t(57),a=t(24),h=t(9),l=t(8);class d extends s.Transform{constructor(t){super(t),this._sorted_dirty=!0}static init_Interpolator(){this.define((({Boolean:t,Number:e,String:r,Ref:n,Array:o,Or:s,Nullable:a})=>({x:[s(r,o(e))],y:[s(r,o(e))],data:[a(n(i.ColumnarDataSource)),null],clip:[t,!0]})))}connect_signals(){super.connect_signals(),this.connect(this.change,(()=>this._sorted_dirty=!0))}v_compute(t){const e=new(a.infer_type(t))(t.length);for(let r=0;r<t.length;r++){const n=t[r];e[r]=this.compute(n)}return e}sort(t=!1){if(!this._sorted_dirty)return;let e,r;if(l.isString(this.x)&&l.isString(this.y)&&null!=this.data){const t=this.data.columns();if(!h.includes(t,this.x))throw new Error(\"The x parameter does not correspond to a valid column name defined in the data parameter\");if(!h.includes(t,this.y))throw new Error(\"The y parameter does not correspond to a valid column name defined in the data parameter\");e=this.data.get_column(this.x),r=this.data.get_column(this.y)}else{if(!l.isArray(this.x)||!l.isArray(this.y))throw new Error(\"parameters 'x' and 'y' must be both either string fields or arrays\");e=this.x,r=this.y}if(e.length!==r.length)throw new Error(\"The length for x and y do not match\");if(e.length<2)throw new Error(\"x and y must have at least two elements to support interpolation\");const n=e.length,o=new Uint32Array(n);for(let t=0;t<n;t++)o[t]=t;const s=t?-1:1;o.sort(((t,r)=>s*(e[t]-e[r]))),this._x_sorted=new(a.infer_type(e))(n),this._y_sorted=new(a.infer_type(r))(n);for(let t=0;t<n;t++)this._x_sorted[t]=e[o[t]],this._y_sorted[t]=r[o[t]];this._sorted_dirty=!1}}r.Interpolator=d,d.__name__=\"Interpolator\",d.init_Interpolator()},\n", | |
" function _(t,i,e,s,r){s();const n=t(1),u=t(151),o=t(20),a=n.__importStar(t(10));class h extends u.RangeTransform{constructor(t){super(t)}static init_Jitter(){this.define((({Number:t})=>({mean:[t,0],width:[t,1],distribution:[o.Distribution,\"uniform\"]})))}v_compute(t){return null!=this.previous_values&&this.previous_values.length==t.length||(this.previous_values=super.v_compute(t)),this.previous_values}_compute(t){switch(this.distribution){case\"uniform\":return t+this.mean+(a.random()-.5)*this.width;case\"normal\":return t+a.rnorm(this.mean,this.width)}}}e.Jitter=h,h.__name__=\"Jitter\",h.init_Jitter()},\n", | |
" function _(t,s,_,r,e){r();const i=t(9),o=t(152);class n extends o.Interpolator{constructor(t){super(t)}compute(t){if(this.sort(!1),this.clip){if(t<this._x_sorted[0]||t>this._x_sorted[this._x_sorted.length-1])return NaN}else{if(t<this._x_sorted[0])return this._y_sorted[0];if(t>this._x_sorted[this._x_sorted.length-1])return this._y_sorted[this._y_sorted.length-1]}if(t==this._x_sorted[0])return this._y_sorted[0];const s=i.find_last_index(this._x_sorted,(s=>s<t)),_=this._x_sorted[s],r=this._x_sorted[s+1],e=this._y_sorted[s],o=this._y_sorted[s+1];return e+(t-_)/(r-_)*(o-e)}}_.LinearInterpolator=n,n.__name__=\"LinearInterpolator\"},\n", | |
" function _(t,e,s,r,o){r();const i=t(152),_=t(20),n=t(9);class d extends i.Interpolator{constructor(t){super(t)}static init_StepInterpolator(){this.define((()=>({mode:[_.StepMode,\"after\"]})))}compute(t){if(this.sort(!1),this.clip){if(t<this._x_sorted[0]||t>this._x_sorted[this._x_sorted.length-1])return NaN}else{if(t<this._x_sorted[0])return this._y_sorted[0];if(t>this._x_sorted[this._x_sorted.length-1])return this._y_sorted[this._y_sorted.length-1]}let e;switch(this.mode){case\"after\":e=n.find_last_index(this._x_sorted,(e=>t>=e));break;case\"before\":e=n.find_index(this._x_sorted,(e=>t<=e));break;case\"center\":{const s=n.map(this._x_sorted,(e=>Math.abs(e-t))),r=n.min(s);e=n.find_index(s,(t=>r===t));break}default:throw new Error(`unknown mode: ${this.mode}`)}return-1!=e?this._y_sorted[e]:NaN}}s.StepInterpolator=d,d.__name__=\"StepInterpolator\",d.init_StepInterpolator()},\n", | |
" function _(t,e,s,n,i){n();const a=t(105);class r extends a.Range{constructor(t){super(t)}static init_Range1d(){this.define((({Number:t,Nullable:e})=>({start:[t,0],end:[t,1],reset_start:[e(t),null,{on_update(t,e){e._reset_start=null!=t?t:e.start}}],reset_end:[e(t),null,{on_update(t,e){e._reset_end=null!=t?t:e.end}}]})))}_set_auto_bounds(){if(\"auto\"==this.bounds){const t=Math.min(this._reset_start,this._reset_end),e=Math.max(this._reset_start,this._reset_end);this.setv({bounds:[t,e]},{silent:!0})}}initialize(){super.initialize(),this._set_auto_bounds()}get min(){return Math.min(this.start,this.end)}get max(){return Math.max(this.start,this.end)}reset(){this._set_auto_bounds();const{_reset_start:t,_reset_end:e}=this;this.start!=t||this.end!=e?this.setv({start:t,end:e}):this.change.emit()}map(t){return new r({start:t(this.start),end:t(this.end)})}widen(t){let{start:e,end:s}=this;return this.is_reversed?(e+=t,s-=t):(e-=t,s+=t),new r({start:e,end:s})}}s.Range1d=r,r.__name__=\"Range1d\",r.init_Range1d()},\n", | |
" function _(t,e,o,n,s){n();const a=t(158),r=t(24);class c extends a.ContinuousScale{constructor(t){super(t)}get s_compute(){const[t,e,o,n]=this._compute_state();return s=>{if(0==o)return 0;{const a=(Math.log(s)-n)/o;return isFinite(a)?a*t+e:NaN}}}compute(t){const[e,o,n,s]=this._compute_state();let a;if(0==n)a=0;else{const r=(Math.log(t)-s)/n;a=isFinite(r)?r*e+o:NaN}return a}v_compute(t){const[e,o,n,s]=this._compute_state(),a=new r.ScreenArray(t.length);if(0==n)for(let e=0;e<t.length;e++)a[e]=0;else for(let r=0;r<t.length;r++){const c=(Math.log(t[r])-s)/n;let l;l=isFinite(c)?c*e+o:NaN,a[r]=l}return a}invert(t){const[e,o,n,s]=this._compute_state(),a=(t-o)/e;return Math.exp(n*a+s)}v_invert(t){const[e,o,n,s]=this._compute_state(),a=new Float64Array(t.length);for(let r=0;r<t.length;r++){const c=(t[r]-o)/e;a[r]=Math.exp(n*c+s)}return a}_get_safe_factor(t,e){let o=t<0?0:t,n=e<0?0:e;if(o==n)if(0==o)[o,n]=[1,10];else{const t=Math.log(o)/Math.log(10);o=10**Math.floor(t),n=Math.ceil(t)!=Math.floor(t)?10**Math.ceil(t):10**(Math.ceil(t)+1)}return[o,n]}_compute_state(){const t=this.source_range.start,e=this.source_range.end,o=this.target_range.start,n=this.target_range.end-o,[s,a]=this._get_safe_factor(t,e);let r,c;0==s?(r=Math.log(a),c=0):(r=Math.log(a)-Math.log(s),c=Math.log(s));return[n,o,r,c]}}o.LogScale=c,c.__name__=\"LogScale\"},\n", | |
" function _(n,c,o,s,e){s();const t=n(146);class u extends t.Scale{constructor(n){super(n)}}o.ContinuousScale=u,u.__name__=\"ContinuousScale\"},\n", | |
" function _(t,i,n,a,e){a();const s=t(1),l=t(160),_=t(20),o=t(9),h=t(19),r=s.__importStar(t(99)),d=t(161);class u extends l.DataRange{constructor(t){super(t),this.have_updated_interactively=!1}static init_DataRange1d(){this.define((({Boolean:t,Number:i,Nullable:n})=>({start:[i],end:[i],range_padding:[i,.1],range_padding_units:[_.PaddingUnits,\"percent\"],flipped:[t,!1],follow:[n(_.StartEnd),null],follow_interval:[n(i),null],default_span:[i,2],only_visible:[t,!1]}))),this.internal((({Enum:t})=>({scale_hint:[t(\"log\",\"auto\"),\"auto\"]})))}initialize(){super.initialize(),this._initial_start=this.start,this._initial_end=this.end,this._initial_range_padding=this.range_padding,this._initial_range_padding_units=this.range_padding_units,this._initial_follow=this.follow,this._initial_follow_interval=this.follow_interval,this._initial_default_span=this.default_span,this._plot_bounds=new Map}get min(){return Math.min(this.start,this.end)}get max(){return Math.max(this.start,this.end)}computed_renderers(){const{renderers:t,names:i}=this,n=o.concat(this.plots.map((t=>t.data_renderers)));return d.compute_renderers(0==t.length?\"auto\":t,n,i)}_compute_plot_bounds(t,i){let n=r.empty();for(const a of t){const t=i.get(a);null==t||!a.visible&&this.only_visible||(n=r.union(n,t))}return n}adjust_bounds_for_aspect(t,i){const n=r.empty();let a=t.x1-t.x0;a<=0&&(a=1);let e=t.y1-t.y0;e<=0&&(e=1);const s=.5*(t.x1+t.x0),l=.5*(t.y1+t.y0);return a<i*e?a=i*e:e=a/i,n.x1=s+.5*a,n.x0=s-.5*a,n.y1=l+.5*e,n.y0=l-.5*e,n}_compute_min_max(t,i){let n,a,e=r.empty();for(const i of t)e=r.union(e,i);return[n,a]=0==i?[e.x0,e.x1]:[e.y0,e.y1],[n,a]}_compute_range(t,i){const n=this.range_padding;let a,e;if(null!=this._initial_start&&(t=this._initial_start),null!=this._initial_end&&(i=this._initial_end),\"log\"==this.scale_hint){let s,l;if((isNaN(t)||!isFinite(t)||t<=0)&&(t=isNaN(i)||!isFinite(i)||i<=0?.1:i/100,h.logger.warn(`could not determine minimum data value for log axis, DataRange1d using value ${t}`)),(isNaN(i)||!isFinite(i)||i<=0)&&(i=isNaN(t)||!isFinite(t)||t<=0?10:100*t,h.logger.warn(`could not determine maximum data value for log axis, DataRange1d using value ${i}`)),i==t)l=this.default_span+.001,s=Math.log(t)/Math.log(10);else{let a,e;\"percent\"==this.range_padding_units?(a=Math.log(t)/Math.log(10),e=Math.log(i)/Math.log(10),l=(e-a)*(1+n)):(a=Math.log(t-n)/Math.log(10),e=Math.log(i+n)/Math.log(10),l=e-a),s=(a+e)/2}a=10**(s-l/2),e=10**(s+l/2)}else{let s;s=i==t?this.default_span:\"percent\"==this.range_padding_units?(i-t)*(1+n):i-t+2*n;const l=(i+t)/2;a=l-s/2,e=l+s/2}let s=1;this.flipped&&([a,e]=[e,a],s=-1);const l=this.follow_interval;return null!=l&&Math.abs(a-e)>l&&(\"start\"==this.follow?e=a+s*l:\"end\"==this.follow&&(a=e-s*l)),[a,e]}update(t,i,n,a){if(this.have_updated_interactively)return;const e=this.computed_renderers();let s=this._compute_plot_bounds(e,t);null!=a&&(s=this.adjust_bounds_for_aspect(s,a)),this._plot_bounds.set(n,s);const[l,_]=this._compute_min_max(this._plot_bounds.values(),i);let[o,h]=this._compute_range(l,_);null!=this._initial_start&&(\"log\"==this.scale_hint?this._initial_start>0&&(o=this._initial_start):o=this._initial_start),null!=this._initial_end&&(\"log\"==this.scale_hint?this._initial_end>0&&(h=this._initial_end):h=this._initial_end);let r=!1;\"auto\"==this.bounds&&(this.setv({bounds:[o,h]},{silent:!0}),r=!0);const[d,u]=[this.start,this.end];if(o!=d||h!=u){const t={};o!=d&&(t.start=o),h!=u&&(t.end=h),this.setv(t),r=!1}r&&this.change.emit()}reset(){this.have_updated_interactively=!1,this.setv({range_padding:this._initial_range_padding,range_padding_units:this._initial_range_padding_units,follow:this._initial_follow,follow_interval:this._initial_follow_interval,default_span:this._initial_default_span},{silent:!0}),this.change.emit()}}n.DataRange1d=u,u.__name__=\"DataRange1d\",u.init_DataRange1d()},\n", | |
" function _(a,e,n,t,r){t();const s=a(105),i=a(62);class R extends s.Range{constructor(a){super(a)}static init_DataRange(){this.define((({String:a,Array:e,Ref:n})=>({names:[e(a),[]],renderers:[e(n(i.DataRenderer)),[]]})))}}n.DataRange=R,R.__name__=\"DataRange\",R.init_DataRange()},\n", | |
" function _(n,e,t,r,u){r();const l=n(9);t.compute_renderers=function(n,e,t){if(null==n)return[];let r=\"auto\"==n?e:n;return t.length>0&&(r=r.filter((n=>l.includes(t,n.name)))),r}},\n", | |
" function _(i,s,x,A,o){A(),o(\"Axis\",i(163).Axis),o(\"CategoricalAxis\",i(170).CategoricalAxis),o(\"ContinuousAxis\",i(173).ContinuousAxis),o(\"DatetimeAxis\",i(174).DatetimeAxis),o(\"LinearAxis\",i(175).LinearAxis),o(\"LogAxis\",i(192).LogAxis),o(\"MercatorAxis\",i(195).MercatorAxis)},\n", | |
" function _(t,e,i,s,o){s();const n=t(1),a=t(164),l=t(165),r=t(166),_=t(169),c=n.__importStar(t(48)),h=t(20),b=t(24),m=t(140),d=t(9),u=t(8),x=t(167),g=t(104),{abs:f}=Math;class p extends a.GuideRendererView{update_layout(){this.layout=new m.SideLayout(this.panel,(()=>this.get_size()),!0)}get_size(){const{visible:t,fixed_location:e}=this.model;if(t&&null==e&&this.is_renderable){const{extents:t}=this;return{width:0,height:Math.round(t.tick+t.tick_label+t.axis_label)}}return{width:0,height:0}}get is_renderable(){const[t,e]=this.ranges;return t.is_valid&&e.is_valid}_render(){var t;if(!this.is_renderable)return;const{tick_coords:e,extents:i}=this,s=this.layer.ctx;s.save(),this._draw_rule(s,i),this._draw_major_ticks(s,i,e),this._draw_minor_ticks(s,i,e),this._draw_major_labels(s,i,e),this._draw_axis_label(s,i,e),null===(t=this._paint)||void 0===t||t.call(this,s,i,e),s.restore()}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()=>this.plot_view.request_layout()))}get needs_clip(){return null!=this.model.fixed_location}_draw_rule(t,e){if(!this.visuals.axis_line.doit)return;const[i,s]=this.rule_coords,[o,n]=this.coordinates.map_to_screen(i,s),[a,l]=this.normals,[r,_]=this.offsets;this.visuals.axis_line.set_value(t),t.beginPath();for(let e=0;e<o.length;e++){const i=Math.round(o[e]+a*r),s=Math.round(n[e]+l*_);t.lineTo(i,s)}t.stroke()}_draw_major_ticks(t,e,i){const s=this.model.major_tick_in,o=this.model.major_tick_out,n=this.visuals.major_tick_line;this._draw_ticks(t,i.major,s,o,n)}_draw_minor_ticks(t,e,i){const s=this.model.minor_tick_in,o=this.model.minor_tick_out,n=this.visuals.minor_tick_line;this._draw_ticks(t,i.minor,s,o,n)}_draw_major_labels(t,e,i){const s=i.major,o=this.compute_labels(s[this.dimension]),n=this.model.major_label_orientation,a=e.tick+this.model.major_label_standoff,l=this.visuals.major_label_text;this._draw_oriented_labels(t,o,s,n,this.panel.side,a,l)}_axis_label_extent(){const t=this.model.axis_label;if(!t)return 0;const e=new x.TextBox({text:t});e.angle=this.panel.get_label_angle_heuristic(\"parallel\"),e.visuals=this.visuals.axis_label_text;const i=e.size(),s=0==this.dimension?i.height:i.width,o=this.model.axis_label_standoff;return s>0?o+s+3:0}_draw_axis_label(t,e,i){const s=this.model.axis_label;if(!s||null!=this.model.fixed_location)return;const o=new x.TextBox({text:s});o.angle=this.panel.get_label_angle_heuristic(\"parallel\"),o.visuals=this.visuals.axis_label_text;const[n,a]=(()=>{const{bbox:t}=this.layout;switch(this.panel.side){case\"above\":return[t.hcenter,t.bottom];case\"below\":return[t.hcenter,t.top];case\"left\":return[t.right,t.vcenter];case\"right\":return[t.left,t.vcenter]}})(),[l,r]=this.normals,_=e.tick+e.tick_label+this.model.axis_label_standoff,{vertical_align:c,align:h}=this.panel.get_label_text_heuristics(\"parallel\");o.position={sx:n+l*_,sy:a+r*_,x_anchor:h,y_anchor:c},o.align=h,o.paint(t)}_draw_ticks(t,e,i,s,o){if(!o.doit)return;const[n,a]=e,[l,r]=this.coordinates.map_to_screen(n,a),[_,c]=this.normals,[h,b]=this.offsets,[m,d]=[_*(h-i),c*(b-i)],[u,x]=[_*(h+s),c*(b+s)];o.set_value(t),t.beginPath();for(let e=0;e<l.length;e++){const i=Math.round(l[e]+u),s=Math.round(r[e]+x),o=Math.round(l[e]+m),n=Math.round(r[e]+d);t.moveTo(i,s),t.lineTo(o,n)}t.stroke()}_draw_oriented_labels(t,e,i,s,o,n,a){if(!a.doit||0==e.length)return;const[l,r]=i,[_,c]=this.coordinates.map_to_screen(l,r),[h,m]=this.offsets,[d,u]=this.normals,g=d*(h+n),f=u*(m+n),{vertical_align:p,align:k}=this.panel.get_label_text_heuristics(s),w=this.panel.get_label_angle_heuristic(s);e.visuals=a,e.angle=w;for(let t=0;t<e.length;t++){const i=e.items[t];i.position={sx:_[t]+g,sy:c[t]+f,x_anchor:k,y_anchor:p},i instanceof x.TextBox&&(i.align=k)}const j=e.length,v=b.Indices.all_set(j),{items:y}=e,T=y.map((t=>t.bbox())),O=(()=>{const[t]=this.ranges;return t.is_reversed?0==this.dimension?(t,e)=>T[t].left-T[e].right:(t,e)=>T[e].top-T[t].bottom:0==this.dimension?(t,e)=>T[e].left-T[t].right:(t,e)=>T[t].top-T[e].bottom})(),{major_label_policy:A}=this.model,M=A.filter(v,T,O),z=[...M.ones()];if(0!=z.length){const t=this.parent.canvas_view.bbox,e=e=>{const i=T[e];if(i.left<0){const t=-i.left,{position:s}=y[e];y[e].position=Object.assign(Object.assign({},s),{sx:s.sx+t})}else if(i.right>t.width){const s=i.right-t.width,{position:o}=y[e];y[e].position=Object.assign(Object.assign({},o),{sx:o.sx-s})}},i=e=>{const i=T[e];if(i.top<0){const t=-i.top,{position:s}=y[e];y[e].position=Object.assign(Object.assign({},s),{sy:s.sy+t})}else if(i.bottom>t.height){const s=i.bottom-t.height,{position:o}=y[e];y[e].position=Object.assign(Object.assign({},o),{sy:o.sy-s})}},s=z[0],o=z[z.length-1];0==this.dimension?(e(s),e(o)):(i(s),i(o))}for(const e of M){y[e].paint(t)}}_tick_extent(){return this.model.major_tick_out}_tick_label_extents(){const t=this.tick_coords.major,e=this.compute_labels(t[this.dimension]),i=this.model.major_label_orientation,s=this.model.major_label_standoff,o=this.visuals.major_label_text;return[this._oriented_labels_extent(e,i,s,o)]}get extents(){const t=this._tick_label_extents();return{tick:this._tick_extent(),tick_labels:t,tick_label:d.sum(t),axis_label:this._axis_label_extent()}}_oriented_labels_extent(t,e,i,s){if(0==t.length)return 0;const o=this.panel.get_label_angle_heuristic(e);t.visuals=s,t.angle=o;const n=t.max_size(),a=0==this.dimension?n.height:n.width;return a>0?i+a+3:0}get normals(){return this.panel.normals}get dimension(){return this.panel.dimension}compute_labels(t){const e=this.model.formatter.format_graphics(t,this),{major_label_overrides:i}=this.model;for(let s=0;s<t.length;s++){const o=i[t[s]];null!=o&&(e[s]=new x.TextBox({text:o}))}return new x.GraphicsBoxes(e)}get offsets(){if(null!=this.model.fixed_location)return[0,0];const{frame:t}=this.plot_view;let[e,i]=[0,0];switch(this.panel.side){case\"below\":i=f(this.layout.bbox.top-t.bbox.bottom);break;case\"above\":i=f(this.layout.bbox.bottom-t.bbox.top);break;case\"right\":e=f(this.layout.bbox.left-t.bbox.right);break;case\"left\":e=f(this.layout.bbox.right-t.bbox.left)}return[e,i]}get ranges(){const t=this.dimension,e=(t+1)%2,{ranges:i}=this.coordinates;return[i[t],i[e]]}get computed_bounds(){const[t]=this.ranges,e=this.model.bounds,i=[t.min,t.max];if(\"auto\"==e)return[t.min,t.max];{let t,s;const[o,n]=e,[a,l]=i,{min:r,max:_}=Math;return f(o-n)>f(a-l)?(t=_(r(o,n),a),s=r(_(o,n),l)):(t=r(o,n),s=_(o,n)),[t,s]}}get rule_coords(){const t=this.dimension,e=(t+1)%2,[i]=this.ranges,[s,o]=this.computed_bounds,n=[new Array(2),new Array(2)];return n[t][0]=Math.max(s,i.min),n[t][1]=Math.min(o,i.max),n[t][0]>n[t][1]&&(n[t][0]=n[t][1]=NaN),n[e][0]=this.loc,n[e][1]=this.loc,n}get tick_coords(){const t=this.dimension,e=(t+1)%2,[i]=this.ranges,[s,o]=this.computed_bounds,n=this.model.ticker.get_ticks(s,o,i,this.loc),a=n.major,l=n.minor,r=[[],[]],_=[[],[]],[c,h]=[i.min,i.max];for(let i=0;i<a.length;i++)a[i]<c||a[i]>h||(r[t].push(a[i]),r[e].push(this.loc));for(let i=0;i<l.length;i++)l[i]<c||l[i]>h||(_[t].push(l[i]),_[e].push(this.loc));return{major:r,minor:_}}get loc(){const{fixed_location:t}=this.model;if(null!=t){if(u.isNumber(t))return t;const[,e]=this.ranges;if(e instanceof g.FactorRange)return e.synthetic(t);throw new Error(\"unexpected\")}const[,e]=this.ranges;switch(this.panel.side){case\"left\":case\"below\":return e.start;case\"right\":case\"above\":return e.end}}serializable_state(){return Object.assign(Object.assign({},super.serializable_state()),{bbox:this.layout.bbox.box})}}i.AxisView=p,p.__name__=\"AxisView\";class k extends a.GuideRenderer{constructor(t){super(t)}static init_Axis(){this.prototype.default_view=p,this.mixins([[\"axis_\",c.Line],[\"major_tick_\",c.Line],[\"minor_tick_\",c.Line],[\"major_label_\",c.Text],[\"axis_label_\",c.Text]]),this.define((({Any:t,Int:e,Number:i,String:s,Ref:o,Dict:n,Tuple:a,Or:c,Nullable:b,Auto:m})=>({bounds:[c(a(i,i),m),\"auto\"],ticker:[o(l.Ticker)],formatter:[o(r.TickFormatter)],axis_label:[b(s),\"\"],axis_label_standoff:[e,5],major_label_standoff:[e,5],major_label_orientation:[c(h.TickLabelOrientation,i),\"horizontal\"],major_label_overrides:[n(s),{}],major_label_policy:[o(_.LabelingPolicy),()=>new _.AllLabels],major_tick_in:[i,2],major_tick_out:[i,6],minor_tick_in:[i,0],minor_tick_out:[i,4],fixed_location:[b(c(i,t)),null]}))),this.override({axis_line_color:\"black\",major_tick_line_color:\"black\",minor_tick_line_color:\"black\",major_label_text_font_size:\"11px\",major_label_text_align:\"center\",major_label_text_baseline:\"alphabetic\",axis_label_text_font_size:\"13px\",axis_label_text_font_style:\"italic\"})}}i.Axis=k,k.__name__=\"Axis\",k.init_Axis()},\n", | |
" function _(e,r,d,i,n){i();const s=e(41);class t extends s.RendererView{}d.GuideRendererView=t,t.__name__=\"GuideRendererView\";class _ extends s.Renderer{constructor(e){super(e)}static init_GuideRenderer(){this.override({level:\"guide\"})}}d.GuideRenderer=_,_.__name__=\"GuideRenderer\",_.init_GuideRenderer()},\n", | |
" function _(c,e,n,s,o){s();const r=c(53);class t extends r.Model{constructor(c){super(c)}}n.Ticker=t,t.__name__=\"Ticker\"},\n", | |
" function _(t,o,r,e,c){e();const n=t(53),a=t(167);class m extends n.Model{constructor(t){super(t)}format_graphics(t,o){return this.doFormat(t,o).map((t=>new a.TextBox({text:t})))}compute(t,o){return this.doFormat([t],null!=o?o:{loc:0})[0]}v_compute(t,o){return this.doFormat(t,null!=o?o:{loc:0})}}r.TickFormatter=m,m.__name__=\"TickFormatter\"},\n", | |
" function _(t,e,s,i,n){i();const h=t(99),o=t(143),r=t(9),a=t(8),c=t(168),_=t(22);s.text_width=(()=>{const t=document.createElement(\"canvas\").getContext(\"2d\");let e=\"\";return(s,i)=>(i!=e&&(e=i,t.font=i),t.measureText(s).width)})();class l{constructor(){this._position={sx:0,sy:0},this.font_size_scale=1}set position(t){this._position=t}get position(){return this._position}infer_text_height(){return\"ascent_descent\"}bbox(){const{p0:t,p1:e,p2:s,p3:i}=this.rect(),n=Math.min(t.x,e.x,s.x,i.x),o=Math.min(t.y,e.y,s.y,i.y),r=Math.max(t.x,e.x,s.x,i.x),a=Math.max(t.y,e.y,s.y,i.y);return new h.BBox({left:n,right:r,top:o,bottom:a})}size(){const{width:t,height:e}=this._size(),{angle:s}=this;if(s){const i=Math.cos(Math.abs(s)),n=Math.sin(Math.abs(s));return{width:Math.abs(t*i+e*n),height:Math.abs(t*n+e*i)}}return{width:t,height:e}}rect(){const t=this._rect(),{angle:e}=this;if(e){const{sx:s,sy:i}=this.position,n=new c.AffineTransform;return n.translate(s,i),n.rotate(e),n.translate(-s,-i),n.apply_rect(t)}return t}paint_rect(t){const{p0:e,p1:s,p2:i,p3:n}=this.rect();t.save(),t.strokeStyle=\"red\",t.lineWidth=1,t.beginPath();const{round:h}=Math;t.moveTo(h(e.x),h(e.y)),t.lineTo(h(s.x),h(s.y)),t.lineTo(h(i.x),h(i.y)),t.lineTo(h(n.x),h(n.y)),t.closePath(),t.stroke(),t.restore()}paint_bbox(t){const{x:e,y:s,width:i,height:n}=this.bbox();t.save(),t.strokeStyle=\"blue\",t.lineWidth=1,t.beginPath();const{round:h}=Math;t.moveTo(h(e),h(s)),t.lineTo(h(e),h(s+n)),t.lineTo(h(e+i),h(s+n)),t.lineTo(h(e+i),h(s)),t.closePath(),t.stroke(),t.restore()}}s.GraphicsBox=l,l.__name__=\"GraphicsBox\";class x extends l{constructor({text:t}){super(),this.align=\"left\",this.text=t}set visuals(t){const e=t.text_color.get_value(),s=t.text_alpha.get_value(),i=t.text_font_style.get_value();let n=t.text_font_size.get_value();const h=t.text_font.get_value(),{font_size_scale:o}=this;if(1!=o){const t=n.match(/^\\s*(\\d+(\\.\\d+)?)px\\s*$/);if(null!=t){const[,e]=t,s=Number(e);isNaN(s)||(n=s*o+\"px\")}}const r=`${i} ${n} ${h}`;this.font=r,this.color=_.color2css(e,s),this.line_height=t.text_line_height.get_value()}infer_text_height(){if(this.text.includes(\"\\n\"))return\"ascent_descent\";return function(t){for(const e of new Set(t))if(!(\"0\"<=e&&e<=\"9\"))switch(e){case\",\":case\".\":case\"+\":case\"-\":case\"−\":case\"e\":continue;default:return!1}return!0}(this.text)?\"cap\":\"ascent_descent\"}_text_line(t){var e;const s=null!==(e=this.text_height_metric)&&void 0!==e?e:this.infer_text_height(),i=(()=>{switch(s){case\"x\":case\"x_descent\":return t.x_height;case\"cap\":case\"cap_descent\":return t.cap_height;case\"ascent\":case\"ascent_descent\":return t.ascent}})(),n=(()=>{switch(s){case\"x\":case\"cap\":case\"ascent\":return 0;case\"x_descent\":case\"cap_descent\":case\"ascent_descent\":return t.descent}})();return{height:i+n,ascent:i,descent:n}}get nlines(){return this.text.split(\"\\n\").length}_size(){var t,e;const{font:i}=this,n=o.font_metrics(i),h=(this.line_height-1)*n.height,a=\"\"==this.text,c=this.text.split(\"\\n\"),_=c.length,l=c.map((t=>s.text_width(t,i))),x=this._text_line(n).height*_,u=\"%\"==(null===(t=this.width)||void 0===t?void 0:t.unit)?this.width.value:1,p=\"%\"==(null===(e=this.height)||void 0===e?void 0:e.unit)?this.height.value:1;return{width:r.max(l)*u,height:a?0:(x+h*(_-1))*p,metrics:n}}_computed_position(t,e,s){const{width:i,height:n}=t,{sx:h,sy:o,x_anchor:r=\"left\",y_anchor:c=\"center\"}=this.position;return{x:h-(()=>{if(a.isNumber(r))return r*i;switch(r){case\"left\":return 0;case\"center\":return.5*i;case\"right\":return i}})(),y:o-(()=>{var t;if(a.isNumber(c))return c*n;switch(c){case\"top\":return 0;case\"center\":return.5*n;case\"bottom\":return n;case\"baseline\":if(1!=s)return.5*n;switch(null!==(t=this.text_height_metric)&&void 0!==t?t:this.infer_text_height()){case\"x\":case\"x_descent\":return e.x_height;case\"cap\":case\"cap_descent\":return e.cap_height;case\"ascent\":case\"ascent_descent\":return e.ascent}}})()}}_rect(){const{width:t,height:e,metrics:s}=this._size(),i=this.text.split(\"\\n\").length,{x:n,y:o}=this._computed_position({width:t,height:e},s,i);return new h.BBox({x:n,y:o,width:t,height:e}).rect}paint(t){var e,i;const{font:n}=this,h=o.font_metrics(n),a=(this.line_height-1)*h.height,c=this.text.split(\"\\n\"),_=c.length,l=c.map((t=>s.text_width(t,n))),x=this._text_line(h),u=x.height*_,p=\"%\"==(null===(e=this.width)||void 0===e?void 0:e.unit)?this.width.value:1,g=\"%\"==(null===(i=this.height)||void 0===i?void 0:i.unit)?this.height.value:1,f=r.max(l)*p,d=(u+a*(_-1))*g;t.save(),t.fillStyle=this.color,t.font=this.font,t.textAlign=\"left\",t.textBaseline=\"alphabetic\";const{sx:m,sy:b}=this.position,{align:y}=this,{angle:w}=this;w&&(t.translate(m,b),t.rotate(w),t.translate(-m,-b));let{x:v,y:z}=this._computed_position({width:f,height:d},h,_);if(\"justify\"==y)for(let e=0;e<_;e++){let i=v;const h=c[e].split(\" \"),o=h.length,_=h.map((t=>s.text_width(t,n))),l=(f-r.sum(_))/(o-1);for(let e=0;e<o;e++)t.fillText(h[e],i,z),i+=_[e]+l;z+=x.height+a}else for(let e=0;e<_;e++){const s=v+(()=>{switch(y){case\"left\":return 0;case\"center\":return.5*(f-l[e]);case\"right\":return f-l[e]}})();t.fillStyle=this.color,t.fillText(c[e],s,z+x.ascent),z+=x.height+a}t.restore()}}s.TextBox=x,x.__name__=\"TextBox\";class u extends l{constructor(t,e){super(),this.base=t,this.expo=e}get children(){return[this.base,this.expo]}set position(t){this._position=t;const e=this.base.size(),s=this.expo.size(),i=this._shift_scale()*e.height,n=Math.max(e.height,i+s.height);this.base.position={sx:0,x_anchor:\"left\",sy:n,y_anchor:\"bottom\"},this.expo.position={sx:e.width,x_anchor:\"left\",sy:i,y_anchor:\"bottom\"}}get position(){return this._position}set visuals(t){this.expo.font_size_scale=.7,this.base.visuals=t,this.expo.visuals=t}_shift_scale(){if(this.base instanceof x&&1==this.base.nlines){const{x_height:t,cap_height:e}=o.font_metrics(this.base.font);return t/e}return 2/3}infer_text_height(){return this.base.infer_text_height()}_rect(){const t=this.base.bbox(),e=this.expo.bbox(),s=t.union(e),{x:i,y:n}=this._computed_position();return s.translate(i,n).rect}_size(){const t=this.base.size(),e=this.expo.size();return{width:t.width+e.width,height:Math.max(t.height,this._shift_scale()*t.height+e.height)}}paint(t){t.save();const{angle:e}=this;if(e){const{sx:s,sy:i}=this.position;t.translate(s,i),t.rotate(e),t.translate(-s,-i)}const{x:s,y:i}=this._computed_position();t.translate(s,i),this.base.paint(t),this.expo.paint(t),t.restore()}paint_bbox(t){super.paint_bbox(t);const{x:e,y:s}=this._computed_position();t.save(),t.translate(e,s);for(const e of this.children)e.paint_bbox(t);t.restore()}_computed_position(){const{width:t,height:e}=this._size(),{sx:s,sy:i,x_anchor:n=\"left\",y_anchor:h=\"center\"}=this.position;return{x:s-(()=>{if(a.isNumber(n))return n*t;switch(n){case\"left\":return 0;case\"center\":return.5*t;case\"right\":return t}})(),y:i-(()=>{if(a.isNumber(h))return h*e;switch(h){case\"top\":return 0;case\"center\":return.5*e;case\"bottom\":return e;case\"baseline\":return.5*e}})()}}}s.BaseExpo=u,u.__name__=\"BaseExpo\";class p{constructor(t){this.items=t}get length(){return this.items.length}set visuals(t){for(const e of this.items)e.visuals=t;const e={x:0,cap:1,ascent:2,x_descent:3,cap_descent:4,ascent_descent:5},s=r.max_by(this.items.map((t=>t.infer_text_height())),(t=>e[t]));for(const t of this.items)t.text_height_metric=s}set angle(t){for(const e of this.items)e.angle=t}max_size(){let t=0,e=0;for(const s of this.items){const i=s.size();t=Math.max(t,i.width),e=Math.max(e,i.height)}return{width:t,height:e}}}s.GraphicsBoxes=p,p.__name__=\"GraphicsBoxes\"},\n", | |
" function _(t,s,r,n,i){n();const{sin:e,cos:a}=Math;class h{constructor(t=1,s=0,r=0,n=1,i=0,e=0){this.a=t,this.b=s,this.c=r,this.d=n,this.e=i,this.f=e}toString(){const{a:t,b:s,c:r,d:n,e:i,f:e}=this;return`matrix(${t}, ${s}, ${r}, ${n}, ${i}, ${e})`}clone(){const{a:t,b:s,c:r,d:n,e:i,f:e}=this;return new h(t,s,r,n,i,e)}get is_identity(){const{a:t,b:s,c:r,d:n,e:i,f:e}=this;return 1==t&&0==s&&0==r&&1==n&&0==i&&0==e}apply_point(t){const[s,r]=this.apply(t.x,t.y);return{x:s,y:r}}apply_rect(t){return{p0:this.apply_point(t.p0),p1:this.apply_point(t.p1),p2:this.apply_point(t.p2),p3:this.apply_point(t.p3)}}apply(t,s){const{a:r,b:n,c:i,d:e,e:a,f:h}=this;return[r*t+i*s+a,n*t+e*s+h]}iv_apply(t,s){const{a:r,b:n,c:i,d:e,e:a,f:h}=this,p=t.length;for(let o=0;o<p;o++){const p=t[o],c=s[o];t[o]=r*p+i*c+a,s[o]=n*p+e*c+h}}transform(t,s,r,n,i,e){const{a,b:h,c:p,d:o,e:c,f:l}=this;return this.a=a*t+p*s,this.c=a*r+p*n,this.e=a*i+p*e+c,this.b=h*t+o*s,this.d=h*r+o*n,this.f=h*i+o*e+l,this}translate(t,s){return this.transform(1,0,0,1,t,s)}scale(t,s){return this.transform(t,0,0,s,0,0)}skew(t,s){return this.transform(1,s,t,1,0,0)}rotate(t){const s=e(t),r=a(t);return this.transform(r,s,-s,r,0,0)}rotate_ccw(t){return this.rotate(-t)}translate_x(t){return this.translate(t,0)}translate_y(t){return this.translate(0,t)}flip(){return this.scale(-1,-1)}flip_x(){return this.scale(1,-1)}flip_y(){return this.scale(-1,1)}}r.AffineTransform=h,h.__name__=\"AffineTransform\"},\n", | |
" function _(e,n,s,t,i){t();const l=e(53),c=e(13),o=e(34),r=e(8),a=e(24);class u extends l.Model{constructor(e){super(e)}}s.LabelingPolicy=u,u.__name__=\"LabelingPolicy\";class _ extends u{constructor(e){super(e)}filter(e,n,s){return e}}s.AllLabels=_,_.__name__=\"AllLabels\";class d extends u{constructor(e){super(e)}static init_NoOverlap(){this.define((({Number:e})=>({min_distance:[e,5]})))}filter(e,n,s){const{min_distance:t}=this;let i=null;for(const n of e)null!=i&&s(i,n)<t?e.unset(n):i=n;return e}}s.NoOverlap=d,d.__name__=\"NoOverlap\",d.init_NoOverlap();class m extends u{constructor(e){super(e)}static init_CustomLabelingPolicy(){this.define((({Unknown:e,String:n,Dict:s})=>({args:[s(e),{}],code:[n,\"\"]})))}get names(){return c.keys(this.args)}get values(){return c.values(this.args)}get func(){const e=o.use_strict(this.code);return new a.GeneratorFunction(\"indices\",\"bboxes\",\"distance\",...this.names,e)}filter(e,n,s){const t=Object.create(null),i=this.func.call(t,e,n,s,...this.values);let l=i.next();if(l.done&&void 0!==l.value){const{value:n}=l;return n instanceof a.Indices?n:void 0===n?e:r.isIterable(n)?a.Indices.from_indices(e.size,n):a.Indices.all_unset(e.size)}{const n=[];do{n.push(l.value),l=i.next()}while(!l.done);return a.Indices.from_indices(e.size,n)}}}s.CustomLabelingPolicy=m,m.__name__=\"CustomLabelingPolicy\",m.init_CustomLabelingPolicy()},\n", | |
" function _(t,s,e,o,i){o();const a=t(1),r=t(163),l=t(171),_=t(172),n=a.__importStar(t(48)),c=t(20),p=t(167),h=t(8);class m extends r.AxisView{_paint(t,s,e){this._draw_group_separators(t,s,e)}_draw_group_separators(t,s,e){const[o]=this.ranges,[i,a]=this.computed_bounds;if(!o.tops||o.tops.length<2||!this.visuals.separator_line.doit)return;const r=this.dimension,l=(r+1)%2,_=[[],[]];let n=0;for(let t=0;t<o.tops.length-1;t++){let s,e;for(let i=n;i<o.factors.length;i++)if(o.factors[i][0]==o.tops[t+1]){[s,e]=[o.factors[i-1],o.factors[i]],n=i;break}const c=(o.synthetic(s)+o.synthetic(e))/2;c>i&&c<a&&(_[r].push(c),_[l].push(this.loc))}const c=this.extents.tick_label;this._draw_ticks(t,_,-3,c-6,this.visuals.separator_line)}_draw_major_labels(t,s,e){const o=this._get_factor_info();let i=s.tick+this.model.major_label_standoff;for(let e=0;e<o.length;e++){const[a,r,l,_]=o[e];this._draw_oriented_labels(t,a,r,l,this.panel.side,i,_),i+=s.tick_labels[e]}}_tick_label_extents(){const t=this._get_factor_info(),s=[];for(const[e,,o,i]of t){const t=this._oriented_labels_extent(e,o,this.model.major_label_standoff,i);s.push(t)}return s}_get_factor_info(){const[t]=this.ranges,[s,e]=this.computed_bounds,o=this.loc,i=this.model.ticker.get_ticks(s,e,t,o),a=this.tick_coords,r=[],l=t=>new p.GraphicsBoxes(t.map((t=>h.isString(t)?new p.TextBox({text:t}):t))),_=t=>l(this.model.formatter.doFormat(t,this));if(1==t.levels){const t=_(i.major);r.push([t,a.major,this.model.major_label_orientation,this.visuals.major_label_text])}else if(2==t.levels){const t=_(i.major.map((t=>t[1])));r.push([t,a.major,this.model.major_label_orientation,this.visuals.major_label_text]),r.push([l(i.tops),a.tops,this.model.group_label_orientation,this.visuals.group_text])}else if(3==t.levels){const t=_(i.major.map((t=>t[2]))),s=i.mids.map((t=>t[1]));r.push([t,a.major,this.model.major_label_orientation,this.visuals.major_label_text]),r.push([l(s),a.mids,this.model.subgroup_label_orientation,this.visuals.subgroup_text]),r.push([l(i.tops),a.tops,this.model.group_label_orientation,this.visuals.group_text])}return r}get tick_coords(){const t=this.dimension,s=(t+1)%2,[e]=this.ranges,[o,i]=this.computed_bounds,a=this.model.ticker.get_ticks(o,i,e,this.loc),r={major:[[],[]],mids:[[],[]],tops:[[],[]],minor:[[],[]]};return r.major[t]=a.major,r.major[s]=a.major.map((()=>this.loc)),3==e.levels&&(r.mids[t]=a.mids,r.mids[s]=a.mids.map((()=>this.loc))),e.levels>1&&(r.tops[t]=a.tops,r.tops[s]=a.tops.map((()=>this.loc))),r}}e.CategoricalAxisView=m,m.__name__=\"CategoricalAxisView\";class u extends r.Axis{constructor(t){super(t)}static init_CategoricalAxis(){this.prototype.default_view=m,this.mixins([[\"separator_\",n.Line],[\"group_\",n.Text],[\"subgroup_\",n.Text]]),this.define((({Number:t,Or:s})=>({group_label_orientation:[s(c.TickLabelOrientation,t),\"parallel\"],subgroup_label_orientation:[s(c.TickLabelOrientation,t),\"parallel\"]}))),this.override({ticker:()=>new l.CategoricalTicker,formatter:()=>new _.CategoricalTickFormatter,separator_line_color:\"lightgrey\",separator_line_width:2,group_text_font_style:\"bold\",group_text_font_size:\"11px\",group_text_color:\"grey\",subgroup_text_font_style:\"bold\",subgroup_text_font_size:\"11px\"})}}e.CategoricalAxis=u,u.__name__=\"CategoricalAxis\",u.init_CategoricalAxis()},\n", | |
" function _(t,c,o,s,e){s();const r=t(165);class i extends r.Ticker{constructor(t){super(t)}get_ticks(t,c,o,s){var e,r;return{major:this._collect(o.factors,o,t,c),minor:[],tops:this._collect(null!==(e=o.tops)&&void 0!==e?e:[],o,t,c),mids:this._collect(null!==(r=o.mids)&&void 0!==r?r:[],o,t,c)}}_collect(t,c,o,s){const e=[];for(const r of t){const t=c.synthetic(r);t>o&&t<s&&e.push(r)}return e}}o.CategoricalTicker=i,i.__name__=\"CategoricalTicker\"},\n", | |
" function _(t,r,o,c,a){c();const e=t(166),n=t(9);class i extends e.TickFormatter{constructor(t){super(t)}doFormat(t,r){return n.copy(t)}}o.CategoricalTickFormatter=i,i.__name__=\"CategoricalTickFormatter\"},\n", | |
" function _(s,n,i,o,u){o();const e=s(163);class t extends e.AxisView{}i.ContinuousAxisView=t,t.__name__=\"ContinuousAxisView\";class _ extends e.Axis{constructor(s){super(s)}}i.ContinuousAxis=_,_.__name__=\"ContinuousAxis\"},\n", | |
" function _(e,t,i,s,a){s();const n=e(175),r=e(180),m=e(185);class _ extends n.LinearAxisView{}i.DatetimeAxisView=_,_.__name__=\"DatetimeAxisView\";class c extends n.LinearAxis{constructor(e){super(e)}static init_DatetimeAxis(){this.prototype.default_view=_,this.override({ticker:()=>new m.DatetimeTicker,formatter:()=>new r.DatetimeTickFormatter})}}i.DatetimeAxis=c,c.__name__=\"DatetimeAxis\",c.init_DatetimeAxis()},\n", | |
" function _(i,e,s,n,t){n();const r=i(173),a=i(176),o=i(177);class c extends r.ContinuousAxisView{}s.LinearAxisView=c,c.__name__=\"LinearAxisView\";class _ extends r.ContinuousAxis{constructor(i){super(i)}static init_LinearAxis(){this.prototype.default_view=c,this.override({ticker:()=>new o.BasicTicker,formatter:()=>new a.BasicTickFormatter})}}s.LinearAxis=_,_.__name__=\"LinearAxis\",_.init_LinearAxis()},\n", | |
" function _(i,t,e,n,o){n();const s=i(166),r=i(34);function c(i){let t=\"\";for(const e of i)t+=\"-\"==e?\"−\":e;return t}e.unicode_replace=c;class _ extends s.TickFormatter{constructor(i){super(i),this.last_precision=3}static init_BasicTickFormatter(){this.define((({Boolean:i,Int:t,Auto:e,Or:n})=>({precision:[n(t,e),\"auto\"],use_scientific:[i,!0],power_limit_high:[t,5],power_limit_low:[t,-3]})))}get scientific_limit_low(){return 10**this.power_limit_low}get scientific_limit_high(){return 10**this.power_limit_high}_need_sci(i){if(!this.use_scientific)return!1;const{scientific_limit_high:t}=this,{scientific_limit_low:e}=this,n=i.length<2?0:Math.abs(i[1]-i[0])/1e4;for(const o of i){const i=Math.abs(o);if(!(i<=n)&&(i>=t||i<=e))return!0}return!1}_format_with_precision(i,t,e){return t?i.map((i=>c(i.toExponential(e)))):i.map((i=>c(r.to_fixed(i,e))))}_auto_precision(i,t){const e=new Array(i.length),n=this.last_precision<=15;i:for(let o=this.last_precision;n?o<=15:o>=1;n?o++:o--){if(t){e[0]=i[0].toExponential(o);for(let t=1;t<i.length;t++)if(e[t]==e[t-1])continue i;this.last_precision=o;break}e[0]=r.to_fixed(i[0],o);for(let t=1;t<i.length;t++)if(e[t]=r.to_fixed(i[t],o),e[t]==e[t-1])continue i;this.last_precision=o;break}return this.last_precision}doFormat(i,t){if(0==i.length)return[];const e=this._need_sci(i),n=\"auto\"==this.precision?this._auto_precision(i,e):this.precision;return this._format_with_precision(i,e,n)}}e.BasicTickFormatter=_,_.__name__=\"BasicTickFormatter\",_.init_BasicTickFormatter()},\n", | |
" function _(c,e,s,i,n){i();const r=c(178);class t extends r.AdaptiveTicker{constructor(c){super(c)}}s.BasicTicker=t,t.__name__=\"BasicTicker\"},\n", | |
" function _(t,i,a,e,s){e();const n=t(179),r=t(9),_=t(10);class l extends n.ContinuousTicker{constructor(t){super(t)}static init_AdaptiveTicker(){this.define((({Number:t,Array:i,Nullable:a})=>({base:[t,10],mantissas:[i(t),[1,2,5]],min_interval:[t,0],max_interval:[a(t),null]})))}get_min_interval(){return this.min_interval}get_max_interval(){var t;return null!==(t=this.max_interval)&&void 0!==t?t:1/0}initialize(){super.initialize();const t=r.nth(this.mantissas,-1)/this.base,i=r.nth(this.mantissas,0)*this.base;this.extended_mantissas=[t,...this.mantissas,i],this.base_factor=0===this.get_min_interval()?1:this.get_min_interval()}get_interval(t,i,a){const e=i-t,s=this.get_ideal_interval(t,i,a),n=Math.floor(_.log(s/this.base_factor,this.base)),l=this.base**n*this.base_factor,h=this.extended_mantissas,m=h.map((t=>Math.abs(a-e/(t*l)))),v=h[r.argmin(m)]*l;return _.clamp(v,this.get_min_interval(),this.get_max_interval())}}a.AdaptiveTicker=l,l.__name__=\"AdaptiveTicker\",l.init_AdaptiveTicker()},\n", | |
" function _(t,i,n,s,e){s();const o=t(165),r=t(9);class c extends o.Ticker{constructor(t){super(t)}static init_ContinuousTicker(){this.define((({Int:t})=>({num_minor_ticks:[t,5],desired_num_ticks:[t,6]})))}get_ticks(t,i,n,s){return this.get_ticks_no_defaults(t,i,s,this.desired_num_ticks)}get_ticks_no_defaults(t,i,n,s){const e=this.get_interval(t,i,s),o=Math.floor(t/e),c=Math.ceil(i/e);let _;_=isFinite(o)&&isFinite(c)?r.range(o,c+1):[];const u=_.map((t=>t*e)).filter((n=>t<=n&&n<=i)),a=this.num_minor_ticks,f=[];if(a>0&&u.length>0){const n=e/a,s=r.range(0,a).map((t=>t*n));for(const n of s.slice(1)){const s=u[0]-n;t<=s&&s<=i&&f.push(s)}for(const n of u)for(const e of s){const s=n+e;t<=s&&s<=i&&f.push(s)}}return{major:u,minor:f}}get_ideal_interval(t,i,n){return(i-t)/n}}n.ContinuousTicker=c,c.__name__=\"ContinuousTicker\",c.init_ContinuousTicker()},\n", | |
" function _(t,s,e,i,n){i();const r=t(1).__importDefault(t(181)),o=t(166),a=t(19),c=t(182),m=t(9),u=t(8);function h(t){return r.default(t,\"%Y %m %d %H %M %S\").split(/\\s+/).map((t=>parseInt(t,10)))}function d(t,s){if(u.isFunction(s))return s(t);{const e=c.sprintf(\"$1%06d\",function(t){return Math.round(t/1e3%1*1e6)}(t));return-1==(s=s.replace(/((^|[^%])(%%)*)%f/,e)).indexOf(\"%\")?s:r.default(t,s)}}const l=[\"microseconds\",\"milliseconds\",\"seconds\",\"minsec\",\"minutes\",\"hourmin\",\"hours\",\"days\",\"months\",\"years\"];class f extends o.TickFormatter{constructor(t){super(t),this.strip_leading_zeros=!0}static init_DatetimeTickFormatter(){this.define((({String:t,Array:s})=>({microseconds:[s(t),[\"%fus\"]],milliseconds:[s(t),[\"%3Nms\",\"%S.%3Ns\"]],seconds:[s(t),[\"%Ss\"]],minsec:[s(t),[\":%M:%S\"]],minutes:[s(t),[\":%M\",\"%Mm\"]],hourmin:[s(t),[\"%H:%M\"]],hours:[s(t),[\"%Hh\",\"%H:%M\"]],days:[s(t),[\"%m/%d\",\"%a%d\"]],months:[s(t),[\"%m/%Y\",\"%b %Y\"]],years:[s(t),[\"%Y\"]]})))}initialize(){super.initialize(),this._update_width_formats()}_update_width_formats(){const t=+r.default(new Date),s=function(s){const e=s.map((s=>d(t,s).length)),i=m.sort_by(m.zip(e,s),(([t])=>t));return m.unzip(i)};this._width_formats={microseconds:s(this.microseconds),milliseconds:s(this.milliseconds),seconds:s(this.seconds),minsec:s(this.minsec),minutes:s(this.minutes),hourmin:s(this.hourmin),hours:s(this.hours),days:s(this.days),months:s(this.months),years:s(this.years)}}_get_resolution_str(t,s){const e=1.1*t;switch(!1){case!(e<.001):return\"microseconds\";case!(e<1):return\"milliseconds\";case!(e<60):return s>=60?\"minsec\":\"seconds\";case!(e<3600):return s>=3600?\"hourmin\":\"minutes\";case!(e<86400):return\"hours\";case!(e<2678400):return\"days\";case!(e<31536e3):return\"months\";default:return\"years\"}}doFormat(t,s){if(0==t.length)return[];const e=Math.abs(t[t.length-1]-t[0])/1e3,i=e/(t.length-1),n=this._get_resolution_str(i,e),[,[r]]=this._width_formats[n],o=[],c=l.indexOf(n),m={};for(const t of l)m[t]=0;m.seconds=5,m.minsec=4,m.minutes=4,m.hourmin=3,m.hours=3;for(const s of t){let t,e;try{e=h(s),t=d(s,r)}catch(t){a.logger.warn(`unable to format tick for timestamp value ${s}`),a.logger.warn(` - ${t}`),o.push(\"ERR\");continue}let i=!1,u=c;for(;0==e[m[l[u]]];){let r;if(u+=1,u==l.length)break;if((\"minsec\"==n||\"hourmin\"==n)&&!i){if(\"minsec\"==n&&0==e[4]&&0!=e[5]||\"hourmin\"==n&&0==e[3]&&0!=e[4]){r=this._width_formats[l[c-1]][1][0],t=d(s,r);break}i=!0}r=this._width_formats[l[u]][1][0],t=d(s,r)}if(this.strip_leading_zeros){let s=t.replace(/^0+/g,\"\");s!=t&&isNaN(parseInt(s))&&(s=`0${s}`),o.push(s)}else o.push(t)}return o}}e.DatetimeTickFormatter=f,f.__name__=\"DatetimeTickFormatter\",f.init_DatetimeTickFormatter()},\n", | |
" function _(e,t,n,r,o){!function(e){\"object\"==typeof t&&t.exports?t.exports=e():\"function\"==typeof define?define(e):this.tz=e()}((function(){function e(e,t,n){var r,o=t.day[1];do{r=new Date(Date.UTC(n,t.month,Math.abs(o++)))}while(t.day[0]<7&&r.getUTCDay()!=t.day[0]);return(r={clock:t.clock,sort:r.getTime(),rule:t,save:6e4*t.save,offset:e.offset})[r.clock]=r.sort+6e4*t.time,r.posix?r.wallclock=r[r.clock]+(e.offset+t.saved):r.posix=r[r.clock]-(e.offset+t.saved),r}function t(t,n,r){var o,a,u,i,l,s,c,f=t[t.zone],h=[],T=new Date(r).getUTCFullYear(),g=1;for(o=1,a=f.length;o<a&&!(f[o][n]<=r);o++);if((u=f[o]).rules){for(s=t[u.rules],c=T+1;c>=T-g;--c)for(o=0,a=s.length;o<a;o++)s[o].from<=c&&c<=s[o].to?h.push(e(u,s[o],c)):s[o].to<c&&1==g&&(g=c-s[o].to);for(h.sort((function(e,t){return e.sort-t.sort})),o=0,a=h.length;o<a;o++)r>=h[o][n]&&h[o][h[o].clock]>u[h[o].clock]&&(i=h[o])}return i&&((l=/^(.*)\\/(.*)$/.exec(u.format))?i.abbrev=l[i.save?2:1]:i.abbrev=u.format.replace(/%s/,i.rule.letter)),i||u}function n(e,n){return\"UTC\"==e.zone?n:(e.entry=t(e,\"posix\",n),n+e.entry.offset+e.entry.save)}function r(e,n){return\"UTC\"==e.zone?n:(e.entry=r=t(e,\"wallclock\",n),0<(o=n-r.wallclock)&&o<r.save?null:n-r.offset-r.save);var r,o}function o(e,t,o){var a,i=+(o[1]+1),s=o[2]*i,c=u.indexOf(o[3].toLowerCase());if(c>9)t+=s*l[c-10];else{if(a=new Date(n(e,t)),c<7)for(;s;)a.setUTCDate(a.getUTCDate()+i),a.getUTCDay()==c&&(s-=i);else 7==c?a.setUTCFullYear(a.getUTCFullYear()+s):8==c?a.setUTCMonth(a.getUTCMonth()+s):a.setUTCDate(a.getUTCDate()+s);null==(t=r(e,a.getTime()))&&(t=r(e,a.getTime()+864e5*i)-864e5*i)}return t}var a={clock:function(){return+new Date},zone:\"UTC\",entry:{abbrev:\"UTC\",offset:0,save:0},UTC:1,z:function(e,t,n,r){var o,a,u=this.entry.offset+this.entry.save,i=Math.abs(u/1e3),l=[],s=3600;for(o=0;o<3;o++)l.push((\"0\"+Math.floor(i/s)).slice(-2)),i%=s,s/=60;return\"^\"!=n||u?(\"^\"==n&&(r=3),3==r?(a=(a=l.join(\":\")).replace(/:00$/,\"\"),\"^\"!=n&&(a=a.replace(/:00$/,\"\"))):r?(a=l.slice(0,r+1).join(\":\"),\"^\"==n&&(a=a.replace(/:00$/,\"\"))):a=l.slice(0,2).join(\"\"),a=(a=(u<0?\"-\":\"+\")+a).replace(/([-+])(0)/,{_:\" $1\",\"-\":\"$1\"}[n]||\"$1$2\")):\"Z\"},\"%\":function(e){return\"%\"},n:function(e){return\"\\n\"},t:function(e){return\"\\t\"},U:function(e){return s(e,0)},W:function(e){return s(e,1)},V:function(e){return c(e)[0]},G:function(e){return c(e)[1]},g:function(e){return c(e)[1]%100},j:function(e){return Math.floor((e.getTime()-Date.UTC(e.getUTCFullYear(),0))/864e5)+1},s:function(e){return Math.floor(e.getTime()/1e3)},C:function(e){return Math.floor(e.getUTCFullYear()/100)},N:function(e){return e.getTime()%1e3*1e6},m:function(e){return e.getUTCMonth()+1},Y:function(e){return e.getUTCFullYear()},y:function(e){return e.getUTCFullYear()%100},H:function(e){return e.getUTCHours()},M:function(e){return e.getUTCMinutes()},S:function(e){return e.getUTCSeconds()},e:function(e){return e.getUTCDate()},d:function(e){return e.getUTCDate()},u:function(e){return e.getUTCDay()||7},w:function(e){return e.getUTCDay()},l:function(e){return e.getUTCHours()%12||12},I:function(e){return e.getUTCHours()%12||12},k:function(e){return e.getUTCHours()},Z:function(e){return this.entry.abbrev},a:function(e){return this[this.locale].day.abbrev[e.getUTCDay()]},A:function(e){return this[this.locale].day.full[e.getUTCDay()]},h:function(e){return this[this.locale].month.abbrev[e.getUTCMonth()]},b:function(e){return this[this.locale].month.abbrev[e.getUTCMonth()]},B:function(e){return this[this.locale].month.full[e.getUTCMonth()]},P:function(e){return this[this.locale].meridiem[Math.floor(e.getUTCHours()/12)].toLowerCase()},p:function(e){return this[this.locale].meridiem[Math.floor(e.getUTCHours()/12)]},R:function(e,t){return this.convert([t,\"%H:%M\"])},T:function(e,t){return this.convert([t,\"%H:%M:%S\"])},D:function(e,t){return this.convert([t,\"%m/%d/%y\"])},F:function(e,t){return this.convert([t,\"%Y-%m-%d\"])},x:function(e,t){return this.convert([t,this[this.locale].date])},r:function(e,t){return this.convert([t,this[this.locale].time12||\"%I:%M:%S\"])},X:function(e,t){return this.convert([t,this[this.locale].time24])},c:function(e,t){return this.convert([t,this[this.locale].dateTime])},convert:function(e){if(!e.length)return\"1.0.23\";var t,a,u,l,s,c=Object.create(this),f=[];for(t=0;t<e.length;t++)if(l=e[t],Array.isArray(l))t||isNaN(l[1])?l.splice.apply(e,[t--,1].concat(l)):s=l;else if(isNaN(l)){if(\"string\"==(u=typeof l))~l.indexOf(\"%\")?c.format=l:t||\"*\"!=l?!t&&(u=/^(\\d{4})-(\\d{2})-(\\d{2})(?:[T\\s](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d+))?)?(Z|(([+-])(\\d{2}(:\\d{2}){0,2})))?)?$/.exec(l))?((s=[]).push.apply(s,u.slice(1,8)),u[9]?(s.push(u[10]+1),s.push.apply(s,u[11].split(/:/))):u[8]&&s.push(1)):/^\\w{2,3}_\\w{2}$/.test(l)?c.locale=l:(u=i.exec(l))?f.push(u):c.zone=l:s=l;else if(\"function\"==u){if(u=l.call(c))return u}else if(/^\\w{2,3}_\\w{2}$/.test(l.name))c[l.name]=l;else if(l.zones){for(u in l.zones)c[u]=l.zones[u];for(u in l.rules)c[u]=l.rules[u]}}else t||(s=l);if(c[c.locale]||delete c.locale,c[c.zone]||delete c.zone,null!=s){if(\"*\"==s)s=c.clock();else if(Array.isArray(s)){for(u=[],a=!s[7],t=0;t<11;t++)u[t]=+(s[t]||0);--u[1],s=Date.UTC.apply(Date.UTC,u)+-u[7]*(36e5*u[8]+6e4*u[9]+1e3*u[10])}else s=Math.floor(s);if(!isNaN(s)){if(a&&(s=r(c,s)),null==s)return s;for(t=0,a=f.length;t<a;t++)s=o(c,s,f[t]);return c.format?(u=new Date(n(c,s)),c.format.replace(/%([-0_^]?)(:{0,3})(\\d*)(.)/g,(function(e,t,n,r,o){var a,i,l=\"0\";if(a=c[o]){for(e=String(a.call(c,u,s,t,n.length)),\"_\"==(t||a.style)&&(l=\" \"),i=\"-\"==t?0:a.pad||0;e.length<i;)e=l+e;for(i=\"-\"==t?0:r||a.pad;e.length<i;)e=l+e;\"N\"==o&&i<e.length&&(e=e.slice(0,i)),\"^\"==t&&(e=e.toUpperCase())}return e}))):s}}return function(){return c.convert(arguments)}},locale:\"en_US\",en_US:{date:\"%m/%d/%Y\",time24:\"%I:%M:%S %p\",time12:\"%I:%M:%S %p\",dateTime:\"%a %d %b %Y %I:%M:%S %p %Z\",meridiem:[\"AM\",\"PM\"],month:{abbrev:\"Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec\".split(\"|\"),full:\"January|February|March|April|May|June|July|August|September|October|November|December\".split(\"|\")},day:{abbrev:\"Sun|Mon|Tue|Wed|Thu|Fri|Sat\".split(\"|\"),full:\"Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday\".split(\"|\")}}},u=\"Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|year|month|day|hour|minute|second|millisecond\",i=new RegExp(\"^\\\\s*([+-])(\\\\d+)\\\\s+(\"+u+\")s?\\\\s*$\",\"i\"),l=[36e5,6e4,1e3,1];function s(e,t){var n,r,o;return r=new Date(Date.UTC(e.getUTCFullYear(),0)),n=Math.floor((e.getTime()-r.getTime())/864e5),r.getUTCDay()==t?o=0:8==(o=7-r.getUTCDay()+t)&&(o=1),n>=o?Math.floor((n-o)/7)+1:0}function c(e){var t,n,r;return n=e.getUTCFullYear(),t=new Date(Date.UTC(n,0)).getUTCDay(),(r=s(e,1)+(t>1&&t<=4?1:0))?53!=r||4==t||3==t&&29==new Date(n,1,29).getDate()?[r,e.getUTCFullYear()]:[1,e.getUTCFullYear()+1]:(n=e.getUTCFullYear()-1,[r=4==(t=new Date(Date.UTC(n,0)).getUTCDay())||3==t&&29==new Date(n,1,29).getDate()?53:52,e.getUTCFullYear()-1])}return u=u.toLowerCase().split(\"|\"),\"delmHMSUWVgCIky\".replace(/./g,(function(e){a[e].pad=2})),a.N.pad=9,a.j.pad=3,a.k.style=\"_\",a.l.style=\"_\",a.e.style=\"_\",function(){return a.convert(arguments)}}))},\n", | |
" function _(r,t,n,e,i){e();const u=r(1),a=u.__importStar(r(183)),f=r(184),o=u.__importDefault(r(181)),l=r(21),s=r(8);function c(r,...t){return f.sprintf(r,...t)}function m(r,t,n){if(s.isNumber(r)){return c((()=>{switch(!1){case Math.floor(r)!=r:return\"%d\";case!(Math.abs(r)>.1&&Math.abs(r)<1e3):return\"%0.3f\";default:return\"%0.3e\"}})(),r)}return`${r}`}function p(r,t,e){if(null==t)return m;if(null!=e&&r in e){const t=e[r];if(s.isString(t)){if(t in n.DEFAULT_FORMATTERS)return n.DEFAULT_FORMATTERS[t];throw new Error(`Unknown tooltip field formatter type '${t}'`)}return function(r,n,e){return t.format(r,n,e)}}return n.DEFAULT_FORMATTERS.numeral}function d(r,t,n,e){if(\"$\"==r[0]){return function(r,t){if(r in t)return t[r];throw new Error(`Unknown special variable '$${r}'`)}(r.substring(1),e)}return function(r,t,n){const e=t.get_column(r);if(null==e)return null;if(s.isNumber(n))return e[n];const i=e[n.index];if(s.isTypedArray(i)||s.isArray(i))return s.isArray(i[0])?i[n.dim2][n.dim1]:i[n.flat_index];return i}(r.substring(1).replace(/[{}]/g,\"\"),t,n)}n.FormatterType=l.Enum(\"numeral\",\"printf\",\"datetime\"),n.DEFAULT_FORMATTERS={numeral:(r,t,n)=>a.format(r,t),datetime:(r,t,n)=>o.default(r,t),printf:(r,t,n)=>c(t,r)},n.sprintf=c,n.basic_formatter=m,n.get_formatter=p,n.get_value=d,n.replace_placeholders=function(r,t,n,e,i={},u){let a,f;if(s.isString(r)?(a=r,f=!1):(a=r.html,f=!0),a=a.replace(/@\\$name/g,(r=>`@{${i.name}}`)),a=a.replace(/((?:\\$\\w+)|(?:@\\w+)|(?:@{(?:[^{}]+)}))(?:{([^{}]+)})?/g,((r,a,o)=>{const l=d(a,t,n,i);if(null==l)return u?u(\"???\"):\"???\";if(\"safe\"==o)return f=!0,`${l}`;const s=`${p(a,o,e)(l,o,i)}`;return u?u(s):s})),f){return[...(new DOMParser).parseFromString(a,\"text/html\").body.childNodes]}return a}},\n", | |
" function _(e,n,t,r,i){\n", | |
" /*!\n", | |
" * numbro.js\n", | |
" * version : 1.6.2\n", | |
" * author : Företagsplatsen AB\n", | |
" * license : MIT\n", | |
" * http://www.foretagsplatsen.se\n", | |
" */\n", | |
" var a,o={},l=o,u=\"en-US\",c=null,s=\"0,0\";void 0!==n&&n.exports;function f(e){this._value=e}function d(e){var n,t=\"\";for(n=0;n<e;n++)t+=\"0\";return t}function h(e,n,t,r){var i,a,o=Math.pow(10,n);return a=e.toFixed(0).search(\"e\")>-1?function(e,n){var t,r,i,a;return t=(a=e.toString()).split(\"e\")[0],i=a.split(\"e\")[1],a=t.split(\".\")[0]+(r=t.split(\".\")[1]||\"\")+d(i-r.length),n>0&&(a+=\".\"+d(n)),a}(e,n):(t(e*o)/o).toFixed(n),r&&(i=new RegExp(\"0{1,\"+r+\"}$\"),a=a.replace(i,\"\")),a}function p(e,n,t){return n.indexOf(\"$\")>-1?function(e,n,t){var r,i,a=n,l=a.indexOf(\"$\"),c=a.indexOf(\"(\"),s=a.indexOf(\"+\"),f=a.indexOf(\"-\"),d=\"\",h=\"\";-1===a.indexOf(\"$\")?\"infix\"===o[u].currency.position?(h=o[u].currency.symbol,o[u].currency.spaceSeparated&&(h=\" \"+h+\" \")):o[u].currency.spaceSeparated&&(d=\" \"):a.indexOf(\" $\")>-1?(d=\" \",a=a.replace(\" $\",\"\")):a.indexOf(\"$ \")>-1?(d=\" \",a=a.replace(\"$ \",\"\")):a=a.replace(\"$\",\"\");if(i=m(e,a,t,h),-1===n.indexOf(\"$\"))switch(o[u].currency.position){case\"postfix\":i.indexOf(\")\")>-1?((i=i.split(\"\")).splice(-1,0,d+o[u].currency.symbol),i=i.join(\"\")):i=i+d+o[u].currency.symbol;break;case\"infix\":break;case\"prefix\":i.indexOf(\"(\")>-1||i.indexOf(\"-\")>-1?(i=i.split(\"\"),r=Math.max(c,f)+1,i.splice(r,0,o[u].currency.symbol+d),i=i.join(\"\")):i=o[u].currency.symbol+d+i;break;default:throw Error('Currency position should be among [\"prefix\", \"infix\", \"postfix\"]')}else l<=1?i.indexOf(\"(\")>-1||i.indexOf(\"+\")>-1||i.indexOf(\"-\")>-1?(r=1,(l<c||l<s||l<f)&&(r=0),(i=i.split(\"\")).splice(r,0,o[u].currency.symbol+d),i=i.join(\"\")):i=o[u].currency.symbol+d+i:i.indexOf(\")\")>-1?((i=i.split(\"\")).splice(-1,0,d+o[u].currency.symbol),i=i.join(\"\")):i=i+d+o[u].currency.symbol;return i}(e,n,t):n.indexOf(\"%\")>-1?function(e,n,t){var r,i=\"\";e*=100,n.indexOf(\" %\")>-1?(i=\" \",n=n.replace(\" %\",\"\")):n=n.replace(\"%\",\"\");(r=m(e,n,t)).indexOf(\")\")>-1?((r=r.split(\"\")).splice(-1,0,i+\"%\"),r=r.join(\"\")):r=r+i+\"%\";return r}(e,n,t):n.indexOf(\":\")>-1?function(e){var n=Math.floor(e/60/60),t=Math.floor((e-60*n*60)/60),r=Math.round(e-60*n*60-60*t);return n+\":\"+(t<10?\"0\"+t:t)+\":\"+(r<10?\"0\"+r:r)}(e):m(e,n,t)}function m(e,n,t,r){var i,a,l,s,f,d,p,m,x,g,O,b,w,y,M,v,$,B=!1,E=!1,F=!1,k=\"\",U=!1,N=!1,S=!1,j=!1,D=!1,C=\"\",L=\"\",T=Math.abs(e),K=[\"B\",\"KiB\",\"MiB\",\"GiB\",\"TiB\",\"PiB\",\"EiB\",\"ZiB\",\"YiB\"],G=[\"B\",\"KB\",\"MB\",\"GB\",\"TB\",\"PB\",\"EB\",\"ZB\",\"YB\"],I=\"\",P=!1,R=!1;if(0===e&&null!==c)return c;if(!isFinite(e))return\"\"+e;if(0===n.indexOf(\"{\")){var W=n.indexOf(\"}\");if(-1===W)throw Error('Format should also contain a \"}\"');b=n.slice(1,W),n=n.slice(W+1)}else b=\"\";if(n.indexOf(\"}\")===n.length-1){var Y=n.indexOf(\"{\");if(-1===Y)throw Error('Format should also contain a \"{\"');w=n.slice(Y+1,-1),n=n.slice(0,Y+1)}else w=\"\";if(v=null===($=-1===n.indexOf(\".\")?n.match(/([0-9]+).*/):n.match(/([0-9]+)\\..*/))?-1:$[1].length,-1!==n.indexOf(\"-\")&&(P=!0),n.indexOf(\"(\")>-1?(B=!0,n=n.slice(1,-1)):n.indexOf(\"+\")>-1&&(E=!0,n=n.replace(/\\+/g,\"\")),n.indexOf(\"a\")>-1){if(g=n.split(\".\")[0].match(/[0-9]+/g)||[\"0\"],g=parseInt(g[0],10),U=n.indexOf(\"aK\")>=0,N=n.indexOf(\"aM\")>=0,S=n.indexOf(\"aB\")>=0,j=n.indexOf(\"aT\")>=0,D=U||N||S||j,n.indexOf(\" a\")>-1?(k=\" \",n=n.replace(\" a\",\"\")):n=n.replace(\"a\",\"\"),p=0===(p=(f=Math.floor(Math.log(T)/Math.LN10)+1)%3)?3:p,g&&0!==T&&(d=Math.floor(Math.log(T)/Math.LN10)+1-g,m=3*~~((Math.min(g,f)-p)/3),T/=Math.pow(10,m),-1===n.indexOf(\".\")&&g>3))for(n+=\"[.]\",M=(M=0===d?0:3*~~(d/3)-d)<0?M+3:M,i=0;i<M;i++)n+=\"0\";Math.floor(Math.log(Math.abs(e))/Math.LN10)+1!==g&&(T>=Math.pow(10,12)&&!D||j?(k+=o[u].abbreviations.trillion,e/=Math.pow(10,12)):T<Math.pow(10,12)&&T>=Math.pow(10,9)&&!D||S?(k+=o[u].abbreviations.billion,e/=Math.pow(10,9)):T<Math.pow(10,9)&&T>=Math.pow(10,6)&&!D||N?(k+=o[u].abbreviations.million,e/=Math.pow(10,6)):(T<Math.pow(10,6)&&T>=Math.pow(10,3)&&!D||U)&&(k+=o[u].abbreviations.thousand,e/=Math.pow(10,3)))}if(n.indexOf(\"b\")>-1)for(n.indexOf(\" b\")>-1?(C=\" \",n=n.replace(\" b\",\"\")):n=n.replace(\"b\",\"\"),s=0;s<=K.length;s++)if(a=Math.pow(1024,s),l=Math.pow(1024,s+1),e>=a&&e<l){C+=K[s],a>0&&(e/=a);break}if(n.indexOf(\"d\")>-1)for(n.indexOf(\" d\")>-1?(C=\" \",n=n.replace(\" d\",\"\")):n=n.replace(\"d\",\"\"),s=0;s<=G.length;s++)if(a=Math.pow(1e3,s),l=Math.pow(1e3,s+1),e>=a&&e<l){C+=G[s],a>0&&(e/=a);break}if(n.indexOf(\"o\")>-1&&(n.indexOf(\" o\")>-1?(L=\" \",n=n.replace(\" o\",\"\")):n=n.replace(\"o\",\"\"),o[u].ordinal&&(L+=o[u].ordinal(e))),n.indexOf(\"[.]\")>-1&&(F=!0,n=n.replace(\"[.]\",\".\")),x=e.toString().split(\".\")[0],O=n.split(\".\")[1],y=n.indexOf(\",\"),O){if(x=(I=-1!==O.indexOf(\"*\")?h(e,e.toString().split(\".\")[1].length,t):O.indexOf(\"[\")>-1?h(e,(O=(O=O.replace(\"]\",\"\")).split(\"[\"))[0].length+O[1].length,t,O[1].length):h(e,O.length,t)).split(\".\")[0],I.split(\".\")[1].length)I=(r?k+r:o[u].delimiters.decimal)+I.split(\".\")[1];else I=\"\";F&&0===Number(I.slice(1))&&(I=\"\")}else x=h(e,null,t);return x.indexOf(\"-\")>-1&&(x=x.slice(1),R=!0),x.length<v&&(x=new Array(v-x.length+1).join(\"0\")+x),y>-1&&(x=x.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g,\"$1\"+o[u].delimiters.thousands)),0===n.indexOf(\".\")&&(x=\"\"),b+(n.indexOf(\"(\")<n.indexOf(\"-\")?(B&&R?\"(\":\"\")+(P&&R||!B&&R?\"-\":\"\"):(P&&R||!B&&R?\"-\":\"\")+(B&&R?\"(\":\"\"))+(!R&&E&&0!==e?\"+\":\"\")+x+I+(L||\"\")+(k&&!r?k:\"\")+(C||\"\")+(B&&R?\")\":\"\")+w}function x(e,n){o[e]=n}function g(e){u=e;var n=o[e].defaults;n&&n.format&&a.defaultFormat(n.format),n&&n.currencyFormat&&a.defaultCurrencyFormat(n.currencyFormat)}(a=function(e){return a.isNumbro(e)?e=e.value():0===e||void 0===e?e=0:Number(e)||(e=a.fn.unformat(e)),new f(Number(e))}).version=\"1.6.2\",a.isNumbro=function(e){return e instanceof f},a.setLanguage=function(e,n){console.warn(\"`setLanguage` is deprecated since version 1.6.0. Use `setCulture` instead\");var t=e,r=e.split(\"-\")[0],i=null;l[t]||(Object.keys(l).forEach((function(e){i||e.split(\"-\")[0]!==r||(i=e)})),t=i||n||\"en-US\"),g(t)},a.setCulture=function(e,n){var t=e,r=e.split(\"-\")[1],i=null;o[t]||(r&&Object.keys(o).forEach((function(e){i||e.split(\"-\")[1]!==r||(i=e)})),t=i||n||\"en-US\"),g(t)},a.language=function(e,n){if(console.warn(\"`language` is deprecated since version 1.6.0. Use `culture` instead\"),!e)return u;if(e&&!n){if(!l[e])throw new Error(\"Unknown language : \"+e);g(e)}return!n&&l[e]||x(e,n),a},a.culture=function(e,n){if(!e)return u;if(e&&!n){if(!o[e])throw new Error(\"Unknown culture : \"+e);g(e)}return!n&&o[e]||x(e,n),a},a.languageData=function(e){if(console.warn(\"`languageData` is deprecated since version 1.6.0. Use `cultureData` instead\"),!e)return l[u];if(!l[e])throw new Error(\"Unknown language : \"+e);return l[e]},a.cultureData=function(e){if(!e)return o[u];if(!o[e])throw new Error(\"Unknown culture : \"+e);return o[e]},a.culture(\"en-US\",{delimiters:{thousands:\",\",decimal:\".\"},abbreviations:{thousand:\"k\",million:\"m\",billion:\"b\",trillion:\"t\"},ordinal:function(e){var n=e%10;return 1==~~(e%100/10)?\"th\":1===n?\"st\":2===n?\"nd\":3===n?\"rd\":\"th\"},currency:{symbol:\"$\",position:\"prefix\"},defaults:{currencyFormat:\",0000 a\"},formats:{fourDigits:\"0000 a\",fullWithTwoDecimals:\"$ ,0.00\",fullWithTwoDecimalsNoCurrency:\",0.00\"}}),a.languages=function(){return console.warn(\"`languages` is deprecated since version 1.6.0. Use `cultures` instead\"),l},a.cultures=function(){return o},a.zeroFormat=function(e){c=\"string\"==typeof e?e:null},a.defaultFormat=function(e){s=\"string\"==typeof e?e:\"0.0\"},a.defaultCurrencyFormat=function(e){\"string\"==typeof e?e:\"0$\"},a.validate=function(e,n){var t,r,i,o,l,u,c,s;if(\"string\"!=typeof e&&(e+=\"\",console.warn&&console.warn(\"Numbro.js: Value is not string. It has been co-erced to: \",e)),(e=e.trim()).match(/^\\d+$/))return!0;if(\"\"===e)return!1;try{c=a.cultureData(n)}catch(e){c=a.cultureData(a.culture())}return i=c.currency.symbol,l=c.abbreviations,t=c.delimiters.decimal,r=\".\"===c.delimiters.thousands?\"\\\\.\":c.delimiters.thousands,(null===(s=e.match(/^[^\\d]+/))||(e=e.substr(1),s[0]===i))&&((null===(s=e.match(/[^\\d]+$/))||(e=e.slice(0,-1),s[0]===l.thousand||s[0]===l.million||s[0]===l.billion||s[0]===l.trillion))&&(u=new RegExp(r+\"{2}\"),!e.match(/[^\\d.,]/g)&&(!((o=e.split(t)).length>2)&&(o.length<2?!!o[0].match(/^\\d+.*\\d$/)&&!o[0].match(u):1===o[0].length?!!o[0].match(/^\\d+$/)&&!o[0].match(u)&&!!o[1].match(/^\\d+$/):!!o[0].match(/^\\d+.*\\d$/)&&!o[0].match(u)&&!!o[1].match(/^\\d+$/)))))},n.exports={format:function(e,n,t,r){return null!=t&&t!==a.culture()&&a.setCulture(t),p(Number(e),null!=n?n:s,null==r?Math.round:r)}}},\n", | |
" function _(e,n,t,r,i){!function(){\"use strict\";var e={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\x25]+/,modulo:/^\\x25{2}/,placeholder:/^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\d]*)/i,key_access:/^\\.([a-z_][a-z_\\d]*)/i,index_access:/^\\[(\\d+)\\]/,sign:/^[+-]/};function n(e){return i(a(e),arguments)}function r(e,t){return n.apply(null,[e].concat(t||[]))}function i(t,r){var i,s,a,o,p,c,l,u,f,d=1,g=t.length,y=\"\";for(s=0;s<g;s++)if(\"string\"==typeof t[s])y+=t[s];else if(\"object\"==typeof t[s]){if((o=t[s]).keys)for(i=r[d],a=0;a<o.keys.length;a++){if(null==i)throw new Error(n('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"',o.keys[a],o.keys[a-1]));i=i[o.keys[a]]}else i=o.param_no?r[o.param_no]:r[d++];if(e.not_type.test(o.type)&&e.not_primitive.test(o.type)&&i instanceof Function&&(i=i()),e.numeric_arg.test(o.type)&&\"number\"!=typeof i&&isNaN(i))throw new TypeError(n(\"[sprintf] expecting number but found %T\",i));switch(e.number.test(o.type)&&(u=i>=0),o.type){case\"b\":i=parseInt(i,10).toString(2);break;case\"c\":i=String.fromCharCode(parseInt(i,10));break;case\"d\":case\"i\":i=parseInt(i,10);break;case\"j\":i=JSON.stringify(i,null,o.width?parseInt(o.width):0);break;case\"e\":i=o.precision?parseFloat(i).toExponential(o.precision):parseFloat(i).toExponential();break;case\"f\":i=o.precision?parseFloat(i).toFixed(o.precision):parseFloat(i);break;case\"g\":i=o.precision?String(Number(i.toPrecision(o.precision))):parseFloat(i);break;case\"o\":i=(parseInt(i,10)>>>0).toString(8);break;case\"s\":i=String(i),i=o.precision?i.substring(0,o.precision):i;break;case\"t\":i=String(!!i),i=o.precision?i.substring(0,o.precision):i;break;case\"T\":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=o.precision?i.substring(0,o.precision):i;break;case\"u\":i=parseInt(i,10)>>>0;break;case\"v\":i=i.valueOf(),i=o.precision?i.substring(0,o.precision):i;break;case\"x\":i=(parseInt(i,10)>>>0).toString(16);break;case\"X\":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}e.json.test(o.type)?y+=i:(!e.number.test(o.type)||u&&!o.sign?f=\"\":(f=u?\"+\":\"-\",i=i.toString().replace(e.sign,\"\")),c=o.pad_char?\"0\"===o.pad_char?\"0\":o.pad_char.charAt(1):\" \",l=o.width-(f+i).length,p=o.width&&l>0?c.repeat(l):\"\",y+=o.align?f+i+p:\"0\"===c?f+p+i:p+f+i)}return y}var s=Object.create(null);function a(n){if(s[n])return s[n];for(var t,r=n,i=[],a=0;r;){if(null!==(t=e.text.exec(r)))i.push(t[0]);else if(null!==(t=e.modulo.exec(r)))i.push(\"%\");else{if(null===(t=e.placeholder.exec(r)))throw new SyntaxError(\"[sprintf] unexpected placeholder\");if(t[2]){a|=1;var o=[],p=t[2],c=[];if(null===(c=e.key.exec(p)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");for(o.push(c[1]);\"\"!==(p=p.substring(c[0].length));)if(null!==(c=e.key_access.exec(p)))o.push(c[1]);else{if(null===(c=e.index_access.exec(p)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");o.push(c[1])}t[2]=o}else a|=2;if(3===a)throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\");i.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}r=r.substring(t[0].length)}return s[n]=i}void 0!==t&&(t.sprintf=n,t.vsprintf=r),\"undefined\"!=typeof window&&(window.sprintf=n,window.vsprintf=r,\"function\"==typeof define&&define.amd&&define((function(){return{sprintf:n,vsprintf:r}})))}()},\n", | |
" function _(e,i,n,t,a){t();const s=e(9),r=e(178),c=e(186),m=e(187),_=e(190),k=e(191),o=e(189);class T extends c.CompositeTicker{constructor(e){super(e)}static init_DatetimeTicker(){this.override({num_minor_ticks:0,tickers:()=>[new r.AdaptiveTicker({mantissas:[1,2,5],base:10,min_interval:0,max_interval:500*o.ONE_MILLI,num_minor_ticks:0}),new r.AdaptiveTicker({mantissas:[1,2,5,10,15,20,30],base:60,min_interval:o.ONE_SECOND,max_interval:30*o.ONE_MINUTE,num_minor_ticks:0}),new r.AdaptiveTicker({mantissas:[1,2,4,6,8,12],base:24,min_interval:o.ONE_HOUR,max_interval:12*o.ONE_HOUR,num_minor_ticks:0}),new m.DaysTicker({days:s.range(1,32)}),new m.DaysTicker({days:s.range(1,31,3)}),new m.DaysTicker({days:[1,8,15,22]}),new m.DaysTicker({days:[1,15]}),new _.MonthsTicker({months:s.range(0,12,1)}),new _.MonthsTicker({months:s.range(0,12,2)}),new _.MonthsTicker({months:s.range(0,12,4)}),new _.MonthsTicker({months:s.range(0,12,6)}),new k.YearsTicker({})]})}}n.DatetimeTicker=T,T.__name__=\"DatetimeTicker\",T.init_DatetimeTicker()},\n", | |
" function _(t,e,i,s,r){s();const n=t(179),_=t(9);class a extends n.ContinuousTicker{constructor(t){super(t)}static init_CompositeTicker(){this.define((({Array:t,Ref:e})=>({tickers:[t(e(n.ContinuousTicker)),[]]})))}get min_intervals(){return this.tickers.map((t=>t.get_min_interval()))}get max_intervals(){return this.tickers.map((t=>t.get_max_interval()))}get_min_interval(){return this.min_intervals[0]}get_max_interval(){return this.max_intervals[0]}get_best_ticker(t,e,i){const s=e-t,r=this.get_ideal_interval(t,e,i),n=[_.sorted_index(this.min_intervals,r)-1,_.sorted_index(this.max_intervals,r)],a=[this.min_intervals[n[0]],this.max_intervals[n[1]]].map((t=>Math.abs(i-s/t)));let c;if(_.is_empty(a.filter((t=>!isNaN(t)))))c=this.tickers[0];else{const t=n[_.argmin(a)];c=this.tickers[t]}return c}get_interval(t,e,i){return this.get_best_ticker(t,e,i).get_interval(t,e,i)}get_ticks_no_defaults(t,e,i,s){return this.get_best_ticker(t,e,s).get_ticks_no_defaults(t,e,i,s)}}i.CompositeTicker=a,a.__name__=\"CompositeTicker\",a.init_CompositeTicker()},\n", | |
" function _(t,e,n,i,s){i();const a=t(188),o=t(189),r=t(9);class c extends a.SingleIntervalTicker{constructor(t){super(t)}static init_DaysTicker(){this.define((({Int:t,Array:e})=>({days:[e(t),[]]}))),this.override({num_minor_ticks:0})}initialize(){super.initialize();const t=this.days;t.length>1?this.interval=(t[1]-t[0])*o.ONE_DAY:this.interval=31*o.ONE_DAY}get_ticks_no_defaults(t,e,n,i){const s=function(t,e){const n=o.last_month_no_later_than(new Date(t)),i=o.last_month_no_later_than(new Date(e));i.setUTCMonth(i.getUTCMonth()+1);const s=[],a=n;for(;s.push(o.copy_date(a)),a.setUTCMonth(a.getUTCMonth()+1),!(a>i););return s}(t,e),a=this.days,c=this.interval;return{major:r.concat(s.map((t=>((t,e)=>{const n=t.getUTCMonth(),i=[];for(const s of a){const a=o.copy_date(t);a.setUTCDate(s),new Date(a.getTime()+e/2).getUTCMonth()==n&&i.push(a)}return i})(t,c)))).map((t=>t.getTime())).filter((n=>t<=n&&n<=e)),minor:[]}}}n.DaysTicker=c,c.__name__=\"DaysTicker\",c.init_DaysTicker()},\n", | |
" function _(e,t,n,i,r){i();const l=e(179);class a extends l.ContinuousTicker{constructor(e){super(e)}static init_SingleIntervalTicker(){this.define((({Number:e})=>({interval:[e]})))}get_interval(e,t,n){return this.interval}get_min_interval(){return this.interval}get_max_interval(){return this.interval}}n.SingleIntervalTicker=a,a.__name__=\"SingleIntervalTicker\",a.init_SingleIntervalTicker()},\n", | |
" function _(t,n,e,_,E){function N(t){return new Date(t.getTime())}function O(t){const n=N(t);return n.setUTCDate(1),n.setUTCHours(0),n.setUTCMinutes(0),n.setUTCSeconds(0),n.setUTCMilliseconds(0),n}_(),e.ONE_MILLI=1,e.ONE_SECOND=1e3,e.ONE_MINUTE=60*e.ONE_SECOND,e.ONE_HOUR=60*e.ONE_MINUTE,e.ONE_DAY=24*e.ONE_HOUR,e.ONE_MONTH=30*e.ONE_DAY,e.ONE_YEAR=365*e.ONE_DAY,e.copy_date=N,e.last_month_no_later_than=O,e.last_year_no_later_than=function(t){const n=O(t);return n.setUTCMonth(0),n}},\n", | |
" function _(t,e,n,i,s){i();const r=t(188),a=t(189),o=t(9);class c extends r.SingleIntervalTicker{constructor(t){super(t)}static init_MonthsTicker(){this.define((({Int:t,Array:e})=>({months:[e(t),[]]})))}initialize(){super.initialize();const t=this.months;t.length>1?this.interval=(t[1]-t[0])*a.ONE_MONTH:this.interval=12*a.ONE_MONTH}get_ticks_no_defaults(t,e,n,i){const s=function(t,e){const n=a.last_year_no_later_than(new Date(t)),i=a.last_year_no_later_than(new Date(e));i.setUTCFullYear(i.getUTCFullYear()+1);const s=[],r=n;for(;s.push(a.copy_date(r)),r.setUTCFullYear(r.getUTCFullYear()+1),!(r>i););return s}(t,e),r=this.months;return{major:o.concat(s.map((t=>r.map((e=>{const n=a.copy_date(t);return n.setUTCMonth(e),n}))))).map((t=>t.getTime())).filter((n=>t<=n&&n<=e)),minor:[]}}}n.MonthsTicker=c,c.__name__=\"MonthsTicker\",c.init_MonthsTicker()},\n", | |
" function _(e,t,a,i,r){i();const n=e(177),_=e(188),s=e(189);class c extends _.SingleIntervalTicker{constructor(e){super(e)}initialize(){super.initialize(),this.interval=s.ONE_YEAR,this.basic_ticker=new n.BasicTicker({num_minor_ticks:0})}get_ticks_no_defaults(e,t,a,i){const r=s.last_year_no_later_than(new Date(e)).getUTCFullYear(),n=s.last_year_no_later_than(new Date(t)).getUTCFullYear();return{major:this.basic_ticker.get_ticks_no_defaults(r,n,a,i).major.map((e=>Date.UTC(e,0,1))).filter((a=>e<=a&&a<=t)),minor:[]}}}a.YearsTicker=c,c.__name__=\"YearsTicker\"},\n", | |
" function _(i,s,t,e,o){e();const n=i(173),r=i(193),_=i(194);class c extends n.ContinuousAxisView{}t.LogAxisView=c,c.__name__=\"LogAxisView\";class x extends n.ContinuousAxis{constructor(i){super(i)}static init_LogAxis(){this.prototype.default_view=c,this.override({ticker:()=>new _.LogTicker,formatter:()=>new r.LogTickFormatter})}}t.LogAxis=x,x.__name__=\"LogAxis\",x.init_LogAxis()},\n", | |
" function _(t,e,r,i,n){i();const o=t(166),a=t(176),s=t(194),c=t(167),{log:l,round:u}=Math;class _ extends o.TickFormatter{constructor(t){super(t)}static init_LogTickFormatter(){this.define((({Ref:t,Nullable:e})=>({ticker:[e(t(s.LogTicker)),null]})))}initialize(){super.initialize(),this.basic_formatter=new a.BasicTickFormatter}format_graphics(t,e){var r,i;if(0==t.length)return[];const n=null!==(i=null===(r=this.ticker)||void 0===r?void 0:r.base)&&void 0!==i?i:10,o=this._exponents(t,n);return null==o?this.basic_formatter.format_graphics(t,e):o.map((t=>{const e=new c.TextBox({text:a.unicode_replace(`${n}`)}),r=new c.TextBox({text:a.unicode_replace(`${t}`)});return new c.BaseExpo(e,r)}))}_exponents(t,e){let r=null;const i=[];for(const n of t){const t=u(l(n)/l(e));if(r==t)return null;r=t,i.push(t)}return i}doFormat(t,e){var r,i;if(0==t.length)return[];const n=null!==(i=null===(r=this.ticker)||void 0===r?void 0:r.base)&&void 0!==i?i:10,o=this._exponents(t,n);return null==o?this.basic_formatter.doFormat(t,e):o.map((t=>a.unicode_replace(`${n}^${t}`)))}}r.LogTickFormatter=_,_.__name__=\"LogTickFormatter\",_.init_LogTickFormatter()},\n", | |
" function _(t,o,e,i,s){i();const n=t(178),r=t(9);class c extends n.AdaptiveTicker{constructor(t){super(t)}static init_LogTicker(){this.override({mantissas:[1,5]})}get_ticks_no_defaults(t,o,e,i){const s=this.num_minor_ticks,n=[],c=this.base,a=Math.log(t)/Math.log(c),f=Math.log(o)/Math.log(c),l=f-a;let h;if(isFinite(l))if(l<2){const e=this.get_interval(t,o,i),c=Math.floor(t/e),a=Math.ceil(o/e);if(h=r.range(c,a+1).filter((t=>0!=t)).map((t=>t*e)).filter((e=>t<=e&&e<=o)),s>0&&h.length>0){const t=e/s,o=r.range(0,s).map((o=>o*t));for(const t of o.slice(1))n.push(h[0]-t);for(const t of h)for(const e of o)n.push(t+e)}}else{const t=Math.ceil(.999999*a),o=Math.floor(1.000001*f),e=Math.ceil((o-t)/9);if(h=r.range(t-1,o+1,e).map((t=>c**t)),s>0&&h.length>0){const t=c**e/s,o=r.range(1,s+1).map((o=>o*t));for(const t of o)n.push(h[0]/t);n.push(h[0]);for(const t of h)for(const e of o)n.push(t*e)}}else h=[];return{major:h.filter((e=>t<=e&&e<=o)),minor:n.filter((e=>t<=e&&e<=o))}}}e.LogTicker=c,c.__name__=\"LogTicker\",c.init_LogTicker()},\n", | |
" function _(e,t,i,r,s){r();const a=e(163),o=e(175),c=e(196),n=e(197);class _ extends a.AxisView{}i.MercatorAxisView=_,_.__name__=\"MercatorAxisView\";class x extends o.LinearAxis{constructor(e){super(e)}static init_MercatorAxis(){this.prototype.default_view=_,this.override({ticker:()=>new n.MercatorTicker({dimension:\"lat\"}),formatter:()=>new c.MercatorTickFormatter({dimension:\"lat\"})})}}i.MercatorAxis=x,x.__name__=\"MercatorAxis\",x.init_MercatorAxis()},\n", | |
" function _(r,t,e,o,n){o();const i=r(176),c=r(20),a=r(65);class s extends i.BasicTickFormatter{constructor(r){super(r)}static init_MercatorTickFormatter(){this.define((({Nullable:r})=>({dimension:[r(c.LatLon),null]})))}doFormat(r,t){if(null==this.dimension)throw new Error(\"MercatorTickFormatter.dimension not configured\");if(0==r.length)return[];const e=r.length,o=new Array(e);if(\"lon\"==this.dimension)for(let n=0;n<e;n++){const[e]=a.wgs84_mercator.invert(r[n],t.loc);o[n]=e}else for(let n=0;n<e;n++){const[,e]=a.wgs84_mercator.invert(t.loc,r[n]);o[n]=e}return super.doFormat(o,t)}}e.MercatorTickFormatter=s,s.__name__=\"MercatorTickFormatter\",s.init_MercatorTickFormatter()},\n", | |
" function _(t,o,n,r,s){r();const i=t(177),e=t(20),c=t(65);class _ extends i.BasicTicker{constructor(t){super(t)}static init_MercatorTicker(){this.define((({Nullable:t})=>({dimension:[t(e.LatLon),null]})))}get_ticks_no_defaults(t,o,n,r){if(null==this.dimension)throw new Error(`${this}.dimension wasn't configured`);return[t,o]=c.clip_mercator(t,o,this.dimension),\"lon\"==this.dimension?this._get_ticks_lon(t,o,n,r):this._get_ticks_lat(t,o,n,r)}_get_ticks_lon(t,o,n,r){const[s]=c.wgs84_mercator.invert(t,n),[i,e]=c.wgs84_mercator.invert(o,n),_=super.get_ticks_no_defaults(s,i,n,r),a=[];for(const t of _.major)if(c.in_bounds(t,\"lon\")){const[o]=c.wgs84_mercator.compute(t,e);a.push(o)}const m=[];for(const t of _.minor)if(c.in_bounds(t,\"lon\")){const[o]=c.wgs84_mercator.compute(t,e);m.push(o)}return{major:a,minor:m}}_get_ticks_lat(t,o,n,r){const[,s]=c.wgs84_mercator.invert(n,t),[i,e]=c.wgs84_mercator.invert(n,o),_=super.get_ticks_no_defaults(s,e,n,r),a=[];for(const t of _.major)if(c.in_bounds(t,\"lat\")){const[,o]=c.wgs84_mercator.compute(i,t);a.push(o)}const m=[];for(const t of _.minor)if(c.in_bounds(t,\"lat\")){const[,o]=c.wgs84_mercator.compute(i,t);m.push(o)}return{major:a,minor:m}}}n.MercatorTicker=_,_.__name__=\"MercatorTicker\",_.init_MercatorTicker()},\n", | |
" function _(e,i,r,c,k){c(),k(\"AdaptiveTicker\",e(178).AdaptiveTicker),k(\"BasicTicker\",e(177).BasicTicker),k(\"CategoricalTicker\",e(171).CategoricalTicker),k(\"CompositeTicker\",e(186).CompositeTicker),k(\"ContinuousTicker\",e(179).ContinuousTicker),k(\"DatetimeTicker\",e(185).DatetimeTicker),k(\"DaysTicker\",e(187).DaysTicker),k(\"FixedTicker\",e(199).FixedTicker),k(\"LogTicker\",e(194).LogTicker),k(\"MercatorTicker\",e(197).MercatorTicker),k(\"MonthsTicker\",e(190).MonthsTicker),k(\"SingleIntervalTicker\",e(188).SingleIntervalTicker),k(\"Ticker\",e(165).Ticker),k(\"YearsTicker\",e(191).YearsTicker),k(\"BinnedTicker\",e(200).BinnedTicker)},\n", | |
" function _(i,t,e,r,n){r();const s=i(179);class _ extends s.ContinuousTicker{constructor(i){super(i)}static init_FixedTicker(){this.define((({Number:i,Array:t})=>({ticks:[t(i),[]],minor_ticks:[t(i),[]]})))}get_ticks_no_defaults(i,t,e,r){return{major:this.ticks,minor:this.minor_ticks}}get_interval(i,t,e){return 0}get_min_interval(){return 0}get_max_interval(){return 0}}e.FixedTicker=_,_.__name__=\"FixedTicker\",_.init_FixedTicker()},\n", | |
" function _(e,n,t,i,r){i();const c=e(165),o=e(201),s=e(12);class a extends c.Ticker{constructor(e){super(e)}static init_BinnedTicker(){this.define((({Number:e,Ref:n,Or:t,Auto:i})=>({mapper:[n(o.ScanningColorMapper)],num_major_ticks:[t(e,i),8]})))}get_ticks(e,n,t,i){const{binning:r}=this.mapper.metrics,c=Math.max(0,s.left_edge_index(e,r)),o=Math.min(s.left_edge_index(n,r)+1,r.length-1),a=[];for(let e=c;e<=o;e++)a.push(r[e]);const{num_major_ticks:_}=this,m=[],h=\"auto\"==_?a.length:_,l=Math.max(1,Math.floor(a.length/h));for(let e=0;e<a.length;e+=l)m.push(a[e]);return{major:m,minor:[]}}}t.BinnedTicker=a,a.__name__=\"BinnedTicker\",a.init_BinnedTicker()},\n", | |
" function _(n,e,i,r,o){r();const t=n(202),a=n(12);class c extends t.ContinuousColorMapper{constructor(n){super(n)}cmap(n,e,i,r,o){if(n<o.binning[0])return i;if(n>o.binning[o.binning.length-1])return r;return e[a.left_edge_index(n,o.binning)]}}i.ScanningColorMapper=c,c.__name__=\"ScanningColorMapper\"},\n", | |
" function _(t,o,e,n,s){n();const l=t(203),i=t(61),c=t(9),a=t(8);class r extends l.ColorMapper{constructor(t){super(t),this._scan_data=null}static init_ContinuousColorMapper(){this.define((({Number:t,String:o,Ref:e,Color:n,Or:s,Tuple:l,Array:c,Nullable:a})=>({high:[a(t),null],low:[a(t),null],high_color:[a(n),null],low_color:[a(n),null],domain:[c(l(e(i.GlyphRenderer),s(o,c(o)))),[]]})))}connect_signals(){super.connect_signals();const t=()=>{for(const[t]of this.domain)this.connect(t.view.change,(()=>this.update_data())),this.connect(t.data_source.selected.change,(()=>this.update_data()))};this.connect(this.properties.domain.change,(()=>t())),t()}update_data(){const{domain:t,palette:o}=this,e=[...this._collect(t)];this._scan_data=this.scan(e,o.length),this.metrics_change.emit(),this.change.emit()}get metrics(){return null==this._scan_data&&this.update_data(),this._scan_data}*_collect(t){for(const[o,e]of t)for(const t of a.isArray(e)?e:[e]){let e=o.data_source.get_column(t);e=o.view.indices.select(e);const n=o.view.masked,s=o.data_source.selected.indices;let l;if(null!=n&&s.length>0?l=c.intersection([...n],s):null!=n?l=[...n]:s.length>0&&(l=s),null!=l&&(e=c.map(l,(t=>e[t]))),e.length>0&&!a.isNumber(e[0]))for(const t of e)yield*t;else yield*e}}_v_compute(t,o,e,n){const{nan_color:s}=n;let{low_color:l,high_color:i}=n;null==l&&(l=e[0]),null==i&&(i=e[e.length-1]);const{domain:a}=this,r=c.is_empty(a)?t:[...this._collect(a)];this._scan_data=this.scan(r,e.length),this.metrics_change.emit();for(let n=0,c=t.length;n<c;n++){const c=t[n];isNaN(c)?o[n]=s:o[n]=this.cmap(c,e,l,i,this._scan_data)}}_colors(t){return Object.assign(Object.assign({},super._colors(t)),{low_color:null!=this.low_color?t(this.low_color):void 0,high_color:null!=this.high_color?t(this.high_color):void 0})}}e.ContinuousColorMapper=r,r.__name__=\"ContinuousColorMapper\",r.init_ContinuousColorMapper()},\n", | |
" function _(t,r,e,n,o){n();const i=t(204),a=t(15),c=t(24),_=t(22),l=t(27);function s(t){return _.encode_rgba(_.color2rgba(t))}function p(t){const r=new Uint32Array(t.length);for(let e=0,n=t.length;e<n;e++)r[e]=s(t[e]);return r}e._convert_color=s,e._convert_palette=p;class u extends i.Mapper{constructor(t){super(t)}initialize(){super.initialize(),this.metrics_change=new a.Signal0(this,\"metrics_change\")}static init_ColorMapper(){this.define((({Color:t,Array:r})=>({palette:[r(t)],nan_color:[t,\"gray\"]})))}v_compute(t){const r=new Array(t.length);return this._v_compute(t,r,this.palette,this._colors((t=>t))),r}get rgba_mapper(){const t=this,r=p(this.palette),e=this._colors(s);return{v_compute(n){const o=new c.ColorArray(n.length);return t._v_compute(n,o,r,e),new Uint8ClampedArray(l.to_big_endian(o).buffer)}}}_colors(t){return{nan_color:t(this.nan_color)}}}e.ColorMapper=u,u.__name__=\"ColorMapper\",u.init_ColorMapper()},\n", | |
" function _(r,e,n,s,o){s();const p=r(149);class t extends p.Transform{constructor(r){super(r)}compute(r){throw new Error(\"mapping single values is not supported\")}}n.Mapper=t,t.__name__=\"Mapper\"},\n", | |
" function _(t,r,a,e,c){e(),c(\"BasicTickFormatter\",t(176).BasicTickFormatter),c(\"CategoricalTickFormatter\",t(172).CategoricalTickFormatter),c(\"DatetimeTickFormatter\",t(180).DatetimeTickFormatter),c(\"FuncTickFormatter\",t(206).FuncTickFormatter),c(\"LogTickFormatter\",t(193).LogTickFormatter),c(\"MercatorTickFormatter\",t(196).MercatorTickFormatter),c(\"NumeralTickFormatter\",t(207).NumeralTickFormatter),c(\"PrintfTickFormatter\",t(208).PrintfTickFormatter),c(\"TickFormatter\",t(166).TickFormatter)},\n", | |
" function _(t,n,e,s,i){s();const r=t(166),c=t(13),a=t(34);class u extends r.TickFormatter{constructor(t){super(t)}static init_FuncTickFormatter(){this.define((({Unknown:t,String:n,Dict:e})=>({args:[e(t),{}],code:[n,\"\"]})))}get names(){return c.keys(this.args)}get values(){return c.values(this.args)}_make_func(){const t=a.use_strict(this.code);return new Function(\"tick\",\"index\",\"ticks\",...this.names,t)}doFormat(t,n){const e=this._make_func().bind({});return t.map(((t,n,s)=>e(t,n,s,...this.values)))}}e.FuncTickFormatter=u,u.__name__=\"FuncTickFormatter\",u.init_FuncTickFormatter()},\n", | |
" function _(r,t,n,e,a){e();const o=r(1).__importStar(r(183)),i=r(166),u=r(20);class c extends i.TickFormatter{constructor(r){super(r)}static init_NumeralTickFormatter(){this.define((({String:r})=>({format:[r,\"0,0\"],language:[r,\"en\"],rounding:[u.RoundingFunction,\"round\"]})))}get _rounding_fn(){switch(this.rounding){case\"round\":case\"nearest\":return Math.round;case\"floor\":case\"rounddown\":return Math.floor;case\"ceil\":case\"roundup\":return Math.ceil}}doFormat(r,t){const{format:n,language:e,_rounding_fn:a}=this;return r.map((r=>o.format(r,n,e,a)))}}n.NumeralTickFormatter=c,c.__name__=\"NumeralTickFormatter\",c.init_NumeralTickFormatter()},\n", | |
" function _(t,r,i,n,o){n();const a=t(166),e=t(182);class c extends a.TickFormatter{constructor(t){super(t)}static init_PrintfTickFormatter(){this.define((({String:t})=>({format:[t,\"%s\"]})))}doFormat(t,r){return t.map((t=>e.sprintf(this.format,t)))}}i.PrintfTickFormatter=c,c.__name__=\"PrintfTickFormatter\",c.init_PrintfTickFormatter()},\n", | |
" function _(r,o,a,p,e){p(),e(\"CategoricalColorMapper\",r(210).CategoricalColorMapper),e(\"CategoricalMarkerMapper\",r(212).CategoricalMarkerMapper),e(\"CategoricalPatternMapper\",r(213).CategoricalPatternMapper),e(\"ContinuousColorMapper\",r(202).ContinuousColorMapper),e(\"ColorMapper\",r(203).ColorMapper),e(\"LinearColorMapper\",r(214).LinearColorMapper),e(\"LogColorMapper\",r(215).LogColorMapper),e(\"ScanningColorMapper\",r(201).ScanningColorMapper),e(\"EqHistColorMapper\",r(216).EqHistColorMapper)},\n", | |
" function _(t,o,a,r,e){r();const c=t(211),l=t(203),i=t(104);class s extends l.ColorMapper{constructor(t){super(t)}static init_CategoricalColorMapper(){this.define((({Number:t,Nullable:o})=>({factors:[i.FactorSeq],start:[t,0],end:[o(t),null]})))}_v_compute(t,o,a,{nan_color:r}){c.cat_v_compute(t,this.factors,a,o,this.start,this.end,r)}}a.CategoricalColorMapper=s,s.__name__=\"CategoricalColorMapper\",s.init_CategoricalColorMapper()},\n", | |
" function _(n,t,e,l,i){l();const c=n(12),u=n(8);function f(n,t){if(n.length!=t.length)return!1;for(let e=0,l=n.length;e<l;e++)if(n[e]!==t[e])return!1;return!0}e._cat_equals=f,e.cat_v_compute=function(n,t,e,l,i,o,r){const _=n.length;for(let g=0;g<_;g++){let _,s,h=n[g];u.isString(h)?_=c.index_of(t,h):(null!=i?h=null!=o?h.slice(i,o):h.slice(i):null!=o&&(h=h.slice(0,o)),_=1==h.length?c.index_of(t,h[0]):c.find_index(t,(n=>f(n,h)))),s=_<0||_>=e.length?r:e[_],l[g]=s}}},\n", | |
" function _(r,e,a,t,s){t();const c=r(211),i=r(104),l=r(204),n=r(20);class p extends l.Mapper{constructor(r){super(r)}static init_CategoricalMarkerMapper(){this.define((({Number:r,Array:e,Nullable:a})=>({factors:[i.FactorSeq],markers:[e(n.MarkerType)],start:[r,0],end:[a(r),null],default_value:[n.MarkerType,\"circle\"]})))}v_compute(r){const e=new Array(r.length);return c.cat_v_compute(r,this.factors,this.markers,e,this.start,this.end,this.default_value),e}}a.CategoricalMarkerMapper=p,p.__name__=\"CategoricalMarkerMapper\",p.init_CategoricalMarkerMapper()},\n", | |
" function _(t,a,e,r,n){r();const s=t(211),c=t(104),i=t(204),p=t(20);class l extends i.Mapper{constructor(t){super(t)}static init_CategoricalPatternMapper(){this.define((({Number:t,Array:a,Nullable:e})=>({factors:[c.FactorSeq],patterns:[a(p.HatchPatternType)],start:[t,0],end:[e(t),null],default_value:[p.HatchPatternType,\" \"]})))}v_compute(t){const a=new Array(t.length);return s.cat_v_compute(t,this.factors,this.patterns,a,this.start,this.end,this.default_value),a}}e.CategoricalPatternMapper=l,l.__name__=\"CategoricalPatternMapper\",l.init_CategoricalPatternMapper()},\n", | |
" function _(n,r,o,t,a){t();const e=n(202),i=n(12);class s extends e.ContinuousColorMapper{constructor(n){super(n)}scan(n,r){const o=null!=this.low?this.low:i.min(n),t=null!=this.high?this.high:i.max(n);return{max:t,min:o,norm_factor:1/(t-o),normed_interval:1/r}}cmap(n,r,o,t,a){const e=r.length-1;if(n==a.max)return r[e];const i=(n-a.min)*a.norm_factor,s=Math.floor(i/a.normed_interval);return s<0?o:s>e?t:r[s]}}o.LinearColorMapper=s,s.__name__=\"LinearColorMapper\"},\n", | |
" function _(o,t,n,r,l){r();const a=o(202),s=o(12);class e extends a.ContinuousColorMapper{constructor(o){super(o)}scan(o,t){const n=null!=this.low?this.low:s.min(o),r=null!=this.high?this.high:s.max(o);return{max:r,min:n,scale:t/(Math.log(r)-Math.log(n))}}cmap(o,t,n,r,l){const a=t.length-1;if(o>l.max)return r;if(o==l.max)return t[a];if(o<l.min)return n;const s=Math.log(o)-Math.log(l.min);let e=Math.floor(s*l.scale);return e>a&&(e=a),t[e]}}n.LogColorMapper=e,e.__name__=\"LogColorMapper\"},\n", | |
" function _(n,t,i,e,o){e();const s=n(201),r=n(12),a=n(9),l=n(19);class c extends s.ScanningColorMapper{constructor(n){super(n)}static init_EqHistColorMapper(){this.define((({Int:n})=>({bins:[n,65536]})))}scan(n,t){const i=null!=this.low?this.low:r.min(n),e=null!=this.high?this.high:r.max(n),o=this.bins,s=a.linspace(i,e,o+1),c=r.bin_counts(n,s),h=new Array(o);for(let n=0,t=s.length;n<t-1;n++){const t=s[n],i=s[n+1];h[n]=(t+i)/2}const p=a.cumsum(c),g=p[p.length-1],u=r.map(p,(n=>n/g));let m=t-1,M=[],_=0,f=2*t;for(;m!=t&&_<4&&0!=m;){const n=f/m;if(n>1e3)break;f=Math.round(Math.max(t*n,t));const i=a.range(0,f),e=r.map(u,(n=>n*(f-1)));M=r.interpolate(i,e,h);m=a.uniq(M).length-1,_++}if(0==m){M=[i,e];for(let n=0;n<t-1;n++)M.push(e)}else M=M.slice(M.length-t-1),m!=t&&l.logger.warn(\"EqHistColorMapper warning: Histogram equalization did not converge.\");return M[0]=i,M[M.length-1]=e,{min:i,max:e,binning:M}}}i.EqHistColorMapper=c,c.__name__=\"EqHistColorMapper\",c.init_EqHistColorMapper()},\n", | |
" function _(a,e,l,c,n){c(),n(\"CategoricalScale\",a(145).CategoricalScale),n(\"ContinuousScale\",a(158).ContinuousScale),n(\"LinearScale\",a(218).LinearScale),n(\"LinearInterpolationScale\",a(219).LinearInterpolationScale),n(\"LogScale\",a(157).LogScale),n(\"Scale\",a(146).Scale)},\n", | |
" function _(e,t,n,r,_){r();const i=e(158);class u extends i.ContinuousScale{constructor(e){super(e)}get s_compute(){const[e,t]=this._linear_compute_state();return n=>e*n+t}compute(e){return this._linear_compute(e)}v_compute(e){return this._linear_v_compute(e)}invert(e){return this._linear_invert(e)}v_invert(e){return this._linear_v_invert(e)}}n.LinearScale=u,u.__name__=\"LinearScale\"},\n", | |
" function _(n,e,t,r,i){r();const a=n(146),o=n(12);class c extends a.Scale{constructor(n){super(n)}static init_LinearInterpolationScale(){this.internal((({Arrayable:n})=>({binning:[n]})))}get s_compute(){throw new Error(\"not implemented\")}compute(n){return n}v_compute(n){const{binning:e}=this,{start:t,end:r}=this.source_range,i=t,a=r,c=e.length,l=(r-t)/(c-1),s=new Float64Array(c);for(let n=0;n<c;n++)s[n]=t+n*l;const _=o.map(n,(n=>{if(n<i)return i;if(n>a)return a;const t=o.left_edge_index(n,e),r=e[t],c=(n-r)/(e[t+1]-r),l=s[t];return l+c*(s[t+1]-l)}));return this._linear_v_compute(_)}invert(n){return n}v_invert(n){return new Float64Array(n)}}t.LinearInterpolationScale=c,c.__name__=\"LinearInterpolationScale\",c.init_LinearInterpolationScale()},\n", | |
" function _(a,n,e,g,R){g(),R(\"DataRange\",a(160).DataRange),R(\"DataRange1d\",a(159).DataRange1d),R(\"FactorRange\",a(104).FactorRange),R(\"Range\",a(105).Range),R(\"Range1d\",a(156).Range1d)},\n", | |
" function _(a,o,i,t,e){t();var n=a(141);e(\"Sizeable\",n.Sizeable),e(\"SizingPolicy\",n.SizingPolicy);var c=a(142);e(\"Layoutable\",c.Layoutable),e(\"LayoutItem\",c.LayoutItem);var r=a(222);e(\"HStack\",r.HStack),e(\"VStack\",r.VStack);var l=a(223);e(\"Grid\",l.Grid),e(\"Row\",l.Row),e(\"Column\",l.Column);var S=a(224);e(\"ContentBox\",S.ContentBox),e(\"VariadicBox\",S.VariadicBox)},\n", | |
" function _(t,e,h,i,r){i();const n=t(142),o=t(99);class s ex |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment