{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise: Domain wall pair conversion\n", "\n", "## Problem description\n", "\n", "We want to simulate a domain wall conversion in a two-dimensional thin film sample with:\n", "\n", "- exchange energy constant $A = 15 \\,\\text{pJ}\\,\\text{m}^{-1}$,\n", "- Dzyaloshinskii-Moriya energy constant $D = 3 \\,\\text{mJ}\\,\\text{m}^{-2}$,\n", "- uniaxial anisotropy constant $K = 0.5 \\,\\text{MJ}\\,\\text{m}^{-3}$ with $\\hat{\\mathbf{u}} = (0, 0, 1)$ in the out of plane direction,\n", "- gyrotropic ratio $\\gamma = 2.211 \\times 10^{5} \\,\\text{m}\\,\\text{A}^{-1}\\,\\text{s}^{-1}$, and\n", "- Gilbert damping $\\alpha=0.3$.\n", "\n", "Please carry out the following steps:\n", "\n", "1. Create the following geometry with discretisation cell size $(2 \\,\\text{nm}, 2 \\,\\text{nm}, 2 \\,\\text{nm})$.\n", " \n", " \n", "\n", "2. Initialise the magnetisation so that when relaxes, a domain pair is present in the narrower part of the geometry.\n", "\n", "3. Relax the system. Is a domain wall pair contained in the constrained part?\n", "\n", "4. Apply the spin polarised current in the positive $x$ direction with velocity $\\mathbf{u} = (400, 0, 0) \\,\\text{m}\\,\\text{s}^{-1}$, with $\\beta=0.5$.\n", "\n", "5. Evolve the system over $0.2 \\,\\text{ns}$. What did you get? [1]\n", "\n", "## References\n", "\n", "[1] Zhou, Y., & Ezawa, M. (2014). A reversible conversion between a skyrmion and a domain-wall pair in a junction geometry. *Nature Communications* **5**, 8. https://doi.org/10.1038/ncomms5652\n", "\n", "\n", "## Solution" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "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tm2r9fu4HCoCRERERKRGVsPU4K9LMZlMDB48mN/85jdV2isqKvj++++5/vrra/3e8vPzKS0trfLF3iY0NBSr1Upubi6VlZV88803F40DOHDgAAA5OTkEBwc7jOmvLi4gIABfX98qcUFBQZhMJntcfXPb4UCaMrHpG3Rtr8ZOwcGH+f9p7BRERESuiEpr0/jtOC0tjePHj3Pvvffa244dO8b06dP597//TWFhIR07duTee++1D78pKioCwM/Pz+F4traioiJKSkqoqKi4ZFxxcbH9n+Hh4bWKq+54Hh4e+Pj42OPqm9sWASIiIiJSe874YPCF1q5dy2uvvcbIkSOrzNRz+PBhYmJiSE5OpqSkhLVr1/L8889z5swZxo8fT3l5OXDui/eFbEONzpw5w9mzZ2sVB3D27Nlax1111VXVvh+z2WyPq28qAkRERESkRlacuwh45ZVXSEtLY+jQofzlL3+xt6elpdGiRQt8fHzsbf369ePuu+8mNTWVu+++G09PT+DcUKIL2QoEb2/vWscBeHl5/aI4W6yXl1cN77xuVASIiIiISI2ceTjQzJkzWbt2LRMmTGDatGmYTP8rWC4caw/nnicYMGAA+/bt4+uvv6ZDhw4A1Q69KSwsBKB9+/a0adMGDw+PGuMA2rVrV+u4b775xiHuzJkznDx5sso0pvXJef9rioiIiIjTcLYHg21SUlJ46623ePrpp3n88cerFAAAVquVyspKh/1sw2w8PT3p0KEDfn5+9pl9zpeTk4PZbKZLly40b96c0NDQi8bBuTUJALp27crXX3+N1WqtMe7o0aMcO3asSlxubm6VuPqmIkBEREREauSMRUBmZiaLFy/mscce47777nPYnpeXR8+ePUlOTq7SbrFYyMzMxNfXl5CQEAAGDRrErl27KCgosMeVlZWxZcsWoqOjadmyJQCxsbHk5uaSnZ39v76xWtm4cSPh4eF07tzZHldSUsL27durnHvDhg34+/tz88032+MMw+C9996rEvfuu+9iNpv5/e9/X2M/1IWGA4mIiIhIjSxOtlhYZWUlL774IoGBgdx888188cUXDjFhYWEMHDiQ9PR0WrRoQVRUFGVlZbz55pvk5uYye/Zs+4O6kydPZvPmzSQkJJCYmIjZbGbp0qWcPn2apKQk+zHHjh3L22+/TWJiItOmTcPX15e1a9dy6NAhli1b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OieVkpLCW2+9xdNPP819991XZVuHDh3w8/MjJyfHYb+cnBzMZjNdunSp87lFRERExJFmB3ItdRoOBHDdddeRkJDAxo0b2bBhA+PHj+fIkSNMnz6dW2+9leeff54DBw5c9nEzMzNZvHgxjz32mEMBYDNo0CB27dpFQUGBva2srIwtW7YQHR1Ny5Yt6/q2RERERKQ6RiO85IoxGYZRr128e/duXnrpJf7zn/8A5xbxeuihh7jttttq3LeyspLY2FgMwyAlJcU+BOh8YWFhHDt2jDvvvJPAwEASExMxm80sXbqUffv2sX79ekJCQmo8l/VnxylGpWkZdG2vxk7BwYf5/2nsFERExI0063Cwwc7VMymlwc5l898Fjzb4Od1FvU0ReuTIEfvwINsdgF69enHo0CESEhIYOnQoL7zwQpVFwC70888/88MPPwAwatSoamO2bdtGYGAgb775JvPmzSMpKQnDMOjVqxcrV66sVQEgIiIiIpdHw4Fcyy8qAqxWK9u3b+ftt99m586dVFZW0rp1a8aNG8fo0aMJDg7m9OnTpKam8vrrr+Pv78/06dMverzAwMBqx/pXJzg4mMWLF/+S9EVERESktjQ8x6XUqQj4/vvvefvtt8nIyKCoqAjDMOjZsyejR49myJAh9mk84dx0nU888QRFRUVs2LDhkkWAiIiIiDgn3QlwLXUqAgYNGoTJZMLb25tRo0Zxzz330LVr10vuc+utt7Jx48Y6JSkiIiIijUx3AlxKnYqAsLAwRo8ezZ133lnrmXhuvPFG5s+fX5fTiYiIiEgj0+JdrqVORcCGDRsue5/AwEACAwPrcjoRERERaWQaDuRa6m12IBERERFxYboT4FJUBIiIiIhIzVQEuBQVASIiIiJSIw0Hci0qAkRERESkRiZDtwJciYoAEREREalZE64BSktLWbRoEX//+985duwY1157LdHR0Tz88MP4+fkBsHv3bu67776LHmP//v20aHHuq7PFYuG1114jIyOD/Px82rZty+DBg3nkkUfw8vKqst/atWt54403+O6772jdujUDBgwgKSnJfl6bLVu2sGTJEg4ePIiXlxdRUVFMmzbNYWKdrKwsUlNT+fLLL2nWrBl9+vQhKSmJ8PDwy+oTFQEiIiIiUqOmOhyooqKCCRMmcOjQIaZOnUrXrl358ssvSU1NJSsri4yMDJo3b26P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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import oommfc as oc\n", "import discretisedfield as df\n", "import micromagneticmodel as mm\n", "\n", "Ms = 5.8e5 # saturation magnetisation (A/m)\n", "A = 15e-12 # exchange energy constant (J/)\n", "D = 3e-3 # Dzyaloshinkii-Moriya energy constant (J/m**2)\n", "K = 0.5e6 # uniaxial anisotropy constant (J/m**3)\n", "u = (0, 0, 1) # easy axis\n", "gamma0 = 2.211e5 # gyromagnetic ratio (m/As)\n", "alpha = 0.3 # Gilbert damping\n", "\n", "system = mm.System(name='dw_pair_conversion')\n", "system.energy = mm.Exchange(A=A) + mm.DMI(D=D, crystalclass='Cnv_z') + mm.UniaxialAnisotropy(K=K, u=u)\n", "system.dynamics = mm.Precession(gamma0=2.211e5) + mm.Damping(alpha=alpha)\n", "\n", "p1 = (0, 0, 0)\n", "p2 = (150e-9, 50e-9, 2e-9)\n", "cell = (2e-9, 2e-9, 2e-9)\n", "\n", "region = df.Region(p1=p1, p2=p2)\n", "mesh = df.Mesh(region=region, cell=cell)\n", "\n", "def Ms_fun(pos):\n", " x, y, z = pos\n", " if x < 50e-9 and (y < 15e-9 or y > 35e-9):\n", " return 0\n", " else:\n", " return Ms\n", " \n", "def m_init(pos):\n", " x, y, z = pos\n", " if 30e-9 < x < 40e-9:\n", " return (0.1, 0.1, -1)\n", " else:\n", " return (0.1, 0.1, 1)\n", " \n", "system.m = df.Field(mesh, nvdim=3, value=m_init, norm=Ms_fun, valid=\"norm\")\n", "\n", "system.m.z.sel('z').mpl.scalar()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running OOMMF (ExeOOMMFRunner)[2023/10/23 15:51]... (0.5 s)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "md = oc.MinDriver()\n", "md.drive(system)\n", "\n", "system.m.z.sel('z').mpl.scalar()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "ux = 400 # velocity in x direction (m/s)\n", "beta = 0.5 # non-adiabatic STT parameter\n", "\n", "system.dynamics += mm.ZhangLi(u=ux, beta=beta)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Running OOMMF (ExeOOMMFRunner)[2023/10/23 15:51]... (2.1 s)\n" ] }, { "data": { "image/png": "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acErr7wC4bqp1isqKjBz5kzU19cjIyMDq1evhqurKxISEnDs2DETtZaIiIjIeqkE+15/Uc8x6+FAubm5UCqVuO222wyWq9VqrFmzBl5eXgCAiIgIxMbGIisrCxs3bjRBa4mIiIisF4cDWRez/WuWl5dj/fr1ePbZZ9GnTx/dckEQUFRUhOjoaF0AAACOjo6IjY1FcXExlEqlKZpMREREZLXUgl2vv6jnmGXvajQaLFmyBLfffjv+/Oc/65VVVlaioaEBQUFBBusFBQVBo9GgvLy8t5pKREREZBM4HMi6mOVwoG3btuH48ePYtWuXQVltbS0AwNPT06BMu0xbh4jaOMrEH66SmgugsywxTziZB7Gc61LzADRoWkTL60TSuf/S6i667qnmAUbLfmr2Ed9vi4touRgvxytGywIUF0TXDXCsMlp2i4P4nXMvO+N92UcmPu+Bk8glhjWeG8Tek0YQP2YthUbgg7rWxOyCgN9++w2ZmZlITEyEv7+/QXlLS9sJydHR0aBMLm87ITU1NfVsI4mIiIhsDCcLsy5mFwSkpaXB19cX8+bNa7fcyckJAKBSGc6QqA0QnJ2de66BRERERDaolcNzrIpZBQGff/45Dhw4gDVr1kClUuku9NXqtttoV65cgbe3NwCgrq7OYP2amhoAgI+P+C1ZIiIiIroxag4HsipmFQQcOHAAgiAgMTGx3fI77rgDCxcuhKenJ8rKygzKy8rKIJfLMXTo0J5uKhEREZFNadXwToA1MasgICkpCQ899JDB8mXLlgEAXn75Zdx8882oqalBfn4+qqurdb/6NzY2orCwEDExMXBx6fzDV0RERERkiDP4WhezCgIGDx6MwYMHGyx3c3MDAERGRgIAFixYgD179iApKQnJycmQy+VYt24drl69itTU1N5sMhEREZFNYHYg62JWQUBH9e/fH1u3bkV6ejpSU1MhCALCw8OxadMmBAYGmrp5RGbHSSIdn71IClE7iV9+rDHVH/U8sRSggHga0EaNYWKIa4mlAAWA0hbjz419eVl8OOlXF4YYLfv1gofoupoGkZSaEtdW9n2Nv+dbfA2fkbvWqH4/GS272/W06LohjtXG22TXKrqu2HkFguiqPK9cw5ySi/LBYOtiEUHA5s2bDZYFBARg9erVJmgNERERke3hg8HWxSKCACIiIiIyLY3AOzTWhEEAERER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0G377fwVjb1IGlCxNJ5SmOaTboSlDgdqT1VVFVavXo2QkBBERETole3evRsrVqzAjz/+CLlcjlGjRiE1NRWDBg0CANTW1sLV1VXv13gtT09P1NXV6eppl7VXr7S0tEP1VCoVlEqlZD3ttm666aYO9YHNBgFERERE1HEyjXlFASqVChUVFaJ13Nzc4Ovrq7estrYWSUlJaGlpQXp6ut4QHAAoLS1FYmIifHx88L///Q+rVq3Cd999h08//RRubm5obm5uNwAAALlcjkuXLgEAmpubAaDdunK5XFcuVU9bR1tPu6y9ek1NTUZ6whCDACIiIiKSZl4xAKqqqhAfHy9a58EHH8Sbb76p+3dFRQXmzp2L+vp6rF+/Xm9oze23345Dhw7B29sbdnZtd8HuuOMODBkyBImJidiwYQOefvppKBQKqFTtTw7Y0tKiSxGq/a9KpTJIG2qsXnvb09YRq6dd5uzsLNof12IQQERERESSzC1FqJ+fn248fUeUlpYiISEBCoUC27ZtQ2BgoF65o6MjfHx8DNYbM2YMFAoFvv/+ewBAv3790NDQgJaWFoNf72tra3UPHPfr1w8AUFdXp0vxeW097b6urXe92tpaKBQKuLm56erV19cb1KupqQGAdttvDAf7EREREZEkS80OBAC//vor5s6dC29v73YDAC3tL+/Xam1thUqlgpOTEwAgNDQUgiDg1KlTevVqampQU1Ojm2MgNLTtebzrAxW1Wo3Tp0/jtttuE62nXRYaGgp7e3sEBwfD3t7eaD0fHx+DoU9iGAQQERERkTRB6P1XN1Cr1UhJSYGjoyPee+899O/fv916L774IqKiogx+kd+3bx/UajWioqIAABMmTICDgwN27dqlV0/773vvvRcAEB0dDXd3d4N6e/fuxZUrV3T1hg4dioCAABQUFEC45j1///33OHPmDOLi4gC0Pd8QHR2NPXv26I39r6qqwldffaXbXkdxOBARERERSbLU7ED5+fn44YcfkJqaivPnzxuk0fT09ISfnx9mzpyJzz77DE888QTmzZsHHx8fHDt2DO+++y4CAgIwbdo0AED//v2RkJCADRs2wNPTE1FRUTh+/Diys7MxdepU3S/7Tk5OSE1NxdKlS/HGG28gNjYWFRUVWL58Oe6++26MHz9e14bnn38eSUlJeO655/CXv/wFtbW1yMjIQEBAAB55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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "td = oc.TimeDriver()\n", "td.drive(system, t=0.2e-9, n=200)\n", "\n", "system.m.z.sel('z').mpl.scalar()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a result, we got a skyrmion formed in the wider region.\n", "\n", "We can use the `micromagneticdata` package to examine the time drive and create an interactive plot." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "tags": [ "nbval-ignore-output" ] }, "outputs": [ { "data": { "application/javascript": [ "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", " var py_version = '3.2.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n", " var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n", " var reloading = false;\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.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.2.3/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.2.3/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 = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\"];\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.2.2'.replace('rc', '-rc.').replace('.dev', '-dev.');\n var is_dev = py_version.indexOf(\"+\") !== -1 || py_version.indexOf(\"-\") !== -1;\n var reloading = false;\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.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/jspanel.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/modal/jspanel.modal.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/tooltip/jspanel.tooltip.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/hint/jspanel.hint.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/layout/jspanel.layout.js', 'https://cdn.holoviz.org/panel/1.2.3/dist/bundled/floatpanel/jspanel4@4.12.0/dist/extensions/contextmenu/jspanel.contextmenu.js', 'https://cdn.holoviz.org/panel/1.2.3/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.2.3/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.2.3/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 = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.2.min.js\", \"https://cdn.holoviz.org/panel/1.2.3/dist/panel.min.js\"];\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": {}, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.holoviews_exec.v0+json": "", "text/html": [ "
\n", "
\n", "
\n", "" ], "text/plain": [ ":DynamicMap [t]\n", " :Overlay\n", " .Image.I :Image [x,y] (field)\n", " .VectorField.I :VectorField [x,y] (angle,mag)" ] }, "execution_count": 5, "metadata": { "application/vnd.holoviews_exec.v0+json": { "id": "p1002" } }, "output_type": "execute_result" } ], "source": [ "import micromagneticdata as md\n", "\n", "data = md.Data(system.name)\n", "\n", "# Use only the last time drive\n", "time_drive = data[-1]\n", "\n", "time_drive.hv(\n", " kdims=[\"x\", \"y\"],\n", " scalar_kw={\"clim\": (-Ms, Ms), \"cmap\": \"coolwarm\"},\n", ")" ] } ], "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.10.12" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }