{ "cells": [ { "cell_type": "markdown", "id": "textile-windows", "metadata": {}, "source": [ "# More details on Hamiltonian Monte Carlo\n", "\n", "*This portion of the recitation was prepared by Tom Röschinger.*\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "id": "beb714f0-8c87-4002-a16f-4177fe20babd", "metadata": { "nbsphinx": "hidden", "tags": [] }, "outputs": [], "source": [ "# Colab setup ------------------\n", "import os, shutil, sys, subprocess, urllib.request\n", "if \"google.colab\" in sys.modules:\n", " cmd = \"pip install --upgrade iqplot colorcet datashader bebi103 arviz cmdstanpy watermark\"\n", " process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", " stdout, stderr = process.communicate()\n", " from cmdstanpy.install_cmdstan import latest_version\n", " cmdstan_version = latest_version()\n", " cmdstan_url = f\"https://github.com/stan-dev/cmdstan/releases/download/v{cmdstan_version}/\"\n", " fname = f\"colab-cmdstan-{cmdstan_version}.tgz\"\n", " urllib.request.urlretrieve(cmdstan_url + fname, fname)\n", " shutil.unpack_archive(fname)\n", " os.environ[\"CMDSTAN\"] = f\"./cmdstan-{cmdstan_version}\"\n", " data_path = \"https://s3.amazonaws.com/bebi103.caltech.edu/data/\"\n", "else:\n", " data_path = \"../data/\"\n", "# ------------------------------" ] }, { "cell_type": "code", "execution_count": 2, "id": "5056272a-b9db-4ef1-9435-18a744d2a2cf", "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", " var py_version = '3.3.0'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", " var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n", " var reloading = true;\n", " var Bokeh = root.Bokeh;\n", " var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", "\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks;\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", " if (js_modules == null) js_modules = [];\n", " if (js_exports == null) js_exports = {};\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", "\n", " if (root._bokeh_is_loading > 0) {\n", " 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 && Object.keys(js_exports).length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " if (!reloading) {\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " }\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", " window._bokeh_on_load = on_load\n", "\n", " function on_error() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " var skip = [];\n", " if (window.requirejs) {\n", " window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n", " require([\"jspanel\"], function(jsPanel) {\n", "\twindow.jsPanel = jsPanel\n", "\ton_load()\n", " })\n", " require([\"jspanel-modal\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-tooltip\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-hint\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-layout\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-contextmenu\"], function() {\n", "\ton_load()\n", " })\n", " require([\"jspanel-dock\"], function() {\n", "\ton_load()\n", " })\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 + 9;\n", " } else {\n", " root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n", " }\n", "\n", " var existing_stylesheets = []\n", " var links = document.getElementsByTagName('link')\n", " for (var i = 0; i < links.length; i++) {\n", " var link = links[i]\n", " if (link.href != null) {\n", "\texisting_stylesheets.push(link.href)\n", " }\n", " }\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " if (existing_stylesheets.indexOf(url) !== -1) {\n", "\ton_load()\n", "\tcontinue;\n", " }\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n", " var urls = ['https://cdn.holoviz.org/panel/1.3.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.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/1.3.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n", " for (var i = 0; i < urls.length; i++) {\n", " skip.push(urls[i])\n", " }\n", " } var existing_scripts = []\n", " var scripts = document.getElementsByTagName('script')\n", " for (var i = 0; i < scripts.length; i++) {\n", " var script = scripts[i]\n", " if (script.src != null) {\n", "\texisting_scripts.push(script.src)\n", " }\n", " }\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\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) !== -1 || existing_scripts.indexOf(url) !== -1) {\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", " for (const name in js_exports) {\n", " var url = js_exports[name];\n", " if (skip.indexOf(url) >= 0 || root[name] != null) {\n", "\tif (!window.requirejs) {\n", "\t on_load();\n", "\t}\n", "\tcontinue;\n", " }\n", " var element = document.createElement('script');\n", " element.onerror = on_error;\n", " element.async = false;\n", " element.type = \"module\";\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " element.textContent = `\n", " import ${name} from \"${url}\"\n", " window.${name} = ${name}\n", " window._bokeh_on_load()\n", " `\n", " document.head.appendChild(element);\n", " }\n", " if (!js_urls.length && !js_modules.length) {\n", " on_load()\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " var js_urls = [];\n", " var js_modules = [];\n", " var js_exports = {};\n", " var css_urls = [];\n", " var inline_js = [ function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", "function(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", " }\n", " // Cache old bokeh versions\n", " if (Bokeh != undefined && !reloading) {\n", "\tvar NewBokeh = root.Bokeh;\n", "\tif (Bokeh.versions === undefined) {\n", "\t Bokeh.versions = new Map();\n", "\t}\n", "\tif (NewBokeh.version !== Bokeh.version) {\n", "\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n", "\t}\n", "\troot.Bokeh = 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", " root._bokeh_is_initializing = false\n", " }\n", "\n", " function load_or_wait() {\n", " // Implement a backoff loop that tries to ensure we do not load multiple\n", " // versions of Bokeh and its dependencies at the same time.\n", " // In recent versions we use the root._bokeh_is_initializing flag\n", " // to determine whether there is an ongoing attempt to initialize\n", " // bokeh, however for backward compatibility we also try to ensure\n", " // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n", " // before older versions are fully initialized.\n", " if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n", " root._bokeh_is_initializing = false;\n", " root._bokeh_onload_callbacks = undefined;\n", " console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n", " load_or_wait();\n", " } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n", " setTimeout(load_or_wait, 100);\n", " } else {\n", " Bokeh = root.Bokeh;\n", " bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n", " root._bokeh_is_initializing = true\n", " root._bokeh_onload_callbacks = []\n", " if (!reloading && (!bokeh_loaded || is_dev)) {\n", "\troot.Bokeh = undefined;\n", " }\n", " load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n", "\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", "\trun_inline_js();\n", " });\n", " }\n", " }\n", " // Give older versions of the autoload script a head-start to ensure\n", " // they initialize before we start loading newer version.\n", " setTimeout(load_or_wait, 100)\n", "}(window));" ], "application/vnd.holoviews_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n var py_version = '3.3.0'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = true;\n var Bokeh = root.Bokeh;\n var bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks;\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, js_modules, js_exports, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n if (js_modules == null) js_modules = [];\n if (js_exports == null) js_exports = {};\n\n root._bokeh_onload_callbacks.push(callback);\n\n if (root._bokeh_is_loading > 0) {\n 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 && Object.keys(js_exports).length === 0) {\n run_callbacks();\n return null;\n }\n if (!reloading) {\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n }\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n window._bokeh_on_load = on_load\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n var skip = [];\n if (window.requirejs) {\n window.requirejs.config({'packages': {}, 'paths': {'jspanel': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/jspanel', 'jspanel-modal': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal', 'jspanel-tooltip': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip', 'jspanel-hint': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint', 'jspanel-layout': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout', 'jspanel-contextmenu': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu', 'jspanel-dock': 'https://cdn.jsdelivr.net/npm/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock', 'gridstack': 'https://cdn.jsdelivr.net/npm/gridstack@7.2.3/dist/gridstack-all', 'notyf': 'https://cdn.jsdelivr.net/npm/notyf@3/notyf.min'}, 'shim': {'jspanel': {'exports': 'jsPanel'}, 'gridstack': {'exports': 'GridStack'}}});\n require([\"jspanel\"], function(jsPanel) {\n\twindow.jsPanel = jsPanel\n\ton_load()\n })\n require([\"jspanel-modal\"], function() {\n\ton_load()\n })\n require([\"jspanel-tooltip\"], function() {\n\ton_load()\n })\n require([\"jspanel-hint\"], function() {\n\ton_load()\n })\n require([\"jspanel-layout\"], function() {\n\ton_load()\n })\n require([\"jspanel-contextmenu\"], function() {\n\ton_load()\n })\n require([\"jspanel-dock\"], function() {\n\ton_load()\n })\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 + 9;\n } else {\n root._bokeh_is_loading = css_urls.length + js_urls.length + js_modules.length + Object.keys(js_exports).length;\n }\n\n var existing_stylesheets = []\n var links = document.getElementsByTagName('link')\n for (var i = 0; i < links.length; i++) {\n var link = links[i]\n if (link.href != null) {\n\texisting_stylesheets.push(link.href)\n }\n }\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n if (existing_stylesheets.indexOf(url) !== -1) {\n\ton_load()\n\tcontinue;\n }\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n } if (((window['jsPanel'] !== undefined) && (!(window['jsPanel'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.3.1/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/dock/jspanel.dock.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } if (((window['GridStack'] !== undefined) && (!(window['GridStack'] instanceof HTMLElement))) || window.requirejs) {\n var urls = ['https://cdn.holoviz.org/panel/1.3.1/dist/bundled/gridstack/gridstack@7.2.3/dist/gridstack-all.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/1.3.1/dist/bundled/notificationarea/notyf@3/notyf.min.js'];\n for (var i = 0; i < urls.length; i++) {\n skip.push(urls[i])\n }\n } var existing_scripts = []\n var scripts = document.getElementsByTagName('script')\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i]\n if (script.src != null) {\n\texisting_scripts.push(script.src)\n }\n }\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n if (skip.indexOf(url) !== -1 || existing_scripts.indexOf(url) !== -1) {\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) !== -1 || existing_scripts.indexOf(url) !== -1) {\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 for (const name in js_exports) {\n var url = js_exports[name];\n if (skip.indexOf(url) >= 0 || root[name] != null) {\n\tif (!window.requirejs) {\n\t on_load();\n\t}\n\tcontinue;\n }\n var element = document.createElement('script');\n element.onerror = on_error;\n element.async = false;\n element.type = \"module\";\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n element.textContent = `\n import ${name} from \"${url}\"\n window.${name} = ${name}\n window._bokeh_on_load()\n `\n document.head.appendChild(element);\n }\n if (!js_urls.length && !js_modules.length) {\n on_load()\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [];\n var js_modules = [];\n var js_exports = {};\n var css_urls = [];\n var inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n // Cache old bokeh versions\n if (Bokeh != undefined && !reloading) {\n\tvar NewBokeh = root.Bokeh;\n\tif (Bokeh.versions === undefined) {\n\t Bokeh.versions = new Map();\n\t}\n\tif (NewBokeh.version !== Bokeh.version) {\n\t Bokeh.versions.set(NewBokeh.version, NewBokeh)\n\t}\n\troot.Bokeh = 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 root._bokeh_is_initializing = false\n }\n\n function load_or_wait() {\n // Implement a backoff loop that tries to ensure we do not load multiple\n // versions of Bokeh and its dependencies at the same time.\n // In recent versions we use the root._bokeh_is_initializing flag\n // to determine whether there is an ongoing attempt to initialize\n // bokeh, however for backward compatibility we also try to ensure\n // that we do not start loading a newer (Panel>=1.0 and Bokeh>3) version\n // before older versions are fully initialized.\n if (root._bokeh_is_initializing && Date.now() > root._bokeh_timeout) {\n root._bokeh_is_initializing = false;\n root._bokeh_onload_callbacks = undefined;\n console.log(\"Bokeh: BokehJS was loaded multiple times but one version failed to initialize.\");\n load_or_wait();\n } else if (root._bokeh_is_initializing || (typeof root._bokeh_is_initializing === \"undefined\" && root._bokeh_onload_callbacks !== undefined)) {\n setTimeout(load_or_wait, 100);\n } else {\n Bokeh = root.Bokeh;\n bokeh_loaded = Bokeh != null && (Bokeh.version === py_version || (Bokeh.versions !== undefined && Bokeh.versions.has(py_version)));\n root._bokeh_is_initializing = true\n root._bokeh_onload_callbacks = []\n if (!reloading && (!bokeh_loaded || is_dev)) {\n\troot.Bokeh = undefined;\n }\n load_libs(css_urls, js_urls, js_modules, js_exports, function() {\n\tconsole.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n\trun_inline_js();\n });\n }\n }\n // Give older versions of the autoload script a head-start to ensure\n // they initialize before we start loading newer version.\n setTimeout(load_or_wait, 100)\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "if ((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", "\n", "var JS_MIME_TYPE = 'application/javascript';\n", "var HTML_MIME_TYPE = 'text/html';\n", "var EXEC_MIME_TYPE = 'application/vnd.holoviews_exec.v0+json';\n", "var CLASS_NAME = 'output';\n", "\n", "/**\n", " * Render data to the DOM node\n", " */\n", "function 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", " */\n", "function 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", " */\n", "function 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", " */\n", "function 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", " */\n", "function handle_update_output(event, handle) {\n", " handle_clear_output(event, {cell: {output_area: handle.output_area}})\n", " handle_add_output(event, handle)\n", "}\n", "\n", "function 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", "\n", "if (window.Jupyter !== undefined) {\n", " try {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " } catch(err) {\n", " }\n", "}\n" ], "application/vnd.holoviews_load.v0+json": "\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" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " const force = true;\n", "\n", " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", "const JS_MIME_TYPE = 'application/javascript';\n", " const HTML_MIME_TYPE = 'text/html';\n", " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " const CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " const script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " function drop(id) {\n", " const view = Bokeh.index.get_by_id(id)\n", " if (view != null) {\n", " view.model.document.clear()\n", " Bokeh.index.delete(view)\n", " }\n", " }\n", "\n", " const cell = handle.cell;\n", "\n", " const id = cell.output_area._bokeh_element_id;\n", " const server_id = cell.output_area._bokeh_server_id;\n", "\n", " // Clean up Bokeh references\n", " if (id != null) {\n", " drop(id)\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd_clean, {\n", " iopub: {\n", " output: function(msg) {\n", " const id = msg.content.text.trim()\n", " drop(id)\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd_destroy);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " const output_area = handle.output_area;\n", " const output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " const bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " const script_attrs = bk_div.children[0].attributes;\n", " for (let i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " const toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " const events = require('base/js/events');\n", " const OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " const NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

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

\\n\"+\n", " \"\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded() {\n", " const el = document.getElementById(\"db9e2edf-28d5-4cb6-b258-f79ef266a203\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", "\n", " function on_error(url) {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (let i = 0; i < css_urls.length; i++) {\n", " const url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " }\n", "\n", " for (let i = 0; i < js_urls.length; i++) {\n", " const url = js_urls[i];\n", " const element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.async = false;\n", " element.src = url;\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.3.0.min.js\", \"https://unpkg.com/@holoviz/panel@1.3.1/dist/panel.min.js\"];\n", " const css_urls = [];\n", "\n", " const inline_js = [ function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", "function(Bokeh) {\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " if (root.Bokeh !== undefined || force === true) {\n", " for (let i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", "if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " const cell = $(document.getElementById(\"db9e2edf-28d5-4cb6-b258-f79ef266a203\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(css_urls, js_urls, function() {\n", " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

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

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n const el = document.getElementById(\"db9e2edf-28d5-4cb6-b258-f79ef266a203\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.3.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.3.0.min.js\", \"https://unpkg.com/@holoviz/panel@1.3.1/dist/panel.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"db9e2edf-28d5-4cb6-b258-f79ef266a203\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from scipy.special import binom, factorial\n", "import scipy.stats as st\n", "\n", "import bokeh.plotting\n", "from bokeh.io import curdoc, show\n", "import bokeh.palettes\n", "from bokeh.layouts import row,layout\n", "from bokeh.models.tickers import FixedTicker\n", "\n", "import holoviews as hv\n", "renderer = hv.renderer('bokeh')\n", "hv.extension('bokeh')\n", "\n", "pallete1 = ['#9faeb2', '#ab6e7d', '#1c2630']\n", "\n", "bokeh.io.output_notebook()" ] }, { "cell_type": "code", "execution_count": 3, "id": "7440d5ca-ba52-4d2d-95ed-0bd1be6d6a0c", "metadata": {}, "outputs": [], "source": [ "def style(p, autohide=False):\n", " p.title.text_font=\"Helvetica\"\n", " p.title.text_font_size=\"16px\"\n", " p.title.align=\"center\"\n", " p.xaxis.axis_label_text_font=\"Helvetica\"\n", " p.yaxis.axis_label_text_font=\"Helvetica\"\n", " \n", " p.xaxis.axis_label_text_font_size=\"13px\"\n", " p.yaxis.axis_label_text_font_size=\"13px\"\n", " p.xaxis.axis_label_text_font_style = \"normal\"\n", " p.yaxis.axis_label_text_font_style = \"normal\"\n", " p.background_fill_alpha = 0\n", " if autohide: p.toolbar.autohide=True\n", " return p" ] }, { "cell_type": "markdown", "id": "specific-billy", "metadata": {}, "source": [ "
\n", "\n", "This recitation will be heavily based on [this paper](https://arxiv.org/pdf/1701.02434.pdf) by Michael Betancourt. For anyone interested in the background of this complex topic, I recommend reading the paper. I will do my best to break it down here. We will start of by introducing some of the key components, such as typical sets and the physical meaning of a Hamiltonian." ] }, { "cell_type": "markdown", "id": "golden-jason", "metadata": {}, "source": [ "## The typical set" ] }, { "cell_type": "markdown", "id": "reduced-naples", "metadata": {}, "source": [ "The typical set is a subset of the sample space that contains most of the probability mass. In general, this set does not contain the most likely outcome. For a more detailed explanation, check out [Bob Carpenter's explanation](https://mc-stan.org/users/documentation/case-studies/curse-dims.html). Let's look at the Binomial distribution as an example. We perform $N=500$ successive Bernoulli trials for a variable $y \\in \\{0, 1\\}$ with probability $\\theta=0.75$ to get $y=1$. The most probable *sequence* of outcomes is $\\mathbf{y} =(1,1,...,1)$. If we are only interested in the *number* of successes however, this outcome is very unlikely. This is because we have to weigh the number of successes with the number of possible outcomes that give that result. That's why the binomial coefficient is included in the Binomial distribution. It is **much** more likely to draw a number of successes that is close to the expectation value, $\\langle y\\rangle =N\\theta=375$. To get a feeling of how the outcomes would be distributed, imagine you draw a million times from this Binomial. On average, only one (!) draw will be outside the region [326, 420]. " ] }, { "cell_type": "code", "execution_count": 4, "id": "varied-anthony", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"09dd9727-e479-456c-8a36-11a80a40bf60\":{\"version\":\"3.3.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1002\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1004\"},\"y_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p1012\",\"attributes\":{\"start\":-0.05,\"end\":1.05}},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1013\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1014\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1005\",\"attributes\":{\"text\":\"N=500, \\u03b8=0.75\",\"text_font\":\"Helvetica\",\"text_font_size\":\"16px\",\"align\":\"center\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1038\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1032\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1033\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1034\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[326,326,420,420]],[\"y\",[-0.2,1.2,1.2,-0.2]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1039\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1040\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Patch\",\"id\":\"p1035\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#eaeaea\",\"fill_color\":\"#eaeaea\",\"hatch_color\":\"#eaeaea\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Patch\",\"id\":\"p1036\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#eaeaea\",\"line_alpha\":0.1,\"fill_color\":\"#eaeaea\",\"fill_alpha\":0.1,\"hatch_color\":\"#eaeaea\",\"hatch_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Patch\",\"id\":\"p1037\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#eaeaea\",\"line_alpha\":0.2,\"fill_color\":\"#eaeaea\",\"fill_alpha\":0.2,\"hatch_color\":\"#eaeaea\",\"hatch_alpha\":0.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1047\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1041\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1042\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1043\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAiAQAAIwEAACQBAAAlAQAAJgEAACcBAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAGYBAABnAQAAaAEAAGkBAABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEAAHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUBAACmAQAApwEAAKgBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAAsAEAALEBAACyAQAAswEAALQBAAC1AQAAtgEAALcBAAC4AQAAuQEAALoBAAC7AQAAvAEAAL0BAAC+AQAAvwEAAMABAADBAQAAwgEAAMMBAADEAQAAxQEAAMYBAADHAQAAyAEAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQAQAA0QEAANIBAADTAQAA1AEAANUBAADWAQAA1wEAANgBAADZAQAA2gEAANsBAADcAQAA3QEAAN4BAADfAQAA4AEAAOEBAADiAQAA4wEAAOQBAADlAQAA5gEAAOcBAADoAQAA6QEAAOoBAADrAQAA7AEAAO0BAADuAQAA7wEAAPABAADxAQAA8gEAAPMBAAA=\"},\"shape\":[500],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1048\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1049\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1044\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#9faeb2\",\"line_width\":2.2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1045\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#9faeb2\",\"line_alpha\":0.1,\"line_width\":2.2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1046\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#9faeb2\",\"line_alpha\":0.2,\"line_width\":2.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1058\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1052\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1053\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1054\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAiAQAAIwEAACQBAAAlAQAAJgEAACcBAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAGYBAABnAQAAaAEAAGkBAABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEAAHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUBAACmAQAApwEAAKgBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAAsAEAALEBAACyAQAAswEAALQBAAC1AQAAtgEAALcBAAC4AQAAuQEAALoBAAC7AQAAvAEAAL0BAAC+AQAAvwEAAMABAADBAQAAwgEAAMMBAADEAQAAxQEAAMYBAADHAQAAyAEAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQAQAA0QEAANIBAADTAQAA1AEAANUBAADWAQAA1wEAANgBAADZAQAA2gEAANsBAADcAQAA3QEAAN4BAADfAQAA4AEAAOEBAADiAQAA4wEAAOQBAADlAQAA5gEAAOcBAADoAQAA6QEAAOoBAADrAQAA7AEAAO0BAADuAQAA7wEAAPABAADxAQAA8gEAAPMBAAA=\"},\"shape\":[500],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1059\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1060\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1055\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ab6e7d\",\"line_width\":2.2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1056\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ab6e7d\",\"line_alpha\":0.1,\"line_width\":2.2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1057\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#ab6e7d\",\"line_alpha\":0.2,\"line_width\":2.2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1068\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1062\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1063\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1064\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAvQAAAL4AAAC/AAAAwAAAAMEAAADCAAAAwwAAAMQAAADFAAAAxgAAAMcAAADIAAAAyQAAAMoAAADLAAAAzAAAAM0AAADOAAAAzwAAANAAAADRAAAA0gAAANMAAADUAAAA1QAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAIAEAACEBAAAiAQAAIwEAACQBAAAlAQAAJgEAACcBAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAGYBAABnAQAAaAEAAGkBAABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEAAHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUBAACmAQAApwEAAKgBAACpAQAAqgEAAKsBAACsAQAArQEAAK4BAACvAQAAsAEAALEBAACyAQAAswEAALQBAAC1AQAAtgEAALcBAAC4AQAAuQEAALoBAAC7AQAAvAEAAL0BAAC+AQAAvwEAAMABAADBAQAAwgEAAMMBAADEAQAAxQEAAMYBAADHAQAAyAEAAMkBAADKAQAAywEAAMwBAADNAQAAzgEAAM8BAADQAQAA0QEAANIBAADTAQAA1AEAANUBAADWAQAA1wEAANgBAADZAQAA2gEAANsBAADcAQAA3QEAAN4BAADfAQAA4AEAAOEBAADiAQAA4wEAAOQBAADlAQAA5gEAAOcBAADoAQAA6QEAAOoBAADrAQAA7AEAAO0BAADuAQAA7wEAAPABAADxAQAA8gEAAPMBAAA=\"},\"shape\":[500],\"dtype\":\"int32\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[500],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1069\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1070\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1065\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1c2630\",\"line_width\":2.2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1066\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1c2630\",\"line_alpha\":0.1,\"line_width\":2.2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1067\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#1c2630\",\"line_alpha\":0.2,\"line_width\":2.2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1011\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1025\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1026\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1027\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1028\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1029\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1030\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1031\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1020\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1021\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1022\"},\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1023\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1015\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1016\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1017\"},\"axis_label\":\"n\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1018\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1019\",\"attributes\":{\"axis\":{\"id\":\"p1015\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1024\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1020\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1050\",\"attributes\":{\"location\":\"top_left\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1051\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Degeneracy\"},\"renderers\":[{\"id\":\"p1047\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1061\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"p^n (1-p)^(N-n)\"},\"renderers\":[{\"id\":\"p1058\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1071\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Typical Set\"},\"renderers\":[{\"id\":\"p1068\"}]}}]}}],\"frame_width\":450,\"frame_height\":300,\"background_fill_alpha\":0}}],\"defs\":[{\"type\":\"model\",\"name\":\"ReactiveHTML1\"},{\"type\":\"model\",\"name\":\"FlexBox1\",\"properties\":[{\"name\":\"align_content\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"align_items\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"flex_direction\",\"kind\":\"Any\",\"default\":\"row\"},{\"name\":\"flex_wrap\",\"kind\":\"Any\",\"default\":\"wrap\"},{\"name\":\"justify_content\",\"kind\":\"Any\",\"default\":\"flex-start\"}]},{\"type\":\"model\",\"name\":\"FloatPanel1\",\"properties\":[{\"name\":\"config\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"contained\",\"kind\":\"Any\",\"default\":true},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"right-top\"},{\"name\":\"offsetx\",\"kind\":\"Any\",\"default\":null},{\"name\":\"offsety\",\"kind\":\"Any\",\"default\":null},{\"name\":\"theme\",\"kind\":\"Any\",\"default\":\"primary\"},{\"name\":\"status\",\"kind\":\"Any\",\"default\":\"normalized\"}]},{\"type\":\"model\",\"name\":\"GridStack1\",\"properties\":[{\"name\":\"mode\",\"kind\":\"Any\",\"default\":\"warn\"},{\"name\":\"ncols\",\"kind\":\"Any\",\"default\":null},{\"name\":\"nrows\",\"kind\":\"Any\",\"default\":null},{\"name\":\"allow_resize\",\"kind\":\"Any\",\"default\":true},{\"name\":\"allow_drag\",\"kind\":\"Any\",\"default\":true},{\"name\":\"state\",\"kind\":\"Any\",\"default\":[]}]},{\"type\":\"model\",\"name\":\"drag1\",\"properties\":[{\"name\":\"slider_width\",\"kind\":\"Any\",\"default\":5},{\"name\":\"slider_color\",\"kind\":\"Any\",\"default\":\"black\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":50}]},{\"type\":\"model\",\"name\":\"click1\",\"properties\":[{\"name\":\"terminal_output\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"debug_name\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"clears\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"toggle_value1\",\"properties\":[{\"name\":\"active_icons\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"options\",\"kind\":\"Any\",\"default\":{\"type\":\"map\",\"entries\":[[\"favorite\",\"heart\"]]}},{\"name\":\"value\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"_reactions\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"_base_url\",\"kind\":\"Any\",\"default\":\"https://tabler-icons.io/static/tabler-icons/icons/\"}]},{\"type\":\"model\",\"name\":\"copy_to_clipboard1\",\"properties\":[{\"name\":\"value\",\"kind\":\"Any\",\"default\":null},{\"name\":\"fill\",\"kind\":\"Any\",\"default\":\"none\"}]},{\"type\":\"model\",\"name\":\"FastWrapper1\",\"properties\":[{\"name\":\"object\",\"kind\":\"Any\",\"default\":null},{\"name\":\"style\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"NotificationAreaBase1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"NotificationArea1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"notifications\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0},{\"name\":\"types\",\"kind\":\"Any\",\"default\":[{\"type\":\"map\",\"entries\":[[\"type\",\"warning\"],[\"background\",\"#ffc107\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-exclamation-triangle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]},{\"type\":\"map\",\"entries\":[[\"type\",\"info\"],[\"background\",\"#007bff\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-info-circle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]}]}]},{\"type\":\"model\",\"name\":\"Notification\",\"properties\":[{\"name\":\"background\",\"kind\":\"Any\",\"default\":null},{\"name\":\"duration\",\"kind\":\"Any\",\"default\":3000},{\"name\":\"icon\",\"kind\":\"Any\",\"default\":null},{\"name\":\"message\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"notification_type\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_destroyed\",\"kind\":\"Any\",\"default\":false}]},{\"type\":\"model\",\"name\":\"TemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"BootstrapTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"MaterialTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]}]}};\n", " const render_items = [{\"docid\":\"09dd9727-e479-456c-8a36-11a80a40bf60\",\"roots\":{\"p1002\":\"a50ad67b-060f-4431-b567-59cdc38129fc\"},\"root_ids\":[\"p1002\"]}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1002" } }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "999999 out of 1000000 draws are between 326.0 and 420.0 (on average).\n" ] } ], "source": [ "N = 500\n", "θ = 0.75\n", "\n", "x = np.arange(0, N)\n", "\n", "# Compute binomial coefficient\n", "binomial_coeff = binom(N, x)\n", "prob = [θ**n * (1-θ)**(N-n) for n in x]\n", "P = prob * binomial_coeff\n", "\n", "# Rescale for plotting\n", "binomial_coeff = binomial_coeff / np.max(binomial_coeff)\n", "prob = prob / np.max(prob)\n", "P = P / np.max(P)\n", "\n", "# Make plot\n", "p = bokeh.plotting.figure(frame_width=450, frame_height=300, x_axis_label=\"n\", \n", " title=\"N={}, θ={}\".format(N, θ), y_range=(-0.05, 1.05))\n", "p.patch([326, 326, 420, 420],[-0.2, 1.2, 1.2, -0.2], color=\"#eaeaea\")\n", "p.line(x, binomial_coeff, line_width=2.2, color=pallete1[0], legend_label=\"Degeneracy\")\n", "p.line(x, prob, line_width=2.2, color=pallete1[1], legend_label=\"p^n (1-p)^(N-n)\")\n", "p.line(x, P, line_width=2.2, color=pallete1[2], legend_label=\"Typical Set\")\n", "p.legend.location = \"top_left\"\n", "\n", "bokeh.io.show(style(p))\n", "\n", "a = st.binom.ppf(5*10**-7, N, θ)\n", "b = st.binom.ppf(1-5*10**-7, N, θ)\n", "print(\"999999 out of 1000000 draws are between {} and {} (on average).\".format(a, b))" ] }, { "cell_type": "markdown", "id": "appreciated-mustang", "metadata": {}, "source": [ "So why is this important? All of the computations of interest in Bayesian statistics are formulated as expectations over the posterior, for example.\n", "\n", "$$\n", "\\langle \\theta\\rangle = \\int \\mathrm{d}\\theta\\, \\theta\\,p(\\theta|y).\n", "$$\n", "\n", "Technically, we need to compute this integral over the entire sample space. However, since most probability mass is concentrated in the typical set, this integral is very well approximated by an integral, where we only evaluate the posterior density in the typical set (which I labeled $\\mathcal{A}$ below),\n", "\n", "$$\n", "\\langle \\theta\\rangle \\approx \\int_{\\theta \\in \\mathcal{A}} \\mathrm{d}\\theta\\, \\theta\\,p(\\theta|y).\n", "$$\n", "\n", "The higher the dimension, the more crucial it is to find the typical set to compute expectations. This is due to the fact that most of the sample space density is away from the typical set, and this imbalance increases heavily with the dimensionality. \n", "\n", "In practice we compute expectations by sampling. Instead of computing the integral numerically, we draw (effectively) independent samples from the distribution. This is especially useful in the cases where we don't know the exact form of the distribution (which is nearly every case in applications). I won't review the basics of MCMC here, since this was discussed in class. Now the importance of the typical set becomes even more evident. Instead of needing samples from the entire sample space, which is incredibly huge, we *only* need to draw samples from the typical set. So our task will be to first find and then sample from the typical set." ] }, { "cell_type": "markdown", "id": "combined-family", "metadata": {}, "source": [ "## Hamiltonians\n", "\n", "If you had a Physics course on classical mechanics (or quantum mechanics), this section should be very familiar, but it still works as a refresher. In classical mechanics, the **Hamiltonian** is the function which describes the total energy of a system. Due to the conservation of energy, this function usually contains all the information of the system, hence it is incredibly powerful. Here we will take a look at the most basic example, the harmonic oscillator. You can imagine this system to be a point mass (it has no volume) with mass $m$ attached to a spring. The strength of the spring is described by a parameter $k$. The force acting on the mass by the spring when it is away from its resting position by a distance $x$ is just $F=-kx$ (negative sign since it points back to the resting position), meaning it is increasing linearly with the distance to the resting position. Force is connected to a **potential energy** $U$ by a negative derivative, $F=-\\partial U/\\partial x$, hence we can write down the potential energy $U= k x^2 / 2$.\n", "\n", "Since the Hamiltonian is the sum of the total energy, it also contains the **kinetic energy** of our point mass, which is the contribution to energy from its movement. Kinetic energy is usually written as $T=mv^2/2$, where $v$ is the speed of the object. Now we can write down our Hamiltonian:\n", "\n", "\\begin{align}\n", "H = T+U = \\frac{1}{2}\\,mv^2 + \\frac{1}{2}\\,kx^2 = \\frac{1}{2m}\\,p^2 + \\frac{1}{2}\\,kx^2,\n", "\\end{align}\n", "\n", "where in the last step we replaced the speed of the object by its momentum, $p=mv$. We will see in a moment why this is a more convenient way of writing the Hamiltonian. Also, I think it is a little more intuitive to think about momentum (Imagine a Fiat 500 hitting a brick wall: the Fiat will probably be a total wreck, since it does not have so much mass. Now imagine a train hitting the same wall with the same speed: the wall will probably not stand a chance, since the train has much more mass. Long story short, **think momentum not speed**.) The variables $x$ and $p$ define the so called phase space, which is a very important concept in physics.\n", "\n", "One of the most important axioms of physics is the conservation of energy. In a closed system, there cannot be any energy generated or consumed, only transformed, therefore $\\partial H/\\partial t = 0$. As a result, for a fixed energy, there is only one free parameter in the equation. That means, that if we choose an energy, then we can choose a value for one of the phase space variables, let's say the location, and the other variable, in this case momentum, is fixed. (In this case, the resulting plot looks like an ellipsoid)." ] }, { "cell_type": "code", "execution_count": 5, "id": "accepted-secretariat", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"968c6ae2-def0-4067-8deb-40c9ef25226f\":{\"version\":\"3.3.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1078\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1079\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1080\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1088\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1089\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1081\",\"attributes\":{\"text\":\"Energy level sets\",\"text_font\":\"Helvetica\",\"text_font_size\":\"16px\",\"align\":\"center\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1113\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1107\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1108\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1109\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1114\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1115\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1110\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#88419d\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1111\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#88419d\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1112\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#88419d\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1122\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1116\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1117\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1118\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1123\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1124\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1119\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#88419d\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1120\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#88419d\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1121\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#88419d\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1131\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1125\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1126\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1127\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1132\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1133\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1128\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#8c96c6\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1129\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#8c96c6\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1130\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#8c96c6\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1140\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1134\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1135\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1136\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1141\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1142\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1137\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#8c96c6\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1138\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#8c96c6\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1139\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#8c96c6\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1149\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1143\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1144\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1145\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1150\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1151\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1146\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#b3cde3\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1147\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#b3cde3\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1148\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#b3cde3\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1158\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1152\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1153\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1154\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}],[\"y\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"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\"},\"shape\":[1000],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1159\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1160\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1155\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#b3cde3\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1156\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#b3cde3\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1157\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"field\",\"field\":\"y\"},\"line_color\":\"#b3cde3\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1167\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1161\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1162\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1163\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1168\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1169\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1164\",\"attributes\":{\"line_color\":\"#88419d\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1165\",\"attributes\":{\"line_color\":\"#88419d\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1166\",\"attributes\":{\"line_color\":\"#88419d\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1176\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1170\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1171\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1172\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1177\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1178\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1173\",\"attributes\":{\"line_color\":\"#8c96c6\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1174\",\"attributes\":{\"line_color\":\"#8c96c6\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1175\",\"attributes\":{\"line_color\":\"#8c96c6\",\"line_alpha\":0.2,\"line_width\":2}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1185\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1179\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1180\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1181\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1186\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1187\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1182\",\"attributes\":{\"line_color\":\"#b3cde3\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1183\",\"attributes\":{\"line_color\":\"#b3cde3\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p1184\",\"attributes\":{\"line_color\":\"#b3cde3\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1087\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1100\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1101\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1102\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1103\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1104\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1105\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1106\"}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1095\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1096\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1097\"},\"axis_label\":\"p\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1098\"},\"major_label_text_font_size\":\"0pt\"}}],\"right\":[{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1188\",\"attributes\":{\"title\":\"H\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1189\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"9\"},\"renderers\":[{\"id\":\"p1167\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1190\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"4\"},\"renderers\":[{\"id\":\"p1176\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1191\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"1\"},\"renderers\":[{\"id\":\"p1185\"}]}}]}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1090\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1091\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1092\"},\"axis_label\":\"x\",\"axis_label_text_font\":\"Helvetica\",\"axis_label_text_font_style\":\"normal\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1093\"},\"major_label_text_font_size\":\"0pt\"}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1094\",\"attributes\":{\"axis\":{\"id\":\"p1090\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1099\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1095\"}}}],\"frame_width\":300,\"frame_height\":300,\"background_fill_alpha\":0}}],\"defs\":[{\"type\":\"model\",\"name\":\"ReactiveHTML1\"},{\"type\":\"model\",\"name\":\"FlexBox1\",\"properties\":[{\"name\":\"align_content\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"align_items\",\"kind\":\"Any\",\"default\":\"flex-start\"},{\"name\":\"flex_direction\",\"kind\":\"Any\",\"default\":\"row\"},{\"name\":\"flex_wrap\",\"kind\":\"Any\",\"default\":\"wrap\"},{\"name\":\"justify_content\",\"kind\":\"Any\",\"default\":\"flex-start\"}]},{\"type\":\"model\",\"name\":\"FloatPanel1\",\"properties\":[{\"name\":\"config\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"contained\",\"kind\":\"Any\",\"default\":true},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"right-top\"},{\"name\":\"offsetx\",\"kind\":\"Any\",\"default\":null},{\"name\":\"offsety\",\"kind\":\"Any\",\"default\":null},{\"name\":\"theme\",\"kind\":\"Any\",\"default\":\"primary\"},{\"name\":\"status\",\"kind\":\"Any\",\"default\":\"normalized\"}]},{\"type\":\"model\",\"name\":\"GridStack1\",\"properties\":[{\"name\":\"mode\",\"kind\":\"Any\",\"default\":\"warn\"},{\"name\":\"ncols\",\"kind\":\"Any\",\"default\":null},{\"name\":\"nrows\",\"kind\":\"Any\",\"default\":null},{\"name\":\"allow_resize\",\"kind\":\"Any\",\"default\":true},{\"name\":\"allow_drag\",\"kind\":\"Any\",\"default\":true},{\"name\":\"state\",\"kind\":\"Any\",\"default\":[]}]},{\"type\":\"model\",\"name\":\"drag1\",\"properties\":[{\"name\":\"slider_width\",\"kind\":\"Any\",\"default\":5},{\"name\":\"slider_color\",\"kind\":\"Any\",\"default\":\"black\"},{\"name\":\"value\",\"kind\":\"Any\",\"default\":50}]},{\"type\":\"model\",\"name\":\"click1\",\"properties\":[{\"name\":\"terminal_output\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"debug_name\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"clears\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"toggle_value1\",\"properties\":[{\"name\":\"active_icons\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"options\",\"kind\":\"Any\",\"default\":{\"type\":\"map\",\"entries\":[[\"favorite\",\"heart\"]]}},{\"name\":\"value\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"_reactions\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"_base_url\",\"kind\":\"Any\",\"default\":\"https://tabler-icons.io/static/tabler-icons/icons/\"}]},{\"type\":\"model\",\"name\":\"copy_to_clipboard1\",\"properties\":[{\"name\":\"value\",\"kind\":\"Any\",\"default\":null},{\"name\":\"fill\",\"kind\":\"Any\",\"default\":\"none\"}]},{\"type\":\"model\",\"name\":\"FastWrapper1\",\"properties\":[{\"name\":\"object\",\"kind\":\"Any\",\"default\":null},{\"name\":\"style\",\"kind\":\"Any\",\"default\":null}]},{\"type\":\"model\",\"name\":\"NotificationAreaBase1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"NotificationArea1\",\"properties\":[{\"name\":\"js_events\",\"kind\":\"Any\",\"default\":{\"type\":\"map\"}},{\"name\":\"notifications\",\"kind\":\"Any\",\"default\":[]},{\"name\":\"position\",\"kind\":\"Any\",\"default\":\"bottom-right\"},{\"name\":\"_clear\",\"kind\":\"Any\",\"default\":0},{\"name\":\"types\",\"kind\":\"Any\",\"default\":[{\"type\":\"map\",\"entries\":[[\"type\",\"warning\"],[\"background\",\"#ffc107\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-exclamation-triangle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]},{\"type\":\"map\",\"entries\":[[\"type\",\"info\"],[\"background\",\"#007bff\"],[\"icon\",{\"type\":\"map\",\"entries\":[[\"className\",\"fas fa-info-circle\"],[\"tagName\",\"i\"],[\"color\",\"white\"]]}]]}]}]},{\"type\":\"model\",\"name\":\"Notification\",\"properties\":[{\"name\":\"background\",\"kind\":\"Any\",\"default\":null},{\"name\":\"duration\",\"kind\":\"Any\",\"default\":3000},{\"name\":\"icon\",\"kind\":\"Any\",\"default\":null},{\"name\":\"message\",\"kind\":\"Any\",\"default\":\"\"},{\"name\":\"notification_type\",\"kind\":\"Any\",\"default\":null},{\"name\":\"_destroyed\",\"kind\":\"Any\",\"default\":false}]},{\"type\":\"model\",\"name\":\"TemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"BootstrapTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]},{\"type\":\"model\",\"name\":\"MaterialTemplateActions1\",\"properties\":[{\"name\":\"open_modal\",\"kind\":\"Any\",\"default\":0},{\"name\":\"close_modal\",\"kind\":\"Any\",\"default\":0}]}]}};\n", " const render_items = [{\"docid\":\"968c6ae2-def0-4067-8deb-40c9ef25226f\",\"roots\":{\"p1078\":\"bf10d345-df62-49d0-a086-e01f058a242d\"},\"root_ids\":[\"p1078\"]}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1078" } }, "output_type": "display_data" } ], "source": [ "def simple_oscillator(H, x):\n", " return np.sqrt(H - x ** 2)\n", "\n", "p = bokeh.plotting.figure(\n", " x_axis_label=\"x\", y_axis_label=\"p\", title=\"Energy level sets\", frame_width=300, frame_height=300,\n", ")\n", "for H, color in zip([9, 4, 1], bokeh.palettes.BuPu[4]):\n", " x_arr = np.linspace(-np.sqrt(H), np.sqrt(H), 1000)\n", " p_plus = simple_oscillator(H, x_arr)\n", " p_minus = -simple_oscillator(H, x_arr)\n", " p.line(x_arr, p_plus, line_width=2, color=color)\n", " p.line(x_arr, p_minus, line_width=2, color=color)\n", "\n", "legend = bokeh.models.Legend(items=[(f\"{H}\", [p.line(line_width=2, color=color)]) \n", " for H, color in zip([9, 4, 1], bokeh.palettes.BuPu[4])])\n", "p.add_layout(legend, 'right')\n", "p.legend.title = \"H\"\n", "p.xaxis.major_label_text_font_size = \"0pt\"\n", "p.yaxis.major_label_text_font_size = \"0pt\"\n", "\n", "bokeh.io.show(style(p))" ] }, { "cell_type": "markdown", "id": "rural-rates", "metadata": {}, "source": [ "This means, that for depending on the energy of the system, the phase space variables will always be on fixed line. These lines are also called trajectories in phase space. Although we do know now how position depends on momentum and vice versa, we still don't know the time evolution of these variables look like. To do so, we use the absolute beauty of Hamilton's equations of motion:\n", "\n", "\\begin{align}\n", "\\frac{\\partial p}{\\partial t} = -\\frac{\\partial H}{\\partial x},\\qquad \\frac{\\partial x}{\\partial t} = \\frac{\\partial H}{\\partial p}.\n", "\\end{align}\n", "\n", "Applying this to the Hamiltonian of the harmonic oscillator, we obtain\n", "\n", "\\begin{align}\n", "\\frac{\\partial p}{\\partial t} = -\\frac{\\partial H}{\\partial x} =-kx,\\qquad \\frac{\\partial x}{\\partial t} = \\frac{\\partial H}{\\partial p} = p/m.\n", "\\end{align}\n", "\n", "We can also compute the equations by using the conservation of energy (which is not something different but rather doing the same thing from a different perspective). Then, by solving for the position we get\n", "\n", "\\begin{align}\n", "x=-\\frac{1}{k} \\frac{\\partial p}{\\partial t} = -\\frac{m}{k} \\frac{\\partial^2 x}{\\partial t^2},\n", "\\end{align}\n", "\n", "which is consistent with what we got from using Hamilton's equations. Now that we have the derivatives in hand, we can compute the trajectories in time,\n", "\n", "\\begin{align}\n", "x(t) = x(t_0) + \\int_{t_0}^t \\frac{\\partial H}{\\partial p} \\qquad p(t) = p(t_0) - \\int_{t_0}^t \\frac{\\partial H}{\\partial x}.\n", "\\end{align}\n", "\n", "\n", "In this case, trajectories in phase space will always look like the ones in the figure above. Any other trajectory requires a change in energy of the system (technically there could be nearly any trajectory, but that would require continuous change in energy). To make this more clear, we can include a vector field into the phase space, which will indicate how allowed trajectories will look like." ] }, { "cell_type": "code", "execution_count": 6, "id": "useful-delivery", "metadata": {}, "outputs": [ { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ ":VectorField [x,y] (Angle,Magnitude)" ] }, "execution_count": 6, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "p1204" } }, "output_type": "execute_result" } ], "source": [ "xs, ys = np.linspace(-4, 4, 16), np.linspace(-4, 4, 16)\n", "X, Y = np.meshgrid(xs, ys)\n", "\n", "# Convert U, V to magnitude and angle\n", "mag = np.sqrt(X**2 + Y**2)\n", "angle = (np.pi/2.0) - np.arctan2(Y / mag, -X / mag)\n", "\n", "vectorfield = hv.VectorField(\n", " (xs, ys, angle, mag)\n", ").opts(\n", " magnitude='Magnitude', \n", " height=400, \n", " width=400, \n", " #cmap='viridis', \n", " color='gray',\n", " xlabel=\"q\",\n", " ylabel=\"p\",\n", " alpha=0.6\n", ")\n", "\n", "vectorfield" ] }, { "cell_type": "markdown", "id": "marked-manufacturer", "metadata": {}, "source": [ "So where ever we start in phase space, the vector fields tells us where to go. And the time evolution is given by Hamilton's equations.\n", "\n", "For illustration purpose, you can download a Bokeh app with small animation of a spring and the resulting trajectory in phase space [here](oscillator.py). To view the Bokeh app, you can serve it up from the command line by doing\n", "\n", "```bash\n", "bokeh serve --show oscillator.py\n", "```\n", "\n", "Alternatively, you can enter the above command preceded by a `!` in a cell in a Jupyter notebook. You'll have interrupt the kernel when you are done with the animation." ] }, { "cell_type": "markdown", "id": "better-possession", "metadata": {}, "source": [ "## Hamiltonian Monte Carlo\n", "\n", "Let's put our knowledge of Hamiltonians to use. First we need to choose our Hamiltonian Function, for which we take the log of a joint distribution of both variables,\n", "\n", "\\begin{align}\n", "H(q,p) = -\\log\\pi(q,p) = -\\log\\pi(p|q) - \\log\\pi(q).\n", "\\end{align}\n", "\n", "In therms of potential and kinetic energy this reads as,\n", "\n", "\\begin{align}\n", "H(q,p) = T(q,p) + U(q).\n", "\\end{align}\n", "\n", "The trick is to identify $q$ as the parameters of interest and $U(q) = -\\log\\pi(q)$ as the negative log posterior. Let's look again and Hamilton's equations,\n", "\n", "\\begin{align}\n", "\\frac{\\partial q}{\\partial t} = \\frac{\\partial T}{\\partial p} \\qquad \\frac{\\partial p}{\\partial t} = -\\frac{\\partial T}{\\partial q} -\\frac{\\partial U}{\\partial q}\n", "\\end{align}\n", "\n", "The only thing we are left with is to choose a kinetic energy. How we choose a kinetic energy will be discussed in the next section. Assume for now that we have chosen a kinetic energy and know its derivative. Then we can compute the trajectories for both momentum and location (our parameters)! As we said before, we want to sample out of the typical set, which means that we want to find a trajectory which follows the typical set. By sampling out of the typical set of the joint distribution we automatically sample out of the typical set of the posterior distribution.\n", "\n", "![Joint typical set](images/joint_typical.png)\n", "\n", "(Image taken from [Betancourt, Michael. \"A conceptual introduction to Hamiltonian Monte Carlo.\" arXiv preprint arXiv:1701.02434 (2017).](https://arxiv.org/abs/1701.02434))" ] }, { "cell_type": "markdown", "id": "gothic-queensland", "metadata": {}, "source": [ "## Transition using HMC\n", "\n", "Assume we are at a given position in parameter space $q$ (we have an initial condition of parameters), then we need to come up with a kinetic energy function and a set of momenta $p$ (a set because we need one momentum per dimension). Once we made that choice, we can simply use Hamilton's equations to integrate forward and find a new sample of parameters. As we discussed earlier, that just means that we follow the path in phase space that corresponds to that certain value of energy that we chose. A transition would look something like this." ] }, { "cell_type": "code", "execution_count": 7, "id": "crude-challenge", "metadata": {}, "outputs": [ { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ ":Overlay\n", " .Scatter.I :Scatter [x] (y)\n", " .Scatter.II :Scatter [x] (y)\n", " .VectorField.I :VectorField [x,y] (Angle,Magnitude)\n", " .Curve.I :Curve [x] (y)\n", " .Curve.II :Curve [x] (y)\n", " .Curve.III :Curve [x] (y)\n", " .Curve.IV :Curve [x] (y)\n", " .Curve.V :Curve [x] (y)\n", " .Curve.VI :Curve [x] (y)\n", " .Curve.VII :Curve [x] (y)" ] }, "execution_count": 7, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "p1264" } }, "output_type": "execute_result" } ], "source": [ "H = 9\n", "color = bokeh.palettes.BuPu[4][0]\n", "x_arr = np.linspace(-np.sqrt(H), np.sqrt(H), 1000)\n", "p_plus = simple_oscillator(H, x_arr)\n", "p_minus = -simple_oscillator(H, x_arr)\n", "\n", "scatter1 = hv.Scatter(([x_arr[100], x_arr[300]], [p_plus[100], p_plus[300]])).opts(\n", " size=10, color=\"orange\", alpha=0.5\n", ")\n", "scatter2 = hv.Scatter(([x_arr[100], x_arr[300]], [0, 0])).opts(size=10, color=\"orange\")\n", "arrow1 = hv.Curve(([x_arr[100], x_arr[100]], [0, p_plus[100] - 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow1_1 = hv.Curve(\n", " ([x_arr[100] - 0.2, x_arr[100]], [p_plus[100] - 0.3, p_plus[100] - 0.1])\n", ").opts(color=\"orange\", alpha=0.5)\n", "arrow1_2 = hv.Curve(\n", " ([x_arr[100] + 0.2, x_arr[100]], [p_plus[100] - 0.3, p_plus[100] - 0.1])\n", ").opts(color=\"orange\", alpha=0.5)\n", "arrow2 = hv.Curve(([x_arr[300], x_arr[300]], [0.1, p_plus[300]])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow2_1 = hv.Curve(([x_arr[300] - 0.2, x_arr[300]], [0.3, 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow2_2 = hv.Curve(([x_arr[300] + 0.2, x_arr[300]], [0.3, 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "partial_H = hv.Curve((x_arr[100:300], p_plus[100:300])).opts(color=\"orange\", alpha=0.5)\n", "joint = (\n", " scatter1\n", " * scatter2\n", " * vectorfield\n", " * arrow1\n", " * arrow2\n", " * partial_H\n", " * arrow1_1\n", " * arrow1_2\n", " * arrow2_1\n", " * arrow2_2\n", ")\n", "\n", "\n", "joint.opts(\n", " height=400,\n", " width=400,\n", " xlim=(-4, 4),\n", " ylim=(-4, 4),\n", " show_grid=True,\n", " xlabel=\"q\",\n", " ylabel=\"p\",\n", ")" ] }, { "cell_type": "markdown", "id": "devoted-philip", "metadata": {}, "source": [ "Now we need to use this multiple times to get multiple samples. At each step we need to sample new momenta, and therefore are following a different trajectory in each step. Therefore, we can distinguish HMC sampling into two distinct phases. First, choosing appropriate momenta and kinetic energies, and them numeric integration of the trajectory. At the end of the trajectory we receive a new sample. Let's take a look at both if these phases and how to do them." ] }, { "cell_type": "code", "execution_count": 8, "id": "adolescent-candy", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/l3/n6j3jk1n1p94lc552kcbzq280000gn/T/ipykernel_5666/985606356.py:2: RuntimeWarning: invalid value encountered in sqrt\n", " return np.sqrt(H - x ** 2)\n" ] }, { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ ":Overlay\n", " .Scatter.I :Scatter [x] (y)\n", " .Scatter.II :Scatter [x] (y)\n", " .VectorField.I :VectorField [x,y] (Angle,Magnitude)\n", " .Curve.I :Curve [x] (y)\n", " .Curve.II :Curve [x] (y)\n", " .Curve.III :Curve [x] (y)\n", " .Curve.IV :Curve [x] (y)\n", " .Curve.V :Curve [x] (y)\n", " .Curve.VI :Curve [x] (y)\n", " .Curve.VII :Curve [x] (y)\n", " .Scatter.III :Scatter [x] (y)\n", " .Scatter.IV :Scatter [x] (y)\n", " .Curve.VIII :Curve [x] (y)\n", " .Curve.IX :Curve [x] (y)\n", " .Curve.X :Curve [x] (y)\n", " .Curve.XI :Curve [x] (y)\n", " .Curve.XII :Curve [x] (y)\n", " .Curve.XIII :Curve [x] (y)\n", " .Curve.XIV :Curve [x] (y)" ] }, "execution_count": 8, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "p1477" } }, "output_type": "execute_result" } ], "source": [ "H1 = 9\n", "H2 = 2\n", "H3 = 4\n", "\n", "x_arr1 = np.linspace(-np.sqrt(H1), np.sqrt(H1), 1000)\n", "x_arr2 = np.linspace(-np.sqrt(H2), np.sqrt(H2), 1000)\n", "x_arr3 = np.linspace(-np.sqrt(H3), np.sqrt(H3), 1000)\n", "\n", "p_plus1 = simple_oscillator(H1, x_arr1)\n", "p_minus1 = -simple_oscillator(H1, x_arr1)\n", "p_plus2 = simple_oscillator(H2, x_arr2)\n", "p_minus2 = -simple_oscillator(H2, x_arr2)\n", "p_plus3 = simple_oscillator(H3, x_arr3)\n", "p_minus3 = -simple_oscillator(H3, x_arr3)\n", "\n", "scatter1 = hv.Scatter(([x_arr1[100], x_arr1[300]], [p_plus1[100], p_plus1[300]])).opts(\n", " size=10, color=\"orange\", alpha=0.5\n", ")\n", "scatter2 = hv.Scatter(([x_arr1[100], x_arr1[300]], [0, 0])).opts(\n", " size=10, color=\"orange\"\n", ")\n", "arrow1 = hv.Curve(([x_arr1[100], x_arr1[100]], [0, p_plus1[100] - 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow1_1 = hv.Curve(\n", " ([x_arr1[100] - 0.1, x_arr1[100]], [p_plus1[100] - 0.2, p_plus1[100] - 0.1])\n", ").opts(color=\"orange\", alpha=0.5)\n", "arrow1_2 = hv.Curve(\n", " ([x_arr1[100] + 0.1, x_arr1[100]], [p_plus1[100] - 0.2, p_plus1[100] - 0.1])\n", ").opts(color=\"orange\", alpha=0.5)\n", "arrow2 = hv.Curve(([x_arr1[300], x_arr1[300]], [0.1, p_plus1[300]])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow2_1 = hv.Curve(([x_arr1[300] - 0.1, x_arr1[300]], [0.3, 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow2_2 = hv.Curve(([x_arr1[300] + 0.1, x_arr1[300]], [0.3, 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "partial_H = hv.Curve((x_arr1[100:300], p_plus1[100:300])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "\n", "joint = (\n", " scatter1\n", " * scatter2\n", " * vectorfield\n", " * arrow1\n", " * arrow2\n", " * partial_H\n", " * arrow1_1\n", " * arrow1_2\n", " * arrow2_1\n", " * arrow2_2\n", ")\n", "\n", "scatter12 = hv.Scatter(([x_arr2[79], x_arr2[300]], [p_plus2[79], p_plus2[300]])).opts(\n", " size=10, color=\"orange\", alpha=0.5\n", ")\n", "scatter22 = hv.Scatter(([x_arr2[79], x_arr2[300]], [0, 0])).opts(\n", " size=10, color=\"orange\"\n", ")\n", "arrow12 = hv.Curve(([x_arr2[79], x_arr2[79]], [0, p_plus2[79] - 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow1_12 = hv.Curve(\n", " ([x_arr2[79] - 0.1, x_arr2[79]], [p_plus2[79] - 0.1, p_plus2[79] - 0.1])\n", ").opts(color=\"orange\", alpha=0.5)\n", "arrow1_22 = hv.Curve(\n", " ([x_arr2[79] + 0.1, x_arr2[79]], [p_plus2[79] - 0.1, p_plus2[79] - 0.1])\n", ").opts(color=\"orange\", alpha=0.5)\n", "arrow22 = hv.Curve(([x_arr2[300], x_arr2[300]], [0.1, p_plus2[300]])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow2_12 = hv.Curve(([x_arr2[300] - 0.1, x_arr2[300]], [0.2, 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "arrow2_22 = hv.Curve(([x_arr2[300] + 0.1, x_arr2[300]], [0.2, 0.1])).opts(\n", " color=\"orange\", alpha=0.5\n", ")\n", "partial_H2 = hv.Curve((x_arr2[79:300], p_plus2[79:300])).opts(color=\"orange\", alpha=0.5)\n", "\n", "joint = (\n", " joint\n", " * scatter12\n", " * scatter22\n", " * arrow12\n", " * arrow22\n", " * partial_H2\n", " * arrow1_12\n", " * arrow1_22\n", " * arrow2_12\n", " * arrow2_22\n", ")\n", "\n", "\n", "joint.opts(\n", " height=400,\n", " width=400,\n", " xlim=(-4, 4),\n", " ylim=(-4, 4),\n", " show_grid=True,\n", " xlabel=\"q\",\n", " ylabel=\"p\",\n", ")" ] }, { "cell_type": "markdown", "id": "accredited-unemployment", "metadata": {}, "source": [ "## Choosing Kinetic Energy (Euclidean-Gaussian)\n", "\n", "Here we briefly discuss one of the proposed ways to choose kinetic energies. The sample space is connected to a so called *metric* $g$, which tells us how we can measure distance in that space. For example, the metric you probably know is the so called Euclidean metric, in which the distance is given as the length of the vector connecting two points in space,\n", "\n", "\\begin{align}\n", "d(q, q^\\prime) = \\sqrt{\\sum_i \\left(q_i - q^\\prime_i\\right)^2},\n", "\\end{align}\n", "\n", "which we can also write as \n", "\n", "\\begin{align}\n", "d(q, q^\\prime)^2 = (q-q^\\prime)^\\mathsf{T} \\cdot \\mathsf{g} \\cdot (q-q^\\prime),\n", "\\end{align}\n", "\n", "where $\\mathsf{g}$ is \n", "\n", "\\begin{align}\n", "\\mathsf{g} = \\begin{pmatrix}\n", "1 & 0 & 0\\\\\n", "0 & 1 & 0\\\\\n", "0 & 0 & 1\n", "\\end{pmatrix}.\n", "\\end{align}\n", "\n", "In general we can modify the metric by scaling and rotation, without changing the rank order (meaning if one distance is larger than another in one parameterization, it will always stay larger after transforming the metric) or disrupting Hamilton's equations. I will denote $\\mathsf{M}$ as a general metric that can be obtained by rotating and scaling the original metric. The metric in parameter space defines a metric in momentum space, which is just the inverse metric $\\mathsf{M}^{-1}$,\n", "\n", "\\begin{align}\n", "d(p, p^\\prime)^2 = (p-p^\\prime)^\\mathsf{T} \\cdot \\mathsf{M}^{-1}\\cdot (p-p^\\prime).\n", "\\end{align}\n", "\n", "This lets us choose a kinetic energy which is simply the squared distance (plus some extra terms regarding normalization which becomes clear in the next step),\n", "\n", "\\begin{align}\n", "K(q,p) = \\frac{1}{2} p^\\mathsf{T}\\cdot \\mathsf{M}^{-1} \\cdot p + \\log\\left(\\mathrm{det} \\,\\mathsf{M}\\right) + \\mathrm{const.}\n", "\\end{align}\n", "\n", "Then, the conditional probability is simply a centered Multivariate normal with covariance matrix $\\mathsf{M}^{-1}$ (this is why we included the extra terms in the kinetic energy),\n", "\n", "\\begin{align}\n", "\\pi (p\\mid q) = \\text{Norm}(p \\mid 0, \\mathsf{M})\n", "\\end{align}\n", "\n", "Without going too much into detail, if the covariance matrix $\\mathsf{M}$ resembles the covariance of the posterior distribution, then we achieve minimal correlation of the posterior distribution, and therefore giving us more independent samples. Therefore, one job of the warm-up steps is to explore the posterior distribution and explore its covariance. The metric is updated iteratively to achieve an optimal guess of the covariance. This is one of the reasons that you might need to increase the number of warm-up steps for more complicated posteriors, since it takes more steps to accurately determine the covariance. Once we have a good choice of the metric, we can quickly explore the posterior using Hamilton's equations." ] }, { "cell_type": "markdown", "id": "bearing-indicator", "metadata": {}, "source": [ "## A short note on integration times\n", "\n", "Finding the optimal time for how long we integrate Hamilton's equations is not trivial; however, the idea is quite simple. If the integration time is too large, then we do not obtain new information, since we likely get samples from multiple laps through the trajectory. In the example above (becomes more obvious when you look at the animation), we just start doing multiple laps in the same circle, therefore not exploring anything we have not explored before. However, if we choose an integration time that is too short, then we might not sample the entire trajectory, and are missing some information that would be easily obtained by integrating longer. So in this context, the optimal integration time would be to follow the circle for exactly one lap, and then choose a new momentum, and explore the new circle. For more complicated trajectories, it is not as simple as \"doing one lap\" since we might return to an area close to the origin of our trajectory, just to head off to a totally unexplored area (imagine a trajectory formed like an 8). One way around that is to use a so called *No U-Turn Sampler*, short NUTS, which integrates the trajectory both forward and backwards in time, until a certain condition is met, that there is a U-turn at the ends of the forward and backward trajectory. Then we are sure that we explored one lap of trajectory, and take a random point from this trajectory as a sample. This sample is then taken as initial point for the next step." ] }, { "cell_type": "markdown", "id": "dangerous-style", "metadata": {}, "source": [ "## Numerical integration and what happens in divergences\n", "\n", "As many of you know, numeric integrators are not not perfect. They usually diverge from the actual solution the farther you integrate away from the initial condition. For example, below is shown the forward Euler method applied to an exponential function. We do not need to go into details of this method, but the problem is that due to numerical inaccuracies and that numerical integration has a discrete step size, there is a small deviation from the exact solution at each step. These errors can add up, and if we integrate for too long, then the numeric solution can vary drastically." ] }, { "cell_type": "code", "execution_count": 9, "id": "beginning-suggestion", "metadata": {}, "outputs": [ { "data": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ ":Overlay\n", " .Curve.Exact_Solution :Curve [x] (y)\n", " .Curve.Euler_method :Curve [x] (y)" ] }, "execution_count": 9, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "p1843" } }, "output_type": "execute_result" } ], "source": [ "# credit to: https://stackoverflow.com/a/33601089\n", "\n", "# Concentration over time\n", "N = lambda t: N0 * np.exp(k * t)\n", "# dN/dt\n", "def dx_dt(x):\n", " return k * x\n", "\n", "k = .5\n", "h = 0.5\n", "N0 = 100.\n", "\n", "t = np.arange(0, 10, h)\n", "y = np.zeros(len(t))\n", "\n", "y[0] = N0\n", "for i in range(1, len(t)):\n", " # Euler's method\n", " y[i] = y[i-1] + dx_dt(y[i-1]) * h\n", " \n", "exact = hv.Curve((t, N(t)), label=\"Exact Solution\")\n", "approx = hv.Curve((t, y), label=\"Euler method\").opts(color=\"orange\")\n", "\n", "exact * approx" ] }, { "cell_type": "markdown", "id": "structural-exhibition", "metadata": {}, "source": [ "When we do numerical integration on Hamilton's equations, we can abuse the fact that the energy is conserved along the trajectory and the volume of phase space is conserved (if you do not understand what it means when \"volume is conserved\", that is not a problem for this notebook. The interested can look up [Liouville's theorem](https://en.wikipedia.org/wiki/Liouville%27s_theorem_(Hamiltonian)), which is definitely worth a read since it is one of the key concepts in Hamilton Mechanics). Then, the numeric integration will always go back to the true solution and will oscillate around it. These types of integrators is called *symplectic integrators*. \n", "\n", "However, these small deviations can be detrimental in regions where the Hamiltonian has high curvature, meaning the gradient changes quite strongly in a small interval. Then, the small deviation of the numerical integrator can have catastrophic effects, and will lead to the trajectory completely shooting off into infinity. (Imagine you are on a bridge. If you are in the center of the bridge, and you make a small deviation from your trajectory, will be still on the bridge and correcting your trajectory will be quite easy. However, if you are the edge of the bridge close to the railing, a small deviation can lead to falling of the bridge. This would be called a divergence, and you end up as an orange dot in someone's corner plot.)\n", "\n", "Therefore, warm-up steps are very important do get a well behaving chain in the posterior. Also, as you have seen earlier in the class, divergences can be fought off by increasing the `adapt_delta`. This is effectively decreasing the step size of the integrator. While this will increase the time it takes to explore the posterior (smaller steps => more steps to explore the same distance), this increased time might be worth it if the chain can avoid divergences." ] }, { "cell_type": "markdown", "id": "comprehensive-princeton", "metadata": {}, "source": [ "## Computing Environment" ] }, { "cell_type": "code", "execution_count": 10, "id": "inside-arlington", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python implementation: CPython\n", "Python version : 3.11.5\n", "IPython version : 8.15.0\n", "\n", "numpy : 1.26.3\n", "scipy : 1.11.4\n", "bokeh : 3.3.0\n", "holoviews : 1.18.1\n", "jupyterlab: 4.0.10\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,bokeh,holoviews,jupyterlab" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }