njain commited on
Commit
f733f7d
·
1 Parent(s): 91432c2

Upload 4 files

Browse files
Files changed (4) hide show
  1. Dockerfile +7 -0
  2. app.py +6 -0
  3. requirements.txt +2 -0
  4. webpanel_ntbk.ipynb +498 -0
Dockerfile ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ FROM python:3.8
2
+ WORKDIR /code
3
+ COPY ./requirements.txt /code/requirements.txt
4
+ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
5
+ RUN python -m pickle webpanel_ntbk.pkl > webpanel_ntbk.py
6
+ COPY . .
7
+ CMD ["python", "run", "/code/webpanel_ntbk.py", "--address", "0.0.0.0", "--port", "7860", "--allow-websocket-origin" ,"nikhilj-webpanelpickle.hf.space"]
app.py ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import os
2
+ from subprocess import Popen
3
+
4
+ command = ["panel", "serve", f"nikhilj-webpanelpickle.hf.space:{os.environ.get('PORT', 7860)}"]
5
+ worker = Popen(command)
6
+ worker.wait()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ panel
2
+ pickle
webpanel_ntbk.ipynb ADDED
@@ -0,0 +1,498 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "nbformat": 4,
3
+ "nbformat_minor": 0,
4
+ "metadata": {
5
+ "colab": {
6
+ "provenance": []
7
+ },
8
+ "kernelspec": {
9
+ "name": "python3",
10
+ "display_name": "Python 3"
11
+ },
12
+ "language_info": {
13
+ "name": "python"
14
+ }
15
+ },
16
+ "cells": [
17
+ {
18
+ "cell_type": "code",
19
+ "execution_count": 7,
20
+ "metadata": {
21
+ "colab": {
22
+ "base_uri": "https://localhost:8080/",
23
+ "height": 17
24
+ },
25
+ "id": "ac8xD3TpgAkW",
26
+ "outputId": "c4a80608-1a9e-4418-f65d-49ea05afe6e2"
27
+ },
28
+ "outputs": [
29
+ {
30
+ "output_type": "display_data",
31
+ "data": {
32
+ "application/javascript": [
33
+ "(function(root) {\n",
34
+ " function now() {\n",
35
+ " return new Date();\n",
36
+ " }\n",
37
+ "\n",
38
+ " var force = true;\n",
39
+ "\n",
40
+ " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n",
41
+ " root._bokeh_onload_callbacks = [];\n",
42
+ " root._bokeh_is_loading = undefined;\n",
43
+ " }\n",
44
+ "\n",
45
+ " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n",
46
+ " root._bokeh_timeout = Date.now() + 5000;\n",
47
+ " root._bokeh_failed_load = false;\n",
48
+ " }\n",
49
+ "\n",
50
+ " function run_callbacks() {\n",
51
+ " try {\n",
52
+ " root._bokeh_onload_callbacks.forEach(function(callback) {\n",
53
+ " if (callback != null)\n",
54
+ " callback();\n",
55
+ " });\n",
56
+ " } finally {\n",
57
+ " delete root._bokeh_onload_callbacks\n",
58
+ " }\n",
59
+ " console.debug(\"Bokeh: all callbacks have finished\");\n",
60
+ " }\n",
61
+ "\n",
62
+ " function load_libs(css_urls, js_urls, js_modules, callback) {\n",
63
+ " if (css_urls == null) css_urls = [];\n",
64
+ " if (js_urls == null) js_urls = [];\n",
65
+ " if (js_modules == null) js_modules = [];\n",
66
+ "\n",
67
+ " root._bokeh_onload_callbacks.push(callback);\n",
68
+ " if (root._bokeh_is_loading > 0) {\n",
69
+ " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n",
70
+ " return null;\n",
71
+ " }\n",
72
+ " if (js_urls.length === 0 && js_modules.length === 0) {\n",
73
+ " run_callbacks();\n",
74
+ " return null;\n",
75
+ " }\n",
76
+ " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n",
77
+ "\n",
78
+ " function on_load() {\n",
79
+ " root._bokeh_is_loading--;\n",
80
+ " if (root._bokeh_is_loading === 0) {\n",
81
+ " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n",
82
+ " run_callbacks()\n",
83
+ " }\n",
84
+ " }\n",
85
+ "\n",
86
+ " function on_error() {\n",
87
+ " console.error(\"failed to load \" + url);\n",
88
+ " }\n",
89
+ "\n",
90
+ " for (var i = 0; i < css_urls.length; i++) {\n",
91
+ " var url = css_urls[i];\n",
92
+ " const element = document.createElement(\"link\");\n",
93
+ " element.onload = on_load;\n",
94
+ " element.onerror = on_error;\n",
95
+ " element.rel = \"stylesheet\";\n",
96
+ " element.type = \"text/css\";\n",
97
+ " element.href = url;\n",
98
+ " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n",
99
+ " document.body.appendChild(element);\n",
100
+ " }\n",
101
+ "\n",
102
+ " var skip = [];\n",
103
+ " if (window.requirejs) {\n",
104
+ " window.requirejs.config({'packages': {}, 'paths': {'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@4.2.5/dist/gridstack-h5', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'gridstack': {'exports': 'GridStack'}}});\n",
105
+ " require([\"gridstack\"], function(GridStack) {\n",
106
+ "\twindow.GridStack = GridStack\n",
107
+ "\ton_load()\n",
108
+ " })\n",
109
+ " require([\"notyf\"], function() {\n",
110
+ "\ton_load()\n",
111
+ " })\n",
112
+ " root._bokeh_is_loading = css_urls.length + 2;\n",
113
+ " } else {\n",
114
+ " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length;\n",
115
+ " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n",
116
+ " var urls = ['https://cdn.holoviz.org/panel/0.14.4/dist/bundled/gridstack/gridstack@4.2.5/dist/gridstack-h5.js'];\n",
117
+ " for (var i = 0; i < urls.length; i++) {\n",
118
+ " skip.push(urls[i])\n",
119
+ " }\n",
120
+ " } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n",
121
+ " var urls = ['https://cdn.holoviz.org/panel/0.14.4/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n",
122
+ " for (var i = 0; i < urls.length; i++) {\n",
123
+ " skip.push(urls[i])\n",
124
+ " }\n",
125
+ " } for (var i = 0; i < js_urls.length; i++) {\n",
126
+ " var url = js_urls[i];\n",
127
+ " if (skip.indexOf(url) >= 0) {\n",
128
+ "\tif (!window.requirejs) {\n",
129
+ "\t on_load();\n",
130
+ "\t}\n",
131
+ "\tcontinue;\n",
132
+ " }\n",
133
+ " var element = document.createElement('script');\n",
134
+ " element.onload = on_load;\n",
135
+ " element.onerror = on_error;\n",
136
+ " element.async = false;\n",
137
+ " element.src = url;\n",
138
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
139
+ " document.head.appendChild(element);\n",
140
+ " }\n",
141
+ " for (var i = 0; i < js_modules.length; i++) {\n",
142
+ " var url = js_modules[i];\n",
143
+ " if (skip.indexOf(url) >= 0) {\n",
144
+ "\tif (!window.requirejs) {\n",
145
+ "\t on_load();\n",
146
+ "\t}\n",
147
+ "\tcontinue;\n",
148
+ " }\n",
149
+ " var element = document.createElement('script');\n",
150
+ " element.onload = on_load;\n",
151
+ " element.onerror = on_error;\n",
152
+ " element.async = false;\n",
153
+ " element.src = url;\n",
154
+ " element.type = \"module\";\n",
155
+ " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n",
156
+ " document.head.appendChild(element);\n",
157
+ " }\n",
158
+ " if (!js_urls.length && !js_modules.length) {\n",
159
+ " on_load()\n",
160
+ " }\n",
161
+ " };\n",
162
+ "\n",
163
+ " function inject_raw_css(css) {\n",
164
+ " const element = document.createElement(\"style\");\n",
165
+ " element.appendChild(document.createTextNode(css));\n",
166
+ " document.body.appendChild(element);\n",
167
+ " }\n",
168
+ "\n",
169
+ " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\", \"https://unpkg.com/@holoviz/panel@0.14.4/dist/panel.min.js\"];\n",
170
+ " var js_modules = [];\n",
171
+ " var css_urls = [\"https://cdn.holoviz.org/panel/0.14.4/dist/css/card.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/alerts.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/loading.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/dataframe.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/debugger.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/markdown.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/json.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/widgets.css\"];\n",
172
+ " var inline_js = [ function(Bokeh) {\n",
173
+ " inject_raw_css(\"\\n .bk.pn-loading.arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n }\\n \");\n",
174
+ " }, function(Bokeh) {\n",
175
+ " Bokeh.set_log_level(\"info\");\n",
176
+ " },\n",
177
+ "function(Bokeh) {} // ensure no trailing comma for IE\n",
178
+ " ];\n",
179
+ "\n",
180
+ " function run_inline_js() {\n",
181
+ " if ((root.Bokeh !== undefined) || (force === true)) {\n",
182
+ " for (var i = 0; i < inline_js.length; i++) {\n",
183
+ " inline_js[i].call(root, root.Bokeh);\n",
184
+ " }} else if (Date.now() < root._bokeh_timeout) {\n",
185
+ " setTimeout(run_inline_js, 100);\n",
186
+ " } else if (!root._bokeh_failed_load) {\n",
187
+ " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n",
188
+ " root._bokeh_failed_load = true;\n",
189
+ " }\n",
190
+ " }\n",
191
+ "\n",
192
+ " if (root._bokeh_is_loading === 0) {\n",
193
+ " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n",
194
+ " run_inline_js();\n",
195
+ " } else {\n",
196
+ " load_libs(css_urls, js_urls, js_modules, function() {\n",
197
+ " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n",
198
+ " run_inline_js();\n",
199
+ " });\n",
200
+ " }\n",
201
+ "}(window));"
202
+ ],
203
+ "application/vnd.holoviews_load.v0+json": "(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\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({'packages': {}, 'paths': {'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@4.2.5/dist/gridstack-h5', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'gridstack': {'exports': 'GridStack'}}});\n require([\"gridstack\"], function(GridStack) {\n\twindow.GridStack = GridStack\n\ton_load()\n })\n require([\"notyf\"], function() {\n\ton_load()\n })\n root._bokeh_is_loading = css_urls.length + 2;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length;\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/0.14.4/dist/bundled/gridstack/gridstack@4.2.5/dist/gridstack-h5.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['Notyf'] !== undefined) && (!(window['Notyf'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/0.14.4/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) >= 0) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n 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) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n 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://cdn.bokeh.org/bokeh/release/bokeh-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.3.min.js\", \"https://unpkg.com/@holoviz/panel@0.14.4/dist/panel.min.js\"];\n var js_modules = [];\n var css_urls = [\"https://cdn.holoviz.org/panel/0.14.4/dist/css/card.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/alerts.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/loading.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/dataframe.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/debugger.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/markdown.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/json.css\", \"https://cdn.holoviz.org/panel/0.14.4/dist/css/widgets.css\"];\n var inline_js = [ function(Bokeh) {\n inject_raw_css(\"\\n .bk.pn-loading.arc:before {\\n background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHN0eWxlPSJtYXJnaW46IGF1dG87IGJhY2tncm91bmQ6IG5vbmU7IGRpc3BsYXk6IGJsb2NrOyBzaGFwZS1yZW5kZXJpbmc6IGF1dG87IiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiPiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjYzNjM2MzIiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij4gICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiB0eXBlPSJyb3RhdGUiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjFzIiB2YWx1ZXM9IjAgNTAgNTA7MzYwIDUwIDUwIiBrZXlUaW1lcz0iMDsxIj48L2FuaW1hdGVUcmFuc2Zvcm0+ICA8L2NpcmNsZT48L3N2Zz4=\\\");\\n background-size: auto calc(min(50%, 400px));\\n }\\n \");\n }, function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, js_modules, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));"
204
+ },
205
+ "metadata": {}
206
+ },
207
+ {
208
+ "output_type": "display_data",
209
+ "data": {
210
+ "application/vnd.holoviews_load.v0+json": "\nif ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n function JupyterCommManager() {\n }\n\n JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n comm_manager.register_target(comm_id, function(comm) {\n comm.on_msg(msg_handler);\n });\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n comm.onMsg = msg_handler;\n });\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n console.log(message)\n var content = {data: message.data, comm_id};\n var buffers = []\n for (var buffer of message.buffers || []) {\n buffers.push(new DataView(buffer))\n }\n var metadata = message.metadata || {};\n var msg = {content, buffers, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n })\n }\n }\n\n JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n if (comm_id in window.PyViz.comms) {\n return window.PyViz.comms[comm_id];\n } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n if (msg_handler) {\n comm.on_msg(msg_handler);\n }\n } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n comm.open();\n if (msg_handler) {\n comm.onMsg = msg_handler;\n }\n } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n var comm_promise = google.colab.kernel.comms.open(comm_id)\n comm_promise.then((comm) => {\n window.PyViz.comms[comm_id] = comm;\n if (msg_handler) {\n var messages = comm.messages[Symbol.asyncIterator]();\n function processIteratorResult(result) {\n var message = result.value;\n var content = {data: message.data};\n var metadata = message.metadata || {comm_id};\n var msg = {content, metadata}\n msg_handler(msg);\n return messages.next().then(processIteratorResult);\n }\n return messages.next().then(processIteratorResult);\n }\n }) \n var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n return comm_promise.then((comm) => {\n comm.send(data, metadata, buffers, disposeOnDone);\n });\n };\n var comm = {\n send: sendClosure\n };\n }\n window.PyViz.comms[comm_id] = comm;\n return comm;\n }\n window.PyViz.comm_manager = new JupyterCommManager();\n \n\n\nvar JS_MIME_TYPE = 'application/javascript';\nvar HTML_MIME_TYPE = 'text/html';\nvar EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\nvar CLASS_NAME = 'output';\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n var div = document.createElement(\"div\");\n var script = document.createElement(\"script\");\n node.appendChild(div);\n node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n var output_area = handle.output_area;\n var output = handle.output;\n if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n return\n }\n var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n if (id !== undefined) {\n var nchildren = toinsert.length;\n var html_node = toinsert[nchildren-1].children[0];\n html_node.innerHTML = output.data[HTML_MIME_TYPE];\n var scripts = [];\n var nodelist = html_node.querySelectorAll(\"script\");\n for (var i in nodelist) {\n if (nodelist.hasOwnProperty(i)) {\n scripts.push(nodelist[i])\n }\n }\n\n scripts.forEach( function (oldScript) {\n var newScript = document.createElement(\"script\");\n var attrs = [];\n var nodemap = oldScript.attributes;\n for (var j in nodemap) {\n if (nodemap.hasOwnProperty(j)) {\n attrs.push(nodemap[j])\n }\n }\n attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n oldScript.parentNode.replaceChild(newScript, oldScript);\n });\n if (JS_MIME_TYPE in output.data) {\n toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n }\n output_area._hv_plot_id = id;\n if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n window.PyViz.plot_index[id] = Bokeh.index[id];\n } else {\n window.PyViz.plot_index[id] = null;\n }\n } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n var bk_div = document.createElement(\"div\");\n bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n var script_attrs = bk_div.children[0].attributes;\n for (var i = 0; i < script_attrs.length; i++) {\n toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n }\n // store reference to server id on output_area\n output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n var id = handle.cell.output_area._hv_plot_id;\n var server_id = handle.cell.output_area._bokeh_server_id;\n if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n if (server_id !== null) {\n comm.send({event_type: 'server_delete', 'id': server_id});\n return;\n } else if (comm !== null) {\n comm.send({event_type: 'delete', 'id': id});\n }\n delete PyViz.plot_index[id];\n if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n var doc = window.Bokeh.index[id].model.document\n doc.clear();\n const i = window.Bokeh.documents.indexOf(doc);\n if (i > -1) {\n window.Bokeh.documents.splice(i, 1);\n }\n }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n delete PyViz.comms[\"hv-extension-comm\"];\n window.PyViz.plot_index = {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n handle_clear_output(event, {cell: {output_area: handle.output_area}})\n handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n function append_mime(data, metadata, element) {\n // create a DOM node to render to\n var toinsert = this.create_output_subarea(\n metadata,\n CLASS_NAME,\n EXEC_MIME_TYPE\n );\n this.keyboard_manager.register_events(toinsert);\n // Render to node\n var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n render(props, toinsert[0]);\n element.append(toinsert);\n return toinsert\n }\n\n events.on('output_added.OutputArea', handle_add_output);\n events.on('output_updated.OutputArea', handle_update_output);\n events.on('clear_output.CodeCell', handle_clear_output);\n events.on('delete.Cell', handle_clear_output);\n events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n\n OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n safe: true,\n index: 0\n });\n}\n\nif (window.Jupyter !== undefined) {\n try {\n var events = require('base/js/events');\n var OutputArea = require('notebook/js/outputarea').OutputArea;\n if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n register_renderer(events, OutputArea);\n }\n } catch(err) {\n }\n}\n",
211
+ "application/javascript": [
212
+ "\n",
213
+ "if ((window.PyViz === undefined) || (window.PyViz instanceof HTMLElement)) {\n",
214
+ " window.PyViz = {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n",
215
+ "}\n",
216
+ "\n",
217
+ "\n",
218
+ " function JupyterCommManager() {\n",
219
+ " }\n",
220
+ "\n",
221
+ " JupyterCommManager.prototype.register_target = function(plot_id, comm_id, msg_handler) {\n",
222
+ " if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n",
223
+ " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n",
224
+ " comm_manager.register_target(comm_id, function(comm) {\n",
225
+ " comm.on_msg(msg_handler);\n",
226
+ " });\n",
227
+ " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n",
228
+ " window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n",
229
+ " comm.onMsg = msg_handler;\n",
230
+ " });\n",
231
+ " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n",
232
+ " google.colab.kernel.comms.registerTarget(comm_id, (comm) => {\n",
233
+ " var messages = comm.messages[Symbol.asyncIterator]();\n",
234
+ " function processIteratorResult(result) {\n",
235
+ " var message = result.value;\n",
236
+ " console.log(message)\n",
237
+ " var content = {data: message.data, comm_id};\n",
238
+ " var buffers = []\n",
239
+ " for (var buffer of message.buffers || []) {\n",
240
+ " buffers.push(new DataView(buffer))\n",
241
+ " }\n",
242
+ " var metadata = message.metadata || {};\n",
243
+ " var msg = {content, buffers, metadata}\n",
244
+ " msg_handler(msg);\n",
245
+ " return messages.next().then(processIteratorResult);\n",
246
+ " }\n",
247
+ " return messages.next().then(processIteratorResult);\n",
248
+ " })\n",
249
+ " }\n",
250
+ " }\n",
251
+ "\n",
252
+ " JupyterCommManager.prototype.get_client_comm = function(plot_id, comm_id, msg_handler) {\n",
253
+ " if (comm_id in window.PyViz.comms) {\n",
254
+ " return window.PyViz.comms[comm_id];\n",
255
+ " } else if (window.comm_manager || ((window.Jupyter !== undefined) && (Jupyter.notebook.kernel != null))) {\n",
256
+ " var comm_manager = window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n",
257
+ " var comm = comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n",
258
+ " if (msg_handler) {\n",
259
+ " comm.on_msg(msg_handler);\n",
260
+ " }\n",
261
+ " } else if ((plot_id in window.PyViz.kernels) && (window.PyViz.kernels[plot_id])) {\n",
262
+ " var comm = window.PyViz.kernels[plot_id].connectToComm(comm_id);\n",
263
+ " comm.open();\n",
264
+ " if (msg_handler) {\n",
265
+ " comm.onMsg = msg_handler;\n",
266
+ " }\n",
267
+ " } else if (typeof google != 'undefined' && google.colab.kernel != null) {\n",
268
+ " var comm_promise = google.colab.kernel.comms.open(comm_id)\n",
269
+ " comm_promise.then((comm) => {\n",
270
+ " window.PyViz.comms[comm_id] = comm;\n",
271
+ " if (msg_handler) {\n",
272
+ " var messages = comm.messages[Symbol.asyncIterator]();\n",
273
+ " function processIteratorResult(result) {\n",
274
+ " var message = result.value;\n",
275
+ " var content = {data: message.data};\n",
276
+ " var metadata = message.metadata || {comm_id};\n",
277
+ " var msg = {content, metadata}\n",
278
+ " msg_handler(msg);\n",
279
+ " return messages.next().then(processIteratorResult);\n",
280
+ " }\n",
281
+ " return messages.next().then(processIteratorResult);\n",
282
+ " }\n",
283
+ " }) \n",
284
+ " var sendClosure = (data, metadata, buffers, disposeOnDone) => {\n",
285
+ " return comm_promise.then((comm) => {\n",
286
+ " comm.send(data, metadata, buffers, disposeOnDone);\n",
287
+ " });\n",
288
+ " };\n",
289
+ " var comm = {\n",
290
+ " send: sendClosure\n",
291
+ " };\n",
292
+ " }\n",
293
+ " window.PyViz.comms[comm_id] = comm;\n",
294
+ " return comm;\n",
295
+ " }\n",
296
+ " window.PyViz.comm_manager = new JupyterCommManager();\n",
297
+ " \n",
298
+ "\n",
299
+ "\n",
300
+ "var JS_MIME_TYPE = 'application/javascript';\n",
301
+ "var HTML_MIME_TYPE = 'text/html';\n",
302
+ "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n",
303
+ "var CLASS_NAME = 'output';\n",
304
+ "\n",
305
+ "/**\n",
306
+ " * Render data to the DOM node\n",
307
+ " */\n",
308
+ "function render(props, node) {\n",
309
+ " var div = document.createElement(\"div\");\n",
310
+ " var script = document.createElement(\"script\");\n",
311
+ " node.appendChild(div);\n",
312
+ " node.appendChild(script);\n",
313
+ "}\n",
314
+ "\n",
315
+ "/**\n",
316
+ " * Handle when a new output is added\n",
317
+ " */\n",
318
+ "function handle_add_output(event, handle) {\n",
319
+ " var output_area = handle.output_area;\n",
320
+ " var output = handle.output;\n",
321
+ " if ((output.data == undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n",
322
+ " return\n",
323
+ " }\n",
324
+ " var id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n",
325
+ " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n",
326
+ " if (id !== undefined) {\n",
327
+ " var nchildren = toinsert.length;\n",
328
+ " var html_node = toinsert[nchildren-1].children[0];\n",
329
+ " html_node.innerHTML = output.data[HTML_MIME_TYPE];\n",
330
+ " var scripts = [];\n",
331
+ " var nodelist = html_node.querySelectorAll(\"script\");\n",
332
+ " for (var i in nodelist) {\n",
333
+ " if (nodelist.hasOwnProperty(i)) {\n",
334
+ " scripts.push(nodelist[i])\n",
335
+ " }\n",
336
+ " }\n",
337
+ "\n",
338
+ " scripts.forEach( function (oldScript) {\n",
339
+ " var newScript = document.createElement(\"script\");\n",
340
+ " var attrs = [];\n",
341
+ " var nodemap = oldScript.attributes;\n",
342
+ " for (var j in nodemap) {\n",
343
+ " if (nodemap.hasOwnProperty(j)) {\n",
344
+ " attrs.push(nodemap[j])\n",
345
+ " }\n",
346
+ " }\n",
347
+ " attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n",
348
+ " newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n",
349
+ " oldScript.parentNode.replaceChild(newScript, oldScript);\n",
350
+ " });\n",
351
+ " if (JS_MIME_TYPE in output.data) {\n",
352
+ " toinsert[nchildren-1].children[1].textContent = output.data[JS_MIME_TYPE];\n",
353
+ " }\n",
354
+ " output_area._hv_plot_id = id;\n",
355
+ " if ((window.Bokeh !== undefined) && (id in Bokeh.index)) {\n",
356
+ " window.PyViz.plot_index[id] = Bokeh.index[id];\n",
357
+ " } else {\n",
358
+ " window.PyViz.plot_index[id] = null;\n",
359
+ " }\n",
360
+ " } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n",
361
+ " var bk_div = document.createElement(\"div\");\n",
362
+ " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n",
363
+ " var script_attrs = bk_div.children[0].attributes;\n",
364
+ " for (var i = 0; i < script_attrs.length; i++) {\n",
365
+ " toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n",
366
+ " }\n",
367
+ " // store reference to server id on output_area\n",
368
+ " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n",
369
+ " }\n",
370
+ "}\n",
371
+ "\n",
372
+ "/**\n",
373
+ " * Handle when an output is cleared or removed\n",
374
+ " */\n",
375
+ "function handle_clear_output(event, handle) {\n",
376
+ " var id = handle.cell.output_area._hv_plot_id;\n",
377
+ " var server_id = handle.cell.output_area._bokeh_server_id;\n",
378
+ " if (((id === undefined) || !(id in PyViz.plot_index)) && (server_id !== undefined)) { return; }\n",
379
+ " var comm = window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n",
380
+ " if (server_id !== null) {\n",
381
+ " comm.send({event_type: 'server_delete', 'id': server_id});\n",
382
+ " return;\n",
383
+ " } else if (comm !== null) {\n",
384
+ " comm.send({event_type: 'delete', 'id': id});\n",
385
+ " }\n",
386
+ " delete PyViz.plot_index[id];\n",
387
+ " if ((window.Bokeh !== undefined) & (id in window.Bokeh.index)) {\n",
388
+ " var doc = window.Bokeh.index[id].model.document\n",
389
+ " doc.clear();\n",
390
+ " const i = window.Bokeh.documents.indexOf(doc);\n",
391
+ " if (i > -1) {\n",
392
+ " window.Bokeh.documents.splice(i, 1);\n",
393
+ " }\n",
394
+ " }\n",
395
+ "}\n",
396
+ "\n",
397
+ "/**\n",
398
+ " * Handle kernel restart event\n",
399
+ " */\n",
400
+ "function handle_kernel_cleanup(event, handle) {\n",
401
+ " delete PyViz.comms[\"hv-extension-comm\"];\n",
402
+ " window.PyViz.plot_index = {}\n",
403
+ "}\n",
404
+ "\n",
405
+ "/**\n",
406
+ " * Handle update_display_data messages\n",
407
+ " */\n",
408
+ "function handle_update_output(event, handle) {\n",
409
+ " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n",
410
+ " handle_add_output(event, handle)\n",
411
+ "}\n",
412
+ "\n",
413
+ "function register_renderer(events, OutputArea) {\n",
414
+ " function append_mime(data, metadata, element) {\n",
415
+ " // create a DOM node to render to\n",
416
+ " var toinsert = this.create_output_subarea(\n",
417
+ " metadata,\n",
418
+ " CLASS_NAME,\n",
419
+ " EXEC_MIME_TYPE\n",
420
+ " );\n",
421
+ " this.keyboard_manager.register_events(toinsert);\n",
422
+ " // Render to node\n",
423
+ " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n",
424
+ " render(props, toinsert[0]);\n",
425
+ " element.append(toinsert);\n",
426
+ " return toinsert\n",
427
+ " }\n",
428
+ "\n",
429
+ " events.on('output_added.OutputArea', handle_add_output);\n",
430
+ " events.on('output_updated.OutputArea', handle_update_output);\n",
431
+ " events.on('clear_output.CodeCell', handle_clear_output);\n",
432
+ " events.on('delete.Cell', handle_clear_output);\n",
433
+ " events.on('kernel_ready.Kernel', handle_kernel_cleanup);\n",
434
+ "\n",
435
+ " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n",
436
+ " safe: true,\n",
437
+ " index: 0\n",
438
+ " });\n",
439
+ "}\n",
440
+ "\n",
441
+ "if (window.Jupyter !== undefined) {\n",
442
+ " try {\n",
443
+ " var events = require('base/js/events');\n",
444
+ " var OutputArea = require('notebook/js/outputarea').OutputArea;\n",
445
+ " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n",
446
+ " register_renderer(events, OutputArea);\n",
447
+ " }\n",
448
+ " } catch(err) {\n",
449
+ " }\n",
450
+ "}\n"
451
+ ]
452
+ },
453
+ "metadata": {}
454
+ },
455
+ {
456
+ "output_type": "display_data",
457
+ "data": {
458
+ "text/html": [
459
+ "<style>.bk-root, .bk-root .bk:before, .bk-root .bk:after {\n",
460
+ " font-family: var(--jp-ui-font-size1);\n",
461
+ " font-size: var(--jp-ui-font-size1);\n",
462
+ " color: var(--jp-ui-font-color1);\n",
463
+ "}\n",
464
+ "</style>"
465
+ ]
466
+ },
467
+ "metadata": {}
468
+ }
469
+ ],
470
+ "source": [
471
+ "import panel as pn\n",
472
+ "import pickle\n",
473
+ "\n",
474
+ "numbers = [1, 2, 3, 4, 5]\n",
475
+ "\n",
476
+ "def square_numbers():\n",
477
+ " squared = [num ** 2 for num in numbers]\n",
478
+ " return squared\n",
479
+ "\n",
480
+ "pn.extension()\n",
481
+ "\n",
482
+ "button = pn.widgets.Button(name='Square Numbers', button_type='primary')\n",
483
+ "output = pn.widgets.StaticText()\n",
484
+ "\n",
485
+ "def button_click(event):\n",
486
+ " output.value = str(square_numbers())\n",
487
+ "\n",
488
+ "button.on_click(button_click)\n",
489
+ "\n",
490
+ "app = pn.Column(button, output)\n",
491
+ "app.servable()\n",
492
+ "\n",
493
+ "with open (\"webpanel_ntbk.pkl\",\"wb\") as f:\n",
494
+ " pickle.dump(app,f)\n"
495
+ ]
496
+ }
497
+ ]
498
+ }