FiniteVolumeGPU/WAFExp.ipynb
2018-08-01 11:03:00 +02:00

3084 lines
302 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#Lets have matplotlib \"inline\"\n",
"%matplotlib notebook\n",
"\n",
"#Import packages we need\n",
"import numpy as np\n",
"import os\n",
"import subprocess\n",
"from matplotlib import animation, rc\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"#Misc plotting setup\n",
"def setBwStyles(ax):\n",
" from cycler import cycler\n",
"\n",
" ax.set_prop_cycle( cycler('marker', ['.', 'x', 4, '+', '*', '1', 5]) +\n",
" cycler('linestyle', ['-.', '--', ':', '-.', '--', ':', '-.']) +\n",
" #cycler('markersize', [5, 5, 5, 5, 5, 5]) +\n",
" cycler('color', ['k', 'k', 'k', 'k', 'k', 'k', 'k']) ) \n",
"\n",
"#Set large figure sizes\n",
"#plt.rcParams['figure.figsize'] = [12, 8]\n",
"plt.rcParams['figure.dpi'] = 100\n",
"plt.rcParams['animation.html'] = 'html5'\n",
"#plt.rcParams['legend.markerscale'] = 1.0\n",
"#plt.rcParams['lines.markersize'] = 6\n",
"plt.rcParams['lines.markeredgewidth'] = 1.5\n",
"#plt.rcParams['savefig.dpi'] = 400"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'\\nref_x, ref_h, _ = gen_reference(512)\\nplt.plot(ref_x, ref_h, \\'-\\', label=\\'Reference\\')\\nplt.title(\"Reference data\")\\nplt.legend()\\nplt.show()\\n'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def gen_reference(nx):\n",
" csv_filename = 'shock1d_ref_nx=' + str(nx) + '.csv'\n",
"\n",
" #If we do not have the data, generate it \n",
" if (not os.path.isfile(csv_filename)):\n",
" print(\"Generating new reference!\")\n",
" swashes_path = r'C:\\Users\\anbro\\Documents\\programs\\SWASHES-1.03.00_win\\bin\\swashes_win.exe'\n",
"\n",
" swashes_args = [\\\n",
" '1', # 1D problems \\\n",
" '3', # Dam breaks \\\n",
" '1', # Domain 1 \\\n",
" '1', # Wet domain no friction\n",
" str(nx) #Number of cells X\n",
" ]\n",
"\n",
" with open(csv_filename, 'w') as csv_file:\n",
" p = subprocess.check_call([swashes_path] + swashes_args, stdout=csv_file)\n",
"\n",
" reference = np.genfromtxt(csv_filename, comments='#', delimiter='\\t', skip_header=0, usecols=(0, 1, 2))\n",
" x, h, u = reference[:, 0], reference[:, 1], reference[:, 2]\n",
" return x, h, h*u\n",
"\n",
"\"\"\"\n",
"ref_x, ref_h, _ = gen_reference(512)\n",
"plt.plot(ref_x, ref_h, '-', label='Reference')\n",
"plt.title(\"Reference data\")\n",
"plt.legend()\n",
"plt.show()\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'\\nr = np.linspace(-1.0, 2.0, 10)\\nc = -15*np.ones_like(r)\\n\\nx = r\\ny = list(map(WAF_minmod, r, c))\\n\\nplt.figure()\\nplt.plot(x, y)\\nplt.title(\"WAF minmod limiter\")\\nplt.show()\\n'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def WAF_minmod(r_, c_):\n",
" return 1.0 - (1.0 - abs(c_)) * max(0.0, min(1.0, r_));\n",
"\n",
"\"\"\"\n",
"r = np.linspace(-1.0, 2.0, 10)\n",
"c = -15*np.ones_like(r)\n",
"\n",
"x = r\n",
"y = list(map(WAF_minmod, r, c))\n",
"\n",
"plt.figure()\n",
"plt.plot(x, y)\n",
"plt.title(\"WAF minmod limiter\")\n",
"plt.show()\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'\\nref_x, ref_h, ref_hu = gen_reference(512)\\nF = np.array(list(map(F_func_helper, ref_h, ref_hu)))\\n\\nfig, ax1 = plt.subplots()\\nplt.ylim([0, 0.01])\\nax2 = ax1.twinx()\\n\\nax1.plot(ref_x, ref_h, \\'-\\', label=\\'Reference\\')\\n\\nax2.plot(ref_x, F[:,0], \\':\\', label=\\'F_0\\')\\nax2.plot(ref_x, F[:,1], \\'.-\\', label=\\'F_1\\')\\nax2.plot(ref_x, F[:,2], \\'--\\', label=\\'F_2\\')\\n\\nplt.title(\"Flux function for shallow water\")\\nplt.legend()\\n'"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def F_func(Q, g):\n",
" F = np.zeros(3)\n",
"\n",
" F[0] = Q[1]; #hu\n",
" F[1] = Q[1]*Q[1] / Q[0] + 0.5*g*Q[0]*Q[0]; #hu*hu/h + 0.5f*g*h*h;\n",
" F[2] = Q[1]*Q[2] / Q[0]; #hu*hv/h;\n",
"\n",
" return F;\n",
"\n",
"def F_func_helper(h, hu):\n",
" return F_func(np.array([h, hu, 0.0]), 9.81)\n",
"\n",
"\"\"\"\n",
"ref_x, ref_h, ref_hu = gen_reference(512)\n",
"F = np.array(list(map(F_func_helper, ref_h, ref_hu)))\n",
"\n",
"fig, ax1 = plt.subplots()\n",
"plt.ylim([0, 0.01])\n",
"ax2 = ax1.twinx()\n",
"\n",
"ax1.plot(ref_x, ref_h, '-', label='Reference')\n",
"\n",
"ax2.plot(ref_x, F[:,0], ':', label='F_0')\n",
"ax2.plot(ref_x, F[:,1], '.-', label='F_1')\n",
"ax2.plot(ref_x, F[:,2], '--', label='F_2')\n",
"\n",
"plt.title(\"Flux function for shallow water\")\n",
"plt.legend()\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"'\\nref_x, ref_h, ref_hu = gen_reference(512)\\nF = WAF_1D_flux_helper(ref_h, ref_hu, 9.81, 0.1, 0.01)\\n\\nfig, ax1 = plt.subplots()\\nplt.ylim([0, 0.01])\\nax2 = ax1.twinx()\\n\\nax1.plot(ref_x, ref_h, \\'--\\', label=\\'Reference\\')\\n\\nfor i in range(F.shape[1]):\\n ax2.plot(ref_x[2:-1], F[:,i], label=\\'F_\\' + str(i))\\n\\nplt.title(\"WAF flux for shallow water\")\\nplt.legend()\\n'"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def WAF_1D_flux(Q_l2, Q_l1, Q_r1, Q_r2, g_, dx_, dt_): \n",
" h_l = Q_l1[0];\n",
" h_r = Q_r1[0];\n",
" \n",
" h_l2 = Q_l2[0];\n",
" h_r2 = Q_r2[0];\n",
" \n",
" # Calculate velocities\n",
" u_l = Q_l1[1] / h_l;\n",
" u_r = Q_r1[1] / h_r;\n",
" \n",
" v_l = Q_l1[2] / h_l;\n",
" v_r = Q_r1[2] / h_r;\n",
" \n",
" v_l2 = Q_l2[2] / h_l2;\n",
" v_r2 = Q_r2[2] / h_r2;\n",
" \n",
" # Estimate the potential wave speeds\n",
" c_l = np.sqrt(g_*h_l);\n",
" c_r = np.sqrt(g_*h_r);\n",
" \n",
" # Compute h in the \"star region\", h^dagger\n",
" h_dag = 0.5 * (h_l+h_r) - 0.25 * (u_r-u_l)*(h_l+h_r)/(c_l+c_r);\n",
" \n",
" q_l_tmp = np.sqrt(0.5 * ( (h_dag+h_l)*h_dag / (h_l*h_l) ) );\n",
" q_r_tmp = np.sqrt(0.5 * ( (h_dag+h_r)*h_dag / (h_r*h_r) ) );\n",
" \n",
" q_l = q_l_tmp if (h_dag > h_l) else 1.0;\n",
" q_r = q_r_tmp if (h_dag > h_r) else 1.0;\n",
" \n",
" # Compute wave speed estimates\n",
" S_l = u_l - c_l*q_l; #FIXME: Correct wave speed estimate?\n",
" S_r = u_r + c_r*q_r;\n",
" S_star = ( S_l*h_r*(u_r - S_r) - S_r*h_l*(u_l - S_l) ) / ( h_r*(u_r - S_r) - h_l*(u_l - S_l) );\n",
" \n",
" Q_star_l = h_l * (S_l - u_l) / (S_l - S_star) * np.array([1.0, S_star, v_l]);\n",
" Q_star_r = h_r * (S_r - u_r) / (S_r - S_star) * np.array([1.0, S_star, v_r]);\n",
" \n",
" # Estimate the fluxes in the four regions\n",
" F_1 = F_func(Q_l1, g_);\n",
" F_4 = F_func(Q_r1, g_);\n",
" \n",
" F_2 = F_1 + S_l*(Q_star_l - Q_l1);\n",
" F_3 = F_4 + S_r*(Q_star_r - Q_r1);\n",
" \n",
" # Compute the courant numbers for the waves\n",
" c_1 = S_l * dt_ / dx_;\n",
" c_2 = S_star * dt_ / dx_;\n",
" c_3 = S_r * dt_ / dx_;\n",
" \n",
" # Compute the \"upwind change\" vectors for the i-3/2 and i+3/2 interfaces\n",
" \n",
" \"\"\"\n",
" rh_denom = float(h_r) - float(h_l)\n",
" \n",
" rh_m = 2.0\n",
" rh_p = 2.0\n",
" \n",
" if (abs(rh_denom) > 0.0):\n",
" rh_m = (float(h_l) - float(h_l2)) / rh_denom\n",
" rh_p = (float(h_r2) - float(h_r)) / rh_denom\n",
" else:\n",
" rh_m = rh_m * np.sign(float(h_l) - float(h_l2))\n",
" rh_p = rh_p * np.sign(float(h_r2) - float(h_r))\n",
" \n",
" rv_denom = float(v_r) - float(v_l)\n",
" \n",
" rv_m = 10**10\n",
" rv_p = 10**10\n",
" \n",
" if (abs(rv_denom) > 0.0):\n",
" rv_m = (float(v_l) - float(v_l2)) / rv_denom\n",
" rv_p = (float(v_r2) - float(v_r)) / rv_denom\n",
" else:\n",
" rv_m = rv_m * np.sign(float(v_l) - float(v_l2))\n",
" rv_p = rv_p * np.sign(float(v_r2) - float(v_r))\n",
" \"\"\"\n",
" \n",
" \n",
" \n",
" \"\"\"\n",
" rh_m = (h_l - h_l2) / (h_r - h_l) if (h_r != h_l) else 10**10*np.sign(h_l-h_l2);\n",
" rh_p = (h_r2 - h_r) / (h_r - h_l) if (h_r != h_l) else 10**10*np.sign(h_r2-h_r);\n",
" \n",
" rv_m = (v_l - v_l2) / (v_r - v_l) if (v_r != v_l) else 10**10*np.sign(v_l-v_l2);\n",
" rv_p = (v_r2 - v_r) / (v_r - v_l) if (v_r != v_l) else 10**10*np.sign(v_r2-v_r);\n",
" \"\"\"\n",
" \n",
" \n",
" eps = 1e-10\n",
" orig_denom = h_r - h_l\n",
" denom = orig_denom\n",
" if (h_r == h_l):\n",
" if (np.abs(h_l - h_l2) > eps):\n",
" rh_m = 10.0*np.sign(h_l - h_l2)\n",
" else:\n",
" rh_m = 0.0\n",
" if (np.abs(h_r2 - h_r) > eps):\n",
" rh_p = 10.0*np.sign(h_r2 - h_r)\n",
" else:\n",
" rh_p = 0.0\n",
" elif (np.abs(h_r - h_l) < eps):\n",
" # np.maximum(np.minimum(x*x/(2*eps)+0.5*eps, eps), x)\n",
" denom = (np.sign(orig_denom)*max(min(orig_denom*orig_denom/(2*eps)+0.5*eps, eps), abs(orig_denom)))\n",
" rh_m = (h_l - h_l2) / denom\n",
" rh_p = (h_r2 - h_r) / denom\n",
" else:\n",
" rh_m = (h_l - h_l2) / (h_r - h_l)\n",
" rh_p = (h_r2 - h_r) / (h_r - h_l)\n",
" \n",
" \n",
" \n",
" rv_m = -10**10 #(v_l - v_l2) / (v_r - v_l) if (v_r != v_l) else 10**10*np.sign(v_l-v_l2);\n",
" rv_p = -10**10 #(v_r2 - v_r) / (v_r - v_l) if (v_r != v_l) else 10**10*np.sign(v_r2-v_r);\n",
" \n",
" \"\"\"\n",
" rh_m = (h_l - h_l2) / (h_r - h_l);\n",
" rh_p = (h_r2 - h_r) / (h_r - h_l); \n",
" \n",
" rv_m = (v_l - v_l2) / (v_r - v_l);\n",
" rv_p = (v_r2 - v_r) / (v_r - v_l);\n",
" \"\"\"\n",
" \n",
" # Compute the r parameters for the flux limiter\n",
" rh_1 = rh_m if (c_1 > 0.0) else rh_p; \n",
" rv_1 = rv_m if (c_1 > 0.0) else rv_p; \n",
" \n",
" rh_2 = rh_m if (c_2 > 0.0) else rh_p; \n",
" rv_2 = rv_m if (c_2 > 0.0) else rv_p; \n",
" \n",
" rh_3 = rh_m if (c_3 > 0.0) else rh_p;\n",
" rv_3 = rv_m if (c_3 > 0.0) else rv_p;\n",
" \n",
" # Compute the limiter\n",
" # We use h for the nonlinear waves, and v for the middle shear wave \n",
" A_1 = np.sign(c_1) * WAF_minmod(rh_1, c_1);\n",
" A_2 = np.sign(c_2) * WAF_minmod(rv_2, c_2); #Middle shear wave \n",
" A_3 = np.sign(c_3) * WAF_minmod(rh_3, c_3); \n",
" \n",
" # Average the fluxes\n",
" flux = 0.5*( F_1 + F_4 ) \\\n",
" - 0.5*( A_1 * (F_2 - F_1) \\\n",
" + A_2 * (F_3 - F_2) \\\n",
" + A_3 * (F_4 - F_3) );\n",
" \n",
" flux_nolimit = 0.5*( F_1 + F_4 ) \\\n",
" - 0.5*( c_1 * (F_2 - F_1) \\\n",
" + c_2 * (F_3 - F_2) \\\n",
" + c_3 * (F_4 - F_3) );\n",
" \n",
" flux_hll = np.array([0.0, 0.0, 0.0])\n",
" if (S_l >= 0.0):\n",
" flux_hll = F_1;\n",
" elif (S_r <= 0.0):\n",
" flux_hll = F_4;\n",
" elif (S_l <= 0.0 and 0.0 <=S_star):\n",
" flux_hll = F_1 + S_l*(Q_star_l - Q_l1);\n",
" elif (S_star <= 0.0 and 0.0 <=S_r):\n",
" flux_hll = F_4 + S_r*(Q_star_r - Q_r1);\n",
"\n",
" #return flux\n",
"\n",
" #return [rh_1, rv_2, rh_3];\n",
" #return [A_1, A_2, A_3]\n",
" #return [A_1 + A_2 + A_3]\n",
" #return [c_1 + c_2 + c_3]\n",
"\n",
" #return [A_1 + A_2 + A_3, \\\n",
" #c_1 + c_2 + c_3]\n",
" #return [A_1, A_2, A_3, c_1, c_2, c_3]\n",
" \n",
" return [flux, flux_nolimit]\n",
" \n",
" #return [rh_1, A_1, c_1]\n",
" #return [A_1, A_2, A_3]\n",
" #return [(h_r2 - h_r)/(h_r - h_l), rh_p]\n",
" #return [denom, orig_denom]\n",
" \n",
" #i = 2\n",
" #return [F_1[i], F_2[i], F_3[i], F_4[i]]\n",
"\n",
"\n",
"def WAF_1D_flux_helper(h, hu, g, dx, dt):\n",
" \n",
" hv = np.zeros_like(h)\n",
" Q = np.vstack([h, hu, hv]).T\n",
" \n",
" Q_l2 = Q[0:-3,:]\n",
" Q_l1 = Q[1:-2,:]\n",
" Q_r1 = Q[2:-1,:]\n",
" Q_r2 = Q[3:,:]\n",
" \n",
" g = np.ones(Q_l2.shape[0])*g\n",
" dx = np.ones(Q_l2.shape[0])*dx\n",
" dt = np.ones(Q_l2.shape[0])*dt\n",
" \n",
" return np.array(list(map(WAF_1D_flux, Q_l2, Q_l1, Q_r1, Q_r2, g, dx, dt)))\n",
"\n",
"\"\"\"\n",
"ref_x, ref_h, ref_hu = gen_reference(512)\n",
"F = WAF_1D_flux_helper(ref_h, ref_hu, 9.81, 0.1, 0.01)\n",
"\n",
"fig, ax1 = plt.subplots()\n",
"plt.ylim([0, 0.01])\n",
"ax2 = ax1.twinx()\n",
"\n",
"ax1.plot(ref_x, ref_h, '--', label='Reference')\n",
"\n",
"for i in range(F.shape[1]):\n",
" ax2.plot(ref_x[2:-1], F[:,i], label='F_' + str(i))\n",
"\n",
"plt.title(\"WAF flux for shallow water\")\n",
"plt.legend()\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": [
"'\\nfig = plt.figure()\\nplt.ylim([0, 0.01])\\n\\nref_x, ref_h, ref_hu = gen_reference(128)\\nplt.plot(ref_x, ref_h, \\'-\\')\\n\\nfor i in range(50):\\n h, hu = WAF_step(ref_h, ref_hu, 9.81, 0.1, 0.1)\\nplt.plot(ref_x, h, \\'--\\')\\n\\nplt.title(\"WAF for shallow water\")\\nplt.legend()\\n'"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def WAF_step(h, hu, g, dx, dt):\n",
" F = WAF_1D_flux_helper(h, hu, g, dx, dt)\n",
" \n",
" h[2:-2] = h[2:-2] + (F[0:-1,0] - F[1:,0]) * dt / dx;\n",
" hu[2:-2] = hu[2:-2] + (F[0:-1,1] - F[1:,1]) * dt / dx;\n",
" \n",
" return [h, hu]\n",
" \n",
"\"\"\"\n",
"fig = plt.figure()\n",
"plt.ylim([0, 0.01])\n",
"\n",
"ref_x, ref_h, ref_hu = gen_reference(128)\n",
"plt.plot(ref_x, ref_h, '-')\n",
"\n",
"for i in range(50):\n",
" h, hu = WAF_step(ref_h, ref_hu, 9.81, 0.1, 0.1)\n",
"plt.plot(ref_x, h, '--')\n",
"\n",
"plt.title(\"WAF for shallow water\")\n",
"plt.legend()\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def gen_test_data(nx, ny, g, num_ghost_cells):\n",
" width = 100.0\n",
" height = 100.0\n",
" dx = width / float(nx)\n",
" dy = height / float(ny)\n",
"\n",
" x_center = dx*nx/2.0\n",
" y_center = dy*ny/2.0\n",
" \n",
" h = np.zeros((ny+2*num_ghost_cells, nx+2*num_ghost_cells)); \n",
" hu = np.zeros((ny+2*num_ghost_cells, nx+2*num_ghost_cells));\n",
" hv = np.zeros((ny+2*num_ghost_cells, nx+2*num_ghost_cells));\n",
"\n",
" #Create a gaussian \"dam break\" that will not form shocks\n",
" size = width / 5.0\n",
" dt = 10**10\n",
" for j in range(-num_ghost_cells, ny+num_ghost_cells):\n",
" for i in range(-num_ghost_cells, nx+num_ghost_cells):\n",
" x = dx*(i+0.5) - x_center\n",
" y = dy*(j+0.5) - y_center\n",
" \n",
" h[j+num_ghost_cells, i+num_ghost_cells] = 0.5 + 0.1*np.exp(-(x**2/size))\n",
" hu[j+num_ghost_cells, i+num_ghost_cells] = 0.1*np.exp(-(x**2/size))\n",
" \n",
" max_h_estimate = 0.6\n",
" max_u_estimate = 0.1*2.0\n",
" dt = min(dx, dy) / (max_u_estimate + np.sqrt(g*max_h_estimate))\n",
" \n",
" return h, hu, hv, dx, dy, dt"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Step 1/56\n",
"Step 2/56\n",
"Step 3/56\n",
"Step 4/56\n",
"Step 5/56\n",
"Step 6/56\n",
"Step 7/56\n",
"Step 8/56\n",
"Step 9/56\n",
"Step 10/56\n",
"Step 11/56\n",
"Step 12/56\n",
"Step 13/56\n",
"Step 14/56\n",
"Step 15/56\n",
"Step 16/56\n",
"Step 17/56\n",
"Step 18/56\n",
"Step 19/56\n",
"Step 20/56\n",
"Step 21/56\n",
"Step 22/56\n",
"Step 23/56\n",
"Step 24/56\n",
"Step 25/56\n",
"Step 26/56\n",
"Step 27/56\n",
"Step 28/56\n",
"Step 29/56\n",
"Step 30/56\n",
"Step 31/56\n",
"Step 32/56\n",
"Step 33/56\n",
"Step 34/56\n",
"Step 35/56\n",
"Step 36/56\n",
"Step 37/56\n",
"Step 38/56\n",
"Step 39/56\n",
"Step 40/56\n",
"Step 41/56\n",
"Step 42/56\n",
"Step 43/56\n",
"Step 44/56\n",
"Step 45/56\n",
"Step 46/56\n",
"Step 47/56\n",
"Step 48/56\n",
"Step 49/56\n",
"Step 50/56\n",
"Step 51/56\n",
"Step 52/56\n",
"Step 53/56\n",
"Step 54/56\n",
"Step 55/56\n",
"Step 56/56\n"
]
}
],
"source": [
"nx=1025\n",
"g = 9.81\n",
"h0, hu0, hv0, dx, dy, dt = gen_test_data(nx, 1, 9.81, 0)\n",
"\n",
"h = h0.ravel()\n",
"hu = hu0.ravel()\n",
"x = np.linspace(0.0, nx*dx, nx)\n",
"\n",
"dt = dt*0.95\n",
"\n",
"timesteps = int(2.0/dt)\n",
"for i in range(timesteps):\n",
" print(\"Step \" + str(i+1) + \"/\" + str(timesteps))\n",
" WAF_step(h, hu, g, dx, dt) "
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" fig.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('<canvas/>');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('<button/>');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('<span/>');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('<span/>');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('<span/>');\n",
"\n",
" var fmt_picker = $('<select/>');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" event.shiftKey = false;\n",
" // Send a \"J\" for go to next cell\n",
" event.which = 74;\n",
" event.keyCode = 74;\n",
" manager.command_mode();\n",
" manager.handle_keydown(event);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i<ncells; i++) {\n",
" var cell = cells[i];\n",
" if (cell.cell_type === 'code'){\n",
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
" var data = cell.output_area.outputs[j];\n",
" if (data.data) {\n",
" // IPython >= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<img src=\"data:image/png;base64,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gAAEMoNAKufvdCGMAPR4E6lyIIm/evXq2fr160N3f95555n2HSxWrJjHEzEUAhCAAAQgkP8JpGr+TieyCECPt5EqBxo1apT17ds3252PHDnS+vTp4/FEDIUABCAAAQjkfwKpmr/TiSwC0ONtpMqBunXrZlOnTs125127drUpU6Z4PBFDIQABCEAAAvmfQKrm73QiiwD0eBupciAigB4vjaEQgAAEIJDxBFI1f6cTeASgx9tIlQNFygG84IILXCsYcgA9XihDIQABCEAgIwikav5OJ7gIQI+3kUoHkgicMGGCbdmyxSpUqGDdu3dH/Hm8S4ZCAAIQgEDmEEjl/J0ulBGAHm8iFQ40Z84c1+tPzZ8xCEAAAhCAAATiJ5CK+Tv+u0zuCASgB9/cdqDvvvvOypYta3v37rWXXnrJmjRp4nH3DIUABCAAAQhkJoHcnr/TkTIC0OOt5LYDffXVV9a/f39788033Z6/hQoV8rh7hkIAAhCAAAQyk0Buz9/pSBkB6PFWUuVAv//+ux111FEed85QCEAAAhCAQOYSSNX8nU7EEYAebwMH8oDHUAhAAAIQgECKCDB/myEAPZwvtxxIFb8333yz3X777VatWjWPO2YoBCAAAQhAAAK5NX+nM2kEoMfbyS0H0hZvd911l1WsWNE2bdpkBQsW9LhrhkIAAhCAAAQym0Buzd/pTBkB6PF2csOBFP0rV66cqQBkxowZdt1113ncMUMhAAEIQAACEMiN+TvdKSMAPd5QbjjQ/fffb71797by5cu76B/FHx4vjKEQgAAEIAABM8uN+TvdQSMAPd5Qsh3op59+ctG/L774wqZPn26dO3f2uFuGQgACEIAABCAgAsmev/MCZQSgx1tKtgM98MADdscddzgRuHnzZjv66KM97pahEIAABCAAAQggAP+/DyAAPT4LyRSAiv796U9/ss8//9ymTZtmXbp08bhThkIAAhCAAAQgEBBI5vydVygjAD3eVDId6MEHH7SePXtamTJl7JNPPrHChQt73ClDIQABCEAAAhBAAP6fDyAAPT4PyRKA+/fvd9G/PXv22OTJk61bt24ed8lQCEAAAhCAAASyEkjW/J2XKCMAPd5WshzooYcesttuu81Kly5t//73v4n+ebwjhkIAAhCAAATCCSRr/s5LpBGAHm8rGQ6k6J9avuzevdsmTpxoN910k8cdMhQCEIAABCAAgZwSgBMmTLDRo0e7FboqVarYuHHjrH79+lEBL1y40Pr3729bt251c/vQoUOtVatWoeMHDRpkc+fOtZ07d7pgT40aNdwxtWrVOuSczz//vP3rX/+yDz74wI477jhr0KCBPf30014vFgHogS8ZAvCRRx6xW2+91c466yzbsmWLFSlSxOMOGQoBCEAAAhCAQE4IwHnz5lmHDh1MIrBu3bouRUtFmhs3bnQrduG2Zs0aJw6HDBniRN+iRYtswIABtnLlypDAmzNnjp166qku7evnn3+2sWPH2vz58938f8opp7hTSkR27drVhg0bZpdddpkdPHjQPvzwQ7vmmmu8XiwC0ANfMgTg2rVr3beFq6++2m655RaPu2MoBCAAAQhAAAKRCCQyfysqV716dbc6F1ilSpWsZcuWNnz48GyXadOmje3bt8+WLVsW+luzZs2sRIkS9uSTT0Z8MTq+ePHi9vLLL9vll19uv//+u5UtW9YGDx6c491AEIAen41EHCja5bTlm75VSPVXqFDBbr75Zjv++OM97o6hEIAABCAAAQjkhAD89ddfrWjRoi46l3UJt0ePHrZu3TpbsWJFtssoKtirVy/3E5gifFo23rFjR7bjdY3x48fbfffd57TAySefbAoKSXhqMwj97bPPPrMLL7zQtEuYlqB9DAHoQS+nBKDEX7169Wz9+vWhu7ngggtcmLhYsWIed8hQCEAAAhCAAATCCQTzt5ZvzzzzzNCflXYVKfVKefk6btWqVVanTp3Q8VqWnTlzptusIdyU0zdjxgxr37596E9a8tWuXr/88kvod88995y1bdvW1P/3jDPOsMWLF9vFF1/s/q78wHbt2rklZm0OoWjgmDFj7KWXXnIt4k466aSEXy4CMGF0ObeVzKhRo6xv377Z7mTkyJHWp08fjztkKAQgAAEIQAAC0QRg+O8HDhxoKswIt0AArl692i655JLQn1WwMWvWLNu0aVNEAShxKAEX2OzZs91Srgo+A/vxxx9dUclXX31lU6dOtVdeecXeeustlxsowfjPf/7zkJZwEo+qE1Ck8MYbb0z45SIAE0aXcwJQyZ1KJA03/X7KlCked8hQCEAAAhCAAASiCcBYI4C5sQQc3GPFihXt+uuvt379+tmrr77qCj/eeOMNt1IYmJaFGzdu7CqGEzUEYKLkcnAzaUX67rrrrmx3QgTQ4+UwFAIQgAAEIBCFQCIpXBJdatOifP3AKleubC1atIhaBPL999/b0qVLQ8c3b97cTjzxxKhFIDpQdQDXXnuti0SqKESRQHUICbaE/e2331wEUNXFPhtFIAA9Ph6JOFCky5ED6PESGAoBCEAAAhCIk0Ai83fQBmbSpEluGVgrdFqy3bBhg9u2tWPHji5PMKgI1nKx+vUpSieRuGTJErv33ntDbWC09Ku/qeuHcv++/vprJy6feOIJe/fdd0NFHtoWdsGCBa4QRNdRH8Jnn33WLTurojhRQwAmSi4HI4C6hfAq4O7du1MA4vFuGAoBCEAAAhCIRiARAahzSaApb185e1WrVnV9+yTyZA0bNnRFGir8CEzCTaJv27ZtoUbQrVu3dn9WHqAKRJTvp/y/kiVLuuIPHR8Ugeg4Rfy0HKxcQ/UKVCRSlcRUAafQvxN1oKwmbrRSAAAaoElEQVS3rBddqFAh1/NPYV4MAhCAAAQgAIHkEsiJ+Tu5d5j8sxMB9GDs60AK95599tlO0SvRU98eMAhAAAIQgAAEkkvAd/5O7t3lztkRgB6cfR1I/YPuuece19TxvffeswIFCnjcDUMhAAEIQAACEIiFgO/8Hcs10v0YBKDHG/JxIJWUK1dAeQSPP/64218QgwAEIAABCEAg+QR85u/k313uXAEB6MHZx4FU5SPRp8qf7du3mzqGYxCAAAQgAAEIJJ+Az/yd/LvLnSsgAD04J+pABw8etIsuusgt+6qTt5aBMQhAAAIQgAAEcodAovN37txd7lwFAejBOVEHev311+3SSy+1Y445xnbu3Ok2fMYgAAEIQAACEMgdAonO37lzd7lzFQSgB+dEHahVq1Zus2d18J48ebLHHTAUAhCAAAQgAIF4CSQ6f8d7nXQ+PlcEoBonqnO1Ch7UuFANDOvXrx+Rixoodu7cOdvf1CpFETPZxIkT3Y9y52Q654ABA0xbrASmzZLvvPNOt92Kxl5++eWugaO2Twns008/df33tPHyscce6xoy3n///THn4yXiQFu3bjXt86dlYO1BWKlSpXT2D+4NAhCAAAQgkO8IJDJ/5zcISReAwdYpEl9169Z1Ea9p06Y58VO6dOlsPCUAe/ToYZs3bz7kb6effnrov7UFipona7882cyZM53AfP/990OdsW+++Wa3VYrOp+7ad9xxh33zzTduexWN/eOPP1z7lVNOOcXGjBnjtmC57rrrTB26H3rooZjecyIOpGcbP368E6tZ9weM6YIcBAEIQAACEICAN4FE5m/vi6bZCZIuALVlSfXq1V3ELjBFvVq2bBlx82QJNu17t3fv3rhQnXTSSU4EarPk7777zgk7bZvSpk0bd57du3e7pssSXU2bNrVly5bZX/7yF5eDV6pUKXfM3LlzrVOnTvbFF1/YCSeccMTrx+tAui9FILXt20svvWRNmjQ54jU4AAIQgAAEIACBnCUQ7/yds1dPj7MlVQCq113RokVt/vz5pry3wBQFW7duna1YsSIbBQnAG264wW2oHETphgwZYtWqVYtITMfo/IreKQJYuXJlt6SrJV9F/LJulHzBBRc44Tl48GC3ZKyNmdevXx8677fffmsSkhrfqFGjbNfTsrJ+Atu1a5e7nkRk1qXlaK9WkUYtS2v/wA8++IDGz+nxGeAuIAABCEAgwwggAM2SKgAVdZOQW7VqldWpUyfkXtoBQ8u24cu8OuDNN9+0LVu22HnnnWf79u2zBx980EXtJNSUOxfYhx9+aJdcconbTLlYsWI2Z84cu/LKK92f9f+VR5hVrOn3V1xxhZUrV84tQ6sAQzmEisRltSJFirhl43bt2mX7OAwaNMiJx3CLVQDOnj3bBg4c6DZ1VqQSgwAEIAABCEAg9wkgAHNJAK5evdqJtcCGDh3qlmc3bdp0xLd+4MABt4TcoEEDlzsXmKKLKuLQUvHChQtdXqEiiorIRROAWnItX768TZo0yQnAHTt22IsvvnjIPaghs3bmaNu2bbZ7840A6oSKWOqZjj766CM+OwdAAAIQgAAEIJDzBBCASRaAiSwBR3rNXbt2Nb0s5e1Fs8aNGztxp+hespaAw6+NA+X8h5IzQgACEIAABJJNgPk7yQJQL1BFIDVq1HAtWAJTlK5FixYRi0DCX7rapdSsWdMtCU+fPj2qTyjnT0UeWr4NikC03do//vEPN0YtaJSnF14EIifQdmwyVSwrlzCni0CU76gfLStriRmDAAQgAAEIQCB1BBCAuSAAgzYwWnbVMvCUKVNs6tSptmHDBitTpox17NjR5QkOHz7ceYJy7GrXru3y/ZQDqGVfLRcrj1BCUHb33Xe7NioSfN9//72r3h0xYoS98MILocpatYF57rnnnCBUYYeKL9TqJbwNzGmnneaqh1UwogpgFYnkdBsYVSI/9dRTduutt8Z87tR9LLgyBCAAAQhAIH8TQADmggCUCyn6N2rUKBeFUwXs2LFjXU6frGHDhla2bFkn1GS9evWyp59+2j777DMrXry4q/5V8UXWHEIVUCxfvtydT8ecf/751rdv30Paqqg4pHfv3i4fMGsjaInGwJRD2L1792yNoGON0sXqQKr+VfPr559/3t0rBgEIQAACEIBA6gjEOn+n7g6Tf+WkVgEn//ZTe4V4HEjFH2pAjUEAAhCAAAQgkFoC8czfqb3T5F0dAejBFgfygMdQCEAAAhCAQIoIMH/n0hJwit5v0i97OAfSbh/KQ9QytSqUlf+nfoUYBCAAAQhAAAKpJYAARAB6eWA0B5L4q1ev3iG7jGgXkpUrVyICvYgzGAIQgAAEIOBPAAGIAPTyomgOpIIXFaWE28iRI61Pnz5e12QwBCAAAQhAAAJ+BBCACEAvD4rmQNplRK1uwk0NrdUGB4MABCAAAQhAIHUEEIAIQC/vi+ZAd911lynaRwTQCy+DIQABCEAAAkkhgABEAHo5VjQH0jKvmktnNXIAvVAzGAIQgAAEIJBjBBCACEAvZ4rkQL/99pvb4UTVv9dee60de+yxVqFCBddwmipgL9wMhgAEIAABCOQIAQQgAtDLkSI50OLFi61Vq1Z26qmn2s6dO61w4cJe12AwBCAAAQhAAAI5SwABiAD08qhIDnTllVfasmXLXLVvpDxArwsyGAIQgAAEIAABbwIIQASglxOFO9COHTusXLlydvDgQfvkk0+sYsWKXudnMAQgAAEIQAACOU8AAYgA9PKqcAcaMGCADRkyxC677DJbvny517kZDAEIQAACEIBAcgggABGAXp6V1YFOP/10V/yxe/dumzt3rrVp08br3AyGAAQgAAEIQCA5BBCACEAvz8rqQF988YXVqVPHjj/+eNPvixQp4nVuBkMAAhCAAAQgkBwCiQrACRMmuDZv6vRRpUoVGzdunNWvXz/qTS5cuND69+9vW7dutfLly9vQoUNdoWhggwYNckGjoGi0Ro0a7phatWqFjilbtqwpxSyrabexESNGeMEpcFAJa1hCBMId6Ntvv7UNGza4fYAxCEAAAhCAAATSk0AiAnDevHnWoUMHkwisW7euTZ48+f+1dyYwUhRRGH6ueBERFFCRQ0U8WMED8cADIWgEDYIIigZRwCMhGkAFxQsPBEUTDFFBwAgioEKiJgQvYkQ5Vzm8ECKiYDAeoAgCgnjkr6Qns7O9x3T37HTPfJUQwemurve9V91/V72qtqlTp9qaNWusRYsWFQxdunSpE4dKDZPoe+ONN0ypYosWLUoJvFmzZrldQ1q2bGm7d++28ePH25w5c2z9+vXWuHFjV6cE4KBBg0xfE/OKtpULu7UcAjBEbAYJoBCX41QIQAACEIAABCIgEOT5rVG5du3a2cSJE1MtaN26tfXs2dPGjh1boVVKBdu+fbvbGcQrXbt2tcMPP9xmz57ta4WOr1+/vi1YsMC6dOmSEoBDhw41/YmyIABD0PQC6PPPP7e2bduGqIlTIQABCEAAAhCoLQLe81ujd02bNk1dVulbfilce/futbp167rRufQp3CFDhtjq1att4cKFFZquUcFhw4a5P17RCJ+mjTOndPW7rjFhwgQbPXq0GwFs1KhRSgDu2bPH/d68eXPr06ePDR8+PPQ+wwjAENHmBZC3AESKXtvAUCAAAQhAAAIQiC8B7/md2cJRo0aZ8vIyixZ4SiguXrzY5ft7ZcyYMTZ9+nRbt25dhXP0IYhp06bZ9ddfn/pNU74DBgwwCTqvzJs3z/r27Wu7du2yJk2amD4ocfbZZ5cTjRp51MhhWVmZjRw50nr06OGmn8MUBGAIel4AlZSUOMds3ryZxR8heHIqBCAAAQhAoDYIZDsC6AnAJUuWWIcOHVJN1IKNGTNm2Nq1a30FoMThddddl/pt5syZLp/vr7/+Sv2/nTt3ukUlW7ZssSlTptgHH3xgy5cvd7mBfkULS3r37u2Ob9iwYWBcCMDA6Myt9tVw7MqVK23btm3WuXPnELVxKgQgAAEIQAACtUEg2xzA2pgC9uzWRyQGDhzoRvr8igabmjVrZsuWLSu3WjhbbgjAbImlHZ9tAIW4FKdCAAIQgAAEIBARgSDPby0C0TYtWgXsldLSUjcdW9kikB07dtj8+fNTx3fr1s0aNGhQ6SIQHdiqVSvr16+f71S0fteUcffu3V0eod/q45oiQgDWlJTPcUECKMTlOBUCEIAABCAAgQgIBHl+e9vATJo0yU0DT5482U3Zavs3fQiif//+Lk/QE4OaLu7YsaPb108i8a233rIHHnggtQ2Mpn7125VXXuly/7Zu3erE5SuvvGIrVqxw+wxqKxmN9GmGUauDP/nkE7eopH379q6+MAUBGIKeF0CZOQEhquRUCEAAAhCAAARyTCCIAFSTJNDGjRvncvbatGnj9u2TyFPp1KmT27NPCz+8MnfuXCf6NmzYkNoIulevXu5n5QFqgYjy/bx8Pi3+0PHeIhClmA0ePNjlGGrhiISmFoyMGDHCrUoOUxCAIeh5AaTl2trhmwIBCEAAAhCAQPwJBBWA8bes5i1EANacVYUjCaAQ8DgVAhCAAAQgkCcCPL/5FnCo0COAQuHjZAhAAAIQgEBeCPD8RgCGCjwCKBQ+ToYABCAAAQjkhQDPbwRgqMAjgELh42QIQAACEIBAXgjw/EYAhgo8AigUPk6GAAQgAAEI5IUAz28EYKjAI4BC4eNkCEAAAhCAQF4I8PxGAIYKPAIoFD5OhgAEIAABCOSFAM9vBGCowCOAQuHjZAhAAAIQgEBeCPD8RgCGCjwCKBQ+ToYABCAAAQjkhQDPbwRgqMDbtGmT+yxLWVmZ+44fBQIQgAAEIACB+BPQp9zOOecc27hxo7Vo0SL+Dc5BC/kSSAio+iizAogCAQhAAAIQgEDyCGgAx/vubvJaH67FCMAQ/Pbt22erVq2yo446ykpKSgLVtGPHDistLbU1a9ZYvXr1AtWRxJOK1W75qlhtx276eBLvVdm2mThPRpz/+++/9vPPP9uZZ55pderUydbNBXE8AjDPbty+fbvVr1/f/vjjDzvssMPy3Jrau3yx2i3CxWo7dtPHa+8Ok78rEefFFef5i7TwV0YAhmcYqgZuFsV3s8DnxeVz/I2/Qz0kEnJyscZ5Qtzj20wEYJ69V6ydpljtZgSQ0e4833Jq7fLF2sexu7gEf611qBxcCAGYA6jZVLlnzx4bO3asjRw50g466KBsTk30scVqt5xWrLZjN3080TetGjaeOC+uOK9hWMTyMARgLN1CoyAAAQhAAAIQgEDuCCAAc8eWmiEAAQhAAAIQgEAsCSAAY+kWGgUBCEAAAhCAAARyRwABmDu21AwBCEAAAhCAAARiSQABGEu30CgIQAACEIAABCCQOwIIwNyxdat777vvPhsyZIg988wz7kqdOnWyhQsXlrvqtddea6+++mqVLXn++eftqaeeMn2/8NRTT3X1XXTRRTlsffCqo7L74YcftkceeaRcQ/TVlZ9++il443J4pp/dutzSpUvt/vvvt+XLl9sBBxxgZ5xxhr399tt2yCGHVNqapPs7iN1J9/f3339vxx9/vK9PX3/9devTp4/vb//995+L88mTJ9vvv/9u5557rj333HOun8exZMZ5ULtvuukmmz59ejkTZfuyZcviaLbv/Vz3ouHDh9v777/vvvBz8sknu3t+7969C/p+HsTupPXvWAZhxI1CAEYM1KtO3wm+5ppr3Nc9OnfuXE4AnnTSSfboo4+mriwhoK+BVFZee+01u+GGG0yi4IILLrAXXnjBpk6d6j4fF7ePWEdpt24Yc+fOtQULFqTQ7L///ta4ceMceS14tZXZLfHXtWtXt81P9+7d7cADD7TPPvvM/b2ybX8Kwd9B7E66v//55x/79ddfywWRRN24cePcS8uhhx7qG2BPPvmkPf744zZt2jTTvWH06NH20Ucf2bp162L3eUi/OA9qtwSgPsX10ksvpbiofxxxxBHBO2KOzqysf1966aXuK07PPvusNWrUyGbNmmWjRo2yTz/91H1izK8UQv8OYneS+neOwih21SIAc+CSP//809q1a+cEm27mGvFJHwFM/3dNLq+3YtU3ceLE1OGtW7e2nj17urfSuJSo7dYN480337TVq1fHxUTfdlRl93nnnWe6WT722GM1tqEQ/B3E7kLwd6aTJQLUd1988UVf/2v075hjjrGhQ4faPffc447RPnIa6ZYwvO2222ocN7k+sKo4z9ZuHS8BuG3bNtfH41yqsluiXvdlvaB7pWHDhk70Dxo0yNesQujfQexOSv+OcyxG3TYEYNREzezGG290b7Hjx493U76ZAvCrr74y3fh1k+/WrZt7Y6xXr55vS/bu3Wt169a1OXPm2FVXXZU6RtPKEkaZ08k5MKfGVUZpty6qG4amvTU6qtEy3TjHjBljLVu2rHGbauPAyuz+5ZdfnI8nTJhgs2fPtm+//dZOOeUUN9pz4YUXFqy/g9hdCP7OdOiKFSusffv2tnjxYjv//PN9/b1hwwY74YQTbOXKleVGjHr06GENGjSoMEVaG/Fc2TWq6t/p59TEbk8ASvxp1E+2Xnzxxa5vHHnkkfk0s8K1q7Jbo/t16tSxl19+2dmgqf6bb77ZjfLLr5mlUO7n2dqdpP4dq+DLcWMQgBEDVi6fRv00BXDwwQdXEIBTpkxxeUJHH320ffnll25qsFWrVi6HxK/8+OOP1rRp0woPEQkh5c9omigOJWq7ZZPy5Hbt2uWmxTRVJK5r1641CWi9ZcehVGW3cpk6dOjgXgaefvpp9yKgB4VGhuX7E088sYIJheDvIHYXgr8znTl48GD78MMPXapGZWXJkiUurWPz5s1uJNArt956q23cuNHefffdOIS5y1Gu6r6W3sia2K3jNRWqkaRjjz3WvvvuO3vwwQdt3759JgEZl68iVWe3pn+Vwy0/SQjqZV1pKxr1L+T7ebZ2J6V/x6Kz1WIjEIARwv7hhx/cG/97771np59+uqs5cwQw83Le27L+q6mizOIJAj0oJCa8ojflGTNmOEGU75ILu/1s2rlzp3urHjFihN155535Ntuqs9t7uEvkS7B75bTTTrMrrrjCd/q+EPwdxO5C8He6Dbt377YmTZo4UXPXXXdVKwDldx3vlVtuucXF1zvvvBP7OA9it59RWuAmMSjR1atXr0TYfccdd1hZWZnr38oB1IimZn4+/vhja9u2bcHez7O1Own9O+8Bl4cGIAAjhK7Or2laLVTwihKk99tvPyspKXG5Pem/6RhNBettV2JOb5KZJQlTBrmwuzK36M1aI6bp+ZARujCrqqqzW6Ozaqt8269fv1Td8rNGC2bOnFmQ/g5idyH4O71/y+fKAdPIXlWLlpIwBVxdnAexuzJ/a1RcU6hePmRWHTLig6uz24tzjeanr9i+5JJLXL+fNGlSQffvbOxOQv+OOHwSUR0CMEI3aRsATduklwEDBri8L93Q2rRpU+Fq6kR6U1QuX8eOHX1bo9y3s846y00deqW0tNSUJxSHRSC5sjsThh40GgHU9NhDDz0UoeeCVVWd3XooNGvWzAYOHFhuEYgWBij3M31UML0FSfd3ULuT7u/0/q2Rf40IaTqwquItAhk2bJgb2VbRS5/y4OKyCKS6OA9itx+TrVu3unQXrZzu379/sE4Z4VnV2S3faTRfU/xalOeVyy67zI1kyg6/kvT+HdTuuPfvCEMnMVUhAHPsqvQpYC0C0KjP5Zdf7h4OunFoekjbwGibAW90sEuXLm4k8fbbb3et87YN0BulpoF1Y1EuoXLhdKOJY4nC7rvvvtttl6KtbrSwQDlIEspffPFFIuyWX7T6W4t8tApUOYDK21Q+oIS/lyReaP4Oanch+Fu2r1+/3uWtzp8/320BlFn0QqgXN29Rl4Se/q3tUDQCphcD5Q7GcRsYzxa/1JZs7NbKWi3yuvrqq93Ut/YS1P55mzZtsq+//jp229/42f3333+bXsTVfvVp5SVr1FD7As6bN8/d51UKrX8HtTuJ/TuOz9Yo24QAjJKmT13pN0rl9GgqUA9/3QCbN2/ucsEkENL3vjruuOPcFgm6QXpFo3/aWkB5MnrjVp5JZSOGOTapRtVHYXffvn3dfmhbtmxx02jaWkTbqeimG9fi92B84okn3Ma+v/32m8sNlR/TVwEXmr8932Rrd6H4W0JGU8CaDVDqR2ZRSojEnvq4ircRtPb3TN8I2m/GIC5x7xfn2ditHEltY7Vq1Sq3FYxElPZLVf/WfTGuJdPub775xu69915btGiRu6dr6ldCJ31bmELs30HsTmL/jmscRtUuBGBUJKkHAhCAAAQgAAEIJIQAAjAhjqKZEIAABCAAAQhAICoCCMCoSFIPBCAAAQhAAAIQSAgBBGBCHEUzIQABCEAAAhCAQFQEEIBRkaQeCEAAAhCAAAQgkBACCMCEOIpmQgACEIAABCAAgagIIACjIkk9EIAABCAAAQhAICEEEIAJcRTNhAAEIAABCEAAAlERQABGRZJ6IAABCEAAAhCAQEIIIAAT4iiaCQEIQAACEIAABKIigACMiiT1QAACEIAABCAAgYQQQAAmxFE0EwIQgAAEIAABCERFAAEYFUnqgQAEIAABCEAAAgkhgABMiKNoJgQgAAEIQAACEIiKAAIwKpLUAwEIQAACEIAABBJCAAGYEEfRTAhAAAIQgAAEIBAVAQRgVCSpBwIQgAAEIAABCCSEAAIwIY6imRCAAAQgAAEIQCAqAgjAqEhSDwQgAAEIQAACEEgIAQRgQhxFMyEAAQhAAAIQgEBUBBCAUZGkHghAAAIQgAAEIJAQAgjAhDiKZkIAAhCAAAQgAIGoCCAAoyJJPRCAAAQgAAEIQCAhBBCACXEUzYQABCAAAQhAAAJREUAARkWSeiAAAQhAAAIQgEBCCCAAE+IomgkBCEAAAhCAAASiIoAAjIok9UAAAhCAAAQgAIGEEEAAJsRRNBMCEIAABCAAAQhERQABGBVJ6oEABCAAAQhAAAIJIYAATIijaCYEIAABCEAAAhCIigACMCqS1AMBCEAAAhCAAAQSQgABmBBH0UwIQAACEIAABCAQFYH/AXsn9nsYUyQSAAAAAElFTkSuQmCC\" width=\"640\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"\"\\nfig = plt.figure(figsize=(8, 16))\\n\\nplt.subplot(311)\\nsetBwStyles(fig.gca())\\nplt.plot(x, h, marker=' ', label='h_' + str(nx))\\nplt.legend()\\n\\nplt.subplot(312)\\nsetBwStyles(fig.gca())\\nplt.plot(x, h, marker=' ', label='h_' + str(nx))\\nplt.xlim([43, 49])\\nplt.ylim([0.5305, 0.5315])\\nplt.legend()\\n\\nplt.subplot(313)\\nsetBwStyles(fig.gca())\\nplt.plot(x, h, marker=' ', label='h_' + str(nx)) \\nplt.xlim([53, 56.5])\\nplt.ylim([0.566, 0.57])\\nplt.legend()\\n\""
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig, ax1 = plt.subplots()\n",
"setBwStyles(fig.gca())\n",
"ax1.plot(x, h, marker='.', label='h_' + str(nx))\n",
"ax2 = ax1.twinx()\n",
"ax2.plot(x, hu, marker='+', label='h_' + str(nx))\n",
"\n",
"\n",
"\"\"\"\n",
"fig = plt.figure(figsize=(8, 16))\n",
"\n",
"plt.subplot(311)\n",
"setBwStyles(fig.gca())\n",
"plt.plot(x, h, marker=' ', label='h_' + str(nx))\n",
"plt.legend()\n",
"\n",
"plt.subplot(312)\n",
"setBwStyles(fig.gca())\n",
"plt.plot(x, h, marker=' ', label='h_' + str(nx))\n",
"plt.xlim([43, 49])\n",
"plt.ylim([0.5305, 0.5315])\n",
"plt.legend()\n",
"\n",
"plt.subplot(313)\n",
"setBwStyles(fig.gca())\n",
"plt.plot(x, h, marker=' ', label='h_' + str(nx)) \n",
"plt.xlim([53, 56.5])\n",
"plt.ylim([0.566, 0.57])\n",
"plt.legend()\n",
"\"\"\""
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" fig.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('<canvas/>');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('<button/>');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('<span/>');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('<span/>');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('<span/>');\n",
"\n",
" var fmt_picker = $('<select/>');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" event.shiftKey = false;\n",
" // Send a \"J\" for go to next cell\n",
" event.which = 74;\n",
" event.keyCode = 74;\n",
" manager.command_mode();\n",
" manager.handle_keydown(event);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i<ncells; i++) {\n",
" var cell = cells[i];\n",
" if (cell.cell_type === 'code'){\n",
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
" var data = cell.output_area.outputs[j];\n",
" if (data.data) {\n",
" // IPython >= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<img src=\"data:image/png;base64,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\" width=\"640\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0xea07791470>"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"F = WAF_1D_flux_helper(h, hu, g, dx, dt)\n",
"plt.figure()\n",
"for i in range(F.shape[1]):\n",
" plt.plot(x[2:-1], F[:,i], marker=' ', label='F_' + str(i))\n",
"#plt.ylim(-10, 10)\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\n",
"\n",
"\n",
"mpl.get_websocket_type = function() {\n",
" if (typeof(WebSocket) !== 'undefined') {\n",
" return WebSocket;\n",
" } else if (typeof(MozWebSocket) !== 'undefined') {\n",
" return MozWebSocket;\n",
" } else {\n",
" alert('Your browser does not have WebSocket support.' +\n",
" 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n",
" 'Firefox 4 and 5 are also supported but you ' +\n",
" 'have to enable WebSockets in about:config.');\n",
" };\n",
"}\n",
"\n",
"mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n",
" this.id = figure_id;\n",
"\n",
" this.ws = websocket;\n",
"\n",
" this.supports_binary = (this.ws.binaryType != undefined);\n",
"\n",
" if (!this.supports_binary) {\n",
" var warnings = document.getElementById(\"mpl-warnings\");\n",
" if (warnings) {\n",
" warnings.style.display = 'block';\n",
" warnings.textContent = (\n",
" \"This browser does not support binary websocket messages. \" +\n",
" \"Performance may be slow.\");\n",
" }\n",
" }\n",
"\n",
" this.imageObj = new Image();\n",
"\n",
" this.context = undefined;\n",
" this.message = undefined;\n",
" this.canvas = undefined;\n",
" this.rubberband_canvas = undefined;\n",
" this.rubberband_context = undefined;\n",
" this.format_dropdown = undefined;\n",
"\n",
" this.image_mode = 'full';\n",
"\n",
" this.root = $('<div/>');\n",
" this._root_extra_style(this.root)\n",
" this.root.attr('style', 'display: inline-block');\n",
"\n",
" $(parent_element).append(this.root);\n",
"\n",
" this._init_header(this);\n",
" this._init_canvas(this);\n",
" this._init_toolbar(this);\n",
"\n",
" var fig = this;\n",
"\n",
" this.waiting = false;\n",
"\n",
" this.ws.onopen = function () {\n",
" fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n",
" fig.send_message(\"send_image_mode\", {});\n",
" if (mpl.ratio != 1) {\n",
" fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
" }\n",
" fig.send_message(\"refresh\", {});\n",
" }\n",
"\n",
" this.imageObj.onload = function() {\n",
" if (fig.image_mode == 'full') {\n",
" // Full images could contain transparency (where diff images\n",
" // almost always do), so we need to clear the canvas so that\n",
" // there is no ghosting.\n",
" fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n",
" }\n",
" fig.context.drawImage(fig.imageObj, 0, 0);\n",
" };\n",
"\n",
" this.imageObj.onunload = function() {\n",
" fig.ws.close();\n",
" }\n",
"\n",
" this.ws.onmessage = this._make_on_message_function(this);\n",
"\n",
" this.ondownload = ondownload;\n",
"}\n",
"\n",
"mpl.figure.prototype._init_header = function() {\n",
" var titlebar = $(\n",
" '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
" 'ui-helper-clearfix\"/>');\n",
" var titletext = $(\n",
" '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
" 'text-align: center; padding: 3px;\"/>');\n",
" titlebar.append(titletext)\n",
" this.root.append(titlebar);\n",
" this.header = titletext[0];\n",
"}\n",
"\n",
"\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(canvas_div) {\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._init_canvas = function() {\n",
" var fig = this;\n",
"\n",
" var canvas_div = $('<div/>');\n",
"\n",
" canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n",
"\n",
" function canvas_keyboard_event(event) {\n",
" return fig.key_event(event, event['data']);\n",
" }\n",
"\n",
" canvas_div.keydown('key_press', canvas_keyboard_event);\n",
" canvas_div.keyup('key_release', canvas_keyboard_event);\n",
" this.canvas_div = canvas_div\n",
" this._canvas_extra_style(canvas_div)\n",
" this.root.append(canvas_div);\n",
"\n",
" var canvas = $('<canvas/>');\n",
" canvas.addClass('mpl-canvas');\n",
" canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n",
"\n",
" this.canvas = canvas[0];\n",
" this.context = canvas[0].getContext(\"2d\");\n",
"\n",
" var backingStore = this.context.backingStorePixelRatio ||\n",
"\tthis.context.webkitBackingStorePixelRatio ||\n",
"\tthis.context.mozBackingStorePixelRatio ||\n",
"\tthis.context.msBackingStorePixelRatio ||\n",
"\tthis.context.oBackingStorePixelRatio ||\n",
"\tthis.context.backingStorePixelRatio || 1;\n",
"\n",
" mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
"\n",
" var rubberband = $('<canvas/>');\n",
" rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n",
"\n",
" var pass_mouse_events = true;\n",
"\n",
" canvas_div.resizable({\n",
" start: function(event, ui) {\n",
" pass_mouse_events = false;\n",
" },\n",
" resize: function(event, ui) {\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" stop: function(event, ui) {\n",
" pass_mouse_events = true;\n",
" fig.request_resize(ui.size.width, ui.size.height);\n",
" },\n",
" });\n",
"\n",
" function mouse_event_fn(event) {\n",
" if (pass_mouse_events)\n",
" return fig.mouse_event(event, event['data']);\n",
" }\n",
"\n",
" rubberband.mousedown('button_press', mouse_event_fn);\n",
" rubberband.mouseup('button_release', mouse_event_fn);\n",
" // Throttle sequential mouse events to 1 every 20ms.\n",
" rubberband.mousemove('motion_notify', mouse_event_fn);\n",
"\n",
" rubberband.mouseenter('figure_enter', mouse_event_fn);\n",
" rubberband.mouseleave('figure_leave', mouse_event_fn);\n",
"\n",
" canvas_div.on(\"wheel\", function (event) {\n",
" event = event.originalEvent;\n",
" event['data'] = 'scroll'\n",
" if (event.deltaY < 0) {\n",
" event.step = 1;\n",
" } else {\n",
" event.step = -1;\n",
" }\n",
" mouse_event_fn(event);\n",
" });\n",
"\n",
" canvas_div.append(canvas);\n",
" canvas_div.append(rubberband);\n",
"\n",
" this.rubberband = rubberband;\n",
" this.rubberband_canvas = rubberband[0];\n",
" this.rubberband_context = rubberband[0].getContext(\"2d\");\n",
" this.rubberband_context.strokeStyle = \"#000000\";\n",
"\n",
" this._resize_canvas = function(width, height) {\n",
" // Keep the size of the canvas, canvas container, and rubber band\n",
" // canvas in synch.\n",
" canvas_div.css('width', width)\n",
" canvas_div.css('height', height)\n",
"\n",
" canvas.attr('width', width * mpl.ratio);\n",
" canvas.attr('height', height * mpl.ratio);\n",
" canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n",
"\n",
" rubberband.attr('width', width);\n",
" rubberband.attr('height', height);\n",
" }\n",
"\n",
" // Set the figure to an initial 600x600px, this will subsequently be updated\n",
" // upon first draw.\n",
" this._resize_canvas(600, 600);\n",
"\n",
" // Disable right mouse context menu.\n",
" $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n",
" return false;\n",
" });\n",
"\n",
" function set_focus () {\n",
" canvas.focus();\n",
" canvas_div.focus();\n",
" }\n",
"\n",
" window.setTimeout(set_focus, 100);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items) {\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) {\n",
" // put a spacer in here.\n",
" continue;\n",
" }\n",
" var button = $('<button/>');\n",
" button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
" 'ui-button-icon-only');\n",
" button.attr('role', 'button');\n",
" button.attr('aria-disabled', 'false');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
"\n",
" var icon_img = $('<span/>');\n",
" icon_img.addClass('ui-button-icon-primary ui-icon');\n",
" icon_img.addClass(image);\n",
" icon_img.addClass('ui-corner-all');\n",
"\n",
" var tooltip_span = $('<span/>');\n",
" tooltip_span.addClass('ui-button-text');\n",
" tooltip_span.html(tooltip);\n",
"\n",
" button.append(icon_img);\n",
" button.append(tooltip_span);\n",
"\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" var fmt_picker_span = $('<span/>');\n",
"\n",
" var fmt_picker = $('<select/>');\n",
" fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
" fmt_picker_span.append(fmt_picker);\n",
" nav_element.append(fmt_picker_span);\n",
" this.format_dropdown = fmt_picker[0];\n",
"\n",
" for (var ind in mpl.extensions) {\n",
" var fmt = mpl.extensions[ind];\n",
" var option = $(\n",
" '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
" fmt_picker.append(option)\n",
" }\n",
"\n",
" // Add hover states to the ui-buttons\n",
" $( \".ui-button\" ).hover(\n",
" function() { $(this).addClass(\"ui-state-hover\");},\n",
" function() { $(this).removeClass(\"ui-state-hover\");}\n",
" );\n",
"\n",
" var status_bar = $('<span class=\"mpl-message\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"}\n",
"\n",
"mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
" // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
" // which will in turn request a refresh of the image.\n",
" this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
"}\n",
"\n",
"mpl.figure.prototype.send_message = function(type, properties) {\n",
" properties['type'] = type;\n",
" properties['figure_id'] = this.id;\n",
" this.ws.send(JSON.stringify(properties));\n",
"}\n",
"\n",
"mpl.figure.prototype.send_draw_message = function() {\n",
" if (!this.waiting) {\n",
" this.waiting = true;\n",
" this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
" }\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" var format_dropdown = fig.format_dropdown;\n",
" var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
" fig.ondownload(fig, format);\n",
"}\n",
"\n",
"\n",
"mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
" var size = msg['size'];\n",
" if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
" fig._resize_canvas(size[0], size[1]);\n",
" fig.send_message(\"refresh\", {});\n",
" };\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
" var x0 = msg['x0'] / mpl.ratio;\n",
" var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
" var x1 = msg['x1'] / mpl.ratio;\n",
" var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
" x0 = Math.floor(x0) + 0.5;\n",
" y0 = Math.floor(y0) + 0.5;\n",
" x1 = Math.floor(x1) + 0.5;\n",
" y1 = Math.floor(y1) + 0.5;\n",
" var min_x = Math.min(x0, x1);\n",
" var min_y = Math.min(y0, y1);\n",
" var width = Math.abs(x1 - x0);\n",
" var height = Math.abs(y1 - y0);\n",
"\n",
" fig.rubberband_context.clearRect(\n",
" 0, 0, fig.canvas.width, fig.canvas.height);\n",
"\n",
" fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
" // Updates the figure title.\n",
" fig.header.textContent = msg['label'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
" var cursor = msg['cursor'];\n",
" switch(cursor)\n",
" {\n",
" case 0:\n",
" cursor = 'pointer';\n",
" break;\n",
" case 1:\n",
" cursor = 'default';\n",
" break;\n",
" case 2:\n",
" cursor = 'crosshair';\n",
" break;\n",
" case 3:\n",
" cursor = 'move';\n",
" break;\n",
" }\n",
" fig.rubberband_canvas.style.cursor = cursor;\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_message = function(fig, msg) {\n",
" fig.message.textContent = msg['message'];\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
" // Request the server to send over a new figure.\n",
" fig.send_draw_message();\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
" fig.image_mode = msg['mode'];\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Called whenever the canvas gets updated.\n",
" this.send_message(\"ack\", {});\n",
"}\n",
"\n",
"// A function to construct a web socket function for onmessage handling.\n",
"// Called in the figure constructor.\n",
"mpl.figure.prototype._make_on_message_function = function(fig) {\n",
" return function socket_on_message(evt) {\n",
" if (evt.data instanceof Blob) {\n",
" /* FIXME: We get \"Resource interpreted as Image but\n",
" * transferred with MIME type text/plain:\" errors on\n",
" * Chrome. But how to set the MIME type? It doesn't seem\n",
" * to be part of the websocket stream */\n",
" evt.data.type = \"image/png\";\n",
"\n",
" /* Free the memory for the previous frames */\n",
" if (fig.imageObj.src) {\n",
" (window.URL || window.webkitURL).revokeObjectURL(\n",
" fig.imageObj.src);\n",
" }\n",
"\n",
" fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
" evt.data);\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
" else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
" fig.imageObj.src = evt.data;\n",
" fig.updated_canvas_event();\n",
" fig.waiting = false;\n",
" return;\n",
" }\n",
"\n",
" var msg = JSON.parse(evt.data);\n",
" var msg_type = msg['type'];\n",
"\n",
" // Call the \"handle_{type}\" callback, which takes\n",
" // the figure and JSON message as its only arguments.\n",
" try {\n",
" var callback = fig[\"handle_\" + msg_type];\n",
" } catch (e) {\n",
" console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
" return;\n",
" }\n",
"\n",
" if (callback) {\n",
" try {\n",
" // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
" callback(fig, msg);\n",
" } catch (e) {\n",
" console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
" }\n",
" }\n",
" };\n",
"}\n",
"\n",
"// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
"mpl.findpos = function(e) {\n",
" //this section is from http://www.quirksmode.org/js/events_properties.html\n",
" var targ;\n",
" if (!e)\n",
" e = window.event;\n",
" if (e.target)\n",
" targ = e.target;\n",
" else if (e.srcElement)\n",
" targ = e.srcElement;\n",
" if (targ.nodeType == 3) // defeat Safari bug\n",
" targ = targ.parentNode;\n",
"\n",
" // jQuery normalizes the pageX and pageY\n",
" // pageX,Y are the mouse positions relative to the document\n",
" // offset() returns the position of the element relative to the document\n",
" var x = e.pageX - $(targ).offset().left;\n",
" var y = e.pageY - $(targ).offset().top;\n",
"\n",
" return {\"x\": x, \"y\": y};\n",
"};\n",
"\n",
"/*\n",
" * return a copy of an object with only non-object keys\n",
" * we need this to avoid circular references\n",
" * http://stackoverflow.com/a/24161582/3208463\n",
" */\n",
"function simpleKeys (original) {\n",
" return Object.keys(original).reduce(function (obj, key) {\n",
" if (typeof original[key] !== 'object')\n",
" obj[key] = original[key]\n",
" return obj;\n",
" }, {});\n",
"}\n",
"\n",
"mpl.figure.prototype.mouse_event = function(event, name) {\n",
" var canvas_pos = mpl.findpos(event)\n",
"\n",
" if (name === 'button_press')\n",
" {\n",
" this.canvas.focus();\n",
" this.canvas_div.focus();\n",
" }\n",
"\n",
" var x = canvas_pos.x * mpl.ratio;\n",
" var y = canvas_pos.y * mpl.ratio;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step,\n",
" guiEvent: simpleKeys(event)});\n",
"\n",
" /* This prevents the web browser from automatically changing to\n",
" * the text insertion cursor when the button is pressed. We want\n",
" * to control all of the cursor setting manually through the\n",
" * 'cursor' event from matplotlib */\n",
" event.preventDefault();\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" // Handle any extra behaviour associated with a key event\n",
"}\n",
"\n",
"mpl.figure.prototype.key_event = function(event, name) {\n",
"\n",
" // Prevent repeat events\n",
" if (name == 'key_press')\n",
" {\n",
" if (event.which === this._key)\n",
" return;\n",
" else\n",
" this._key = event.which;\n",
" }\n",
" if (name == 'key_release')\n",
" this._key = null;\n",
"\n",
" var value = '';\n",
" if (event.ctrlKey && event.which != 17)\n",
" value += \"ctrl+\";\n",
" if (event.altKey && event.which != 18)\n",
" value += \"alt+\";\n",
" if (event.shiftKey && event.which != 16)\n",
" value += \"shift+\";\n",
"\n",
" value += 'k';\n",
" value += event.which.toString();\n",
"\n",
" this._key_event_extra(event, name);\n",
"\n",
" this.send_message(name, {key: value,\n",
" guiEvent: simpleKeys(event)});\n",
" return false;\n",
"}\n",
"\n",
"mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
" if (name == 'download') {\n",
" this.handle_save(this, null);\n",
" } else {\n",
" this.send_message(\"toolbar_button\", {name: name});\n",
" }\n",
"};\n",
"\n",
"mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
" this.message.textContent = tooltip;\n",
"};\n",
"mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
"\n",
"mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
"\n",
"mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
" // Create a \"websocket\"-like object which calls the given IPython comm\n",
" // object with the appropriate methods. Currently this is a non binary\n",
" // socket, so there is still some room for performance tuning.\n",
" var ws = {};\n",
"\n",
" ws.close = function() {\n",
" comm.close()\n",
" };\n",
" ws.send = function(m) {\n",
" //console.log('sending', m);\n",
" comm.send(m);\n",
" };\n",
" // Register the callback with on_msg.\n",
" comm.on_msg(function(msg) {\n",
" //console.log('receiving', msg['content']['data'], msg);\n",
" // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
" ws.onmessage(msg['content']['data'])\n",
" });\n",
" return ws;\n",
"}\n",
"\n",
"mpl.mpl_figure_comm = function(comm, msg) {\n",
" // This is the function which gets called when the mpl process\n",
" // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
"\n",
" var id = msg.content.data.id;\n",
" // Get hold of the div created by the display call when the Comm\n",
" // socket was opened in Python.\n",
" var element = $(\"#\" + id);\n",
" var ws_proxy = comm_websocket_adapter(comm)\n",
"\n",
" function ondownload(figure, format) {\n",
" window.open(figure.imageObj.src);\n",
" }\n",
"\n",
" var fig = new mpl.figure(id, ws_proxy,\n",
" ondownload,\n",
" element.get(0));\n",
"\n",
" // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
" // web socket which is closed, not our websocket->open comm proxy.\n",
" ws_proxy.onopen();\n",
"\n",
" fig.parent_element = element.get(0);\n",
" fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
" if (!fig.cell_info) {\n",
" console.error(\"Failed to find cell for figure\", id, fig);\n",
" return;\n",
" }\n",
"\n",
" var output_index = fig.cell_info[2]\n",
" var cell = fig.cell_info[0];\n",
"\n",
"};\n",
"\n",
"mpl.figure.prototype.handle_close = function(fig, msg) {\n",
" var width = fig.canvas.width/mpl.ratio\n",
" fig.root.unbind('remove')\n",
"\n",
" // Update the output cell to use the data from the current canvas.\n",
" fig.push_to_output();\n",
" var dataURL = fig.canvas.toDataURL();\n",
" // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
" // the notebook keyboard shortcuts fail.\n",
" IPython.keyboard_manager.enable()\n",
" $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
" fig.close_ws(fig, msg);\n",
"}\n",
"\n",
"mpl.figure.prototype.close_ws = function(fig, msg){\n",
" fig.send_message('closing', msg);\n",
" // fig.ws.close()\n",
"}\n",
"\n",
"mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
" // Turn the data on the canvas into data in the output cell.\n",
" var width = this.canvas.width/mpl.ratio\n",
" var dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
"}\n",
"\n",
"mpl.figure.prototype.updated_canvas_event = function() {\n",
" // Tell IPython that the notebook contents must change.\n",
" IPython.notebook.set_dirty(true);\n",
" this.send_message(\"ack\", {});\n",
" var fig = this;\n",
" // Wait a second, then push the new image to the DOM so\n",
" // that it is saved nicely (might be nice to debounce this).\n",
" setTimeout(function () { fig.push_to_output() }, 1000);\n",
"}\n",
"\n",
"mpl.figure.prototype._init_toolbar = function() {\n",
" var fig = this;\n",
"\n",
" var nav_element = $('<div/>')\n",
" nav_element.attr('style', 'width: 100%');\n",
" this.root.append(nav_element);\n",
"\n",
" // Define a callback function for later on.\n",
" function toolbar_event(event) {\n",
" return fig.toolbar_button_onclick(event['data']);\n",
" }\n",
" function toolbar_mouse_event(event) {\n",
" return fig.toolbar_button_onmouseover(event['data']);\n",
" }\n",
"\n",
" for(var toolbar_ind in mpl.toolbar_items){\n",
" var name = mpl.toolbar_items[toolbar_ind][0];\n",
" var tooltip = mpl.toolbar_items[toolbar_ind][1];\n",
" var image = mpl.toolbar_items[toolbar_ind][2];\n",
" var method_name = mpl.toolbar_items[toolbar_ind][3];\n",
"\n",
" if (!name) { continue; };\n",
"\n",
" var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
" button.click(method_name, toolbar_event);\n",
" button.mouseover(tooltip, toolbar_mouse_event);\n",
" nav_element.append(button);\n",
" }\n",
"\n",
" // Add the status bar.\n",
" var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
" nav_element.append(status_bar);\n",
" this.message = status_bar[0];\n",
"\n",
" // Add the close button to the window.\n",
" var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
" var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\n",
"}\n",
"\n",
"mpl.figure.prototype._root_extra_style = function(el){\n",
" var fig = this\n",
" el.on(\"remove\", function(){\n",
"\tfig.close_ws(fig, {});\n",
" });\n",
"}\n",
"\n",
"mpl.figure.prototype._canvas_extra_style = function(el){\n",
" // this is important to make the div 'focusable\n",
" el.attr('tabindex', 0)\n",
" // reach out to IPython and tell the keyboard manager to turn it's self\n",
" // off when our div gets focus\n",
"\n",
" // location in version 3\n",
" if (IPython.notebook.keyboard_manager) {\n",
" IPython.notebook.keyboard_manager.register_events(el);\n",
" }\n",
" else {\n",
" // location in version 2\n",
" IPython.keyboard_manager.register_events(el);\n",
" }\n",
"\n",
"}\n",
"\n",
"mpl.figure.prototype._key_event_extra = function(event, name) {\n",
" var manager = IPython.notebook.keyboard_manager;\n",
" if (!manager)\n",
" manager = IPython.keyboard_manager;\n",
"\n",
" // Check for shift+enter\n",
" if (event.shiftKey && event.which == 13) {\n",
" this.canvas_div.blur();\n",
" event.shiftKey = false;\n",
" // Send a \"J\" for go to next cell\n",
" event.which = 74;\n",
" event.keyCode = 74;\n",
" manager.command_mode();\n",
" manager.handle_keydown(event);\n",
" }\n",
"}\n",
"\n",
"mpl.figure.prototype.handle_save = function(fig, msg) {\n",
" fig.ondownload(fig, null);\n",
"}\n",
"\n",
"\n",
"mpl.find_output_cell = function(html_output) {\n",
" // Return the cell and output element which can be found *uniquely* in the notebook.\n",
" // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
" // IPython event is triggered only after the cells have been serialised, which for\n",
" // our purposes (turning an active figure into a static one), is too late.\n",
" var cells = IPython.notebook.get_cells();\n",
" var ncells = cells.length;\n",
" for (var i=0; i<ncells; i++) {\n",
" var cell = cells[i];\n",
" if (cell.cell_type === 'code'){\n",
" for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
" var data = cell.output_area.outputs[j];\n",
" if (data.data) {\n",
" // IPython >= 3 moved mimebundle to data attribute of output\n",
" data = data.data;\n",
" }\n",
" if (data['text/html'] == html_output) {\n",
" return [cell, data, j];\n",
" }\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n",
"// Register the function which deals with the matplotlib target/channel.\n",
"// The kernel may be null if the page has been refreshed.\n",
"if (IPython.notebook.kernel != null) {\n",
" IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
"}\n"
],
"text/plain": [
"<IPython.core.display.Javascript object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB1RUxxfGP1EQsffeO/YuEnvDEltMTEw0mtj+0USjib3GGk2isbdYYmyxa2KJvSLYsCGCqKigWBDELur/3Hnu0nXZByy435zjUXfnzpv3e3d3vp1yb4rXr1+/BgsJkAAJkAAJkAAJkIDVEEhBAWg1z5o3SgIkQAIkQAIkQAKKAAUgHYEESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIHSIAESIAESIAESMDKCFAAWtkD5+2SAAmQAAmQAAmQAAUgfYAESIAESIAESIAErIwABaCVPXDeLgmQAAmQAAmQAAlQANIH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\" width=\"640\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0xea0834b0f0>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"F = WAF_1D_flux_helper(h, hu, g, dx, dt)\n",
"plt.figure()\n",
"for i in range(1):\n",
" plt.plot(x[2:-1], F[:,i]-F[:,i+1], marker=' ', label='F_' + str(i))\n",
"#plt.ylim(-10, 10)\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}