You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

11413 lines
1.1 MiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib notebook\n",
"import numpy as np\n",
"import wafo.data as wd\n",
"import wafo.stats as ws\n",
"import matplotlib.pyplot as plt\n",
"# import mpld3\n",
"# mpld3.enable_notebook() # Enable interactive plots"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Chapter 5 Extreme value analysis\n",
"=================================\n",
"\n",
"Of particular interest in wave analysis is how to find extreme quantiles and extreme significant values for a wave series. Often this implies going outside the range of observed data, i.e. to predict, from a limited number of observations, how large the extreme values might be. Such analysis is\n",
"commonly known as Weibull analysis or Gumbel analysis, from the names of two familiar extreme value distributions. WAFO contains routines for fitting of such distributions, both for the Weibull and Gumbel distributions, and for two more general classes of distributions, the Generalized Pareto\n",
"Distribution (GPD) and the Generalized Extreme Value distribution (GEV).\n",
"\n",
"Section 5.1 Weibull and Gumbel papers\n",
"--------------------------------------\n",
"\n",
"Significant wave-height data on Weibull paper, on Gumbel paper and logarithm of data on Normal probability paper:\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAA3AAAAKACAYAAADdD5p6AAAgAElEQVR4XuydB7hU1fW333vpSAcVRGKJwWjAghqjxhI1wcQSe+8lFopijyVGYxdRQEQTO/7taGI0hs/EXqNgIaCgEVERVECa9PI9v7nn4Djee2fm3jNn5sz89vPwxMA+e+/z7j1rnbX32mtV4WICJmACJmACJmACJmACJmACJpAIAlWJGKUHaQImYAImYAImYAImYAImYAImgA04LwITMAETMAETMAETMAETMAETSAgBG3AJmSgP0wRMwARMwARMwARMwARMwARswHkNmIAJmIAJmIAJmIAJmIAJmEBCCNiAS8hEeZgmYAImYAImYAImYAImYAImYAPOa8AETMAETMAETMAETMAETMAEEkLABlxCJsrDNAETMAETMAETMAETMAETMAEbcF4DJmACJmACJmACJmACJmACJpAQAjbgEjJRHqYJmIAJmIAJmIAJmIAJmIAJ2IDzGjABEzABEzABEzABEzABEzCBhBCwAZeQifIwTcAETMAETMAETMAETMAETMAGnNeACZiACZiACZiACZiACZiACSSEgA24hEyUh2kCJmACJmACJmACJmACJmACNuC8BkzABEzABEzABEzABEzABEwgIQRswCVkojxMEzABEzABEzABEzABEzABE7AB5zVgAiZgAiZgAiZgAiZgAiZgAgkhYAMuIRPlYZqACZiACZiACZiACZiACZiADTivARMwARMwARMwARMwARMwARNICAEbcAmZKA/TBEzABEzABEzABEzABEzABGzAeQ2YgAmYgAmYgAmYgAmYgAmYQEII2IBLyER5mCZgAiZgAiZgAiZgAiZgAiZgA85rwARMwARMwARMwARMwARMwAQSQsAGXEImysM0ARMwARMwARMwARMwARMwARtwXgMmYAImYAImYAImYAImYAImkBACNuASMlEepgmYgAmYgAmYgAmYgAmYgAnYgPMaMAETMAETMAETMAETMAETMIGEELABl5CJ8jBNwARMwARMwARMwARMwARMwAac14AJmIAJmIAJmIAJmIAJmIAJJISADbiETJSHaQImYAImYAImYAImYAImYAI24LwGTMAETMAETMAETMAETMAETCAhBGzAJWSiPEwTMAETMAETMAETMAETMAETsAHnNWACJmACJmACJmAC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q6qZU9cHuB3YtJTTV9W9+rkIiIAIiIAIiIAI5DUBOXB5LV49XJ4RMOfHCn8MBIaUqEJp6Y8Fzjmy1EnbK2f72Swl8WDgRVd4xBwoc/YmA0e69EWL7D0B7JGhAzcbuA2ws99SrTIHzvbajQesKMmjwEpXaGU34CVX2KQh8LlLn/wLcA9gjqgVS1ETAREQAREQAREQAREA5MBpGYhAsgjYOXAWIbNz4Jq69EeLsF1WIlJlB2mbo2TVHF8FLD1xrxJFTK4A+gGNXeTO9s3ZsQQW+Uo3Amd75Kwgic3BCqgcV06apRVGsWtSB3lvC9zhCpXYvjcrVvK0cwQPAe4E7Bqbg0Ub7RmsEqaaCIiACIiACIiACIiAIyAHTktBBJJLwPaQWeqjFR85CliW3EfRzEVABERABERABERABNIhIAcuHUq6RgTiS8CiZhZNs7PZXovvNDUzERABERABERABERCBMAjIgQuDovoQAREQAREQAREQAREQAREQgQgIyIGLALKGEAEREAEREAEREAEREAEREIEwCMiBC4Oi+hABERABERABERABERABERCBCAjIgYsAsoYQAREQAREQAREQAREQAREQgTAIyIELg6L6EAEREAEREAEREAEREAEREIEICMiBiwCyhhABERABERABERABERABERCBMAjIgQuDovoQAREQAREQAREQAREQAREQgQgIyIGLALKGEAEREAEREAEREAEREAEREIEwCMiBC4Oi+hABERABERABERABERABERCBCAjIgYsAsoYQAREQAREQAREQAREQAREQgTAIyIELg6L6EAEREAEREAEREAEREAEREIEICMiBiwCyhhABERABERABERABERABERCBMAjIgQuDovoQAREQAREQAREQAREQAREQgQgIyIGLALKGEAEREAEREAEREAEREAEREIEwCMiBC4Oi+hABERABERABERABERABERCBCAjIgYsAsoYQAREQAREQAREQAREQAREQgTAIyIELg6L6EAEREAEREAEREAEREAEREIEICMiBiwCyhhABERABERABERABERABERCBMAjIgQuDovoQAREQAREQAREQAREQAREQgQgIyIGLALKGEAEREAEREAEREAEREAEREIEwCMiBC4Oi+hABERABERABERABERABERCBCAjIgYsAsoYQAREQAREQAREQAREQAREQgTAIyIELg6L6EAEREAEREAEREAEREAEREIEICMiBiwCyhhABERABERABERABERABERCBMAjIgQuDovoQAREQAREQAREQAREQAREQgQgIyIGLALKGEAEREAEREAEREAEREAEREIEwCMiBC4Oi+hABERABERABERABERABERCBCAjIgYsAsoYQAREQAREQAREQAREQAREQgTAI/H+/RqI/pcykqwAAAABJRU5ErkJggg==\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:1553: UserWarning: P-value is on the conservative side (i.e. too large) due to ties in the data!\n",
" ' ties in the data!')\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x9743230>"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig, ax = plt.subplots(2, 2, figsize=(11, 8))\n",
"Hs = wd.atlantic()\n",
"wei = ws.weibull_min.fit2(Hs)\n",
"gum = ws.gumbel_r.fit2(Hs)\n",
"axf = ax.ravel()\n",
"tmp = ws.probplot(Hs, wei.par, dist='weibull_min', plot=axf[0])\n",
"axf[0].set_title('Weibull Probability Plot')\n",
"tmp = ws.probplot(Hs, gum.par, dist='gumbel_r', plot=axf[1])\n",
"axf[1].set_title('Gumbel Probability Plot')\n",
"tmp = ws.probplot(np.log(Hs), plot=axf[2])\n",
"axf[2].set_title('Normal Probability Plot')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Return values in the Gumbel distribution"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4Xu2dB7gU1fmHf4Aigoo9ATW2qNFYgiXGGHvBKJjYsEZNLBixIhZQQSzYUaOooLH3FgWNIcaCLX8rJkaNxhojdgUUQRD4P787s9dh3b13d8+22X3neYzm3jkz57znm7vvnvJNB3FAAAIQgAAEIAABCDQVgQ5N1VoaCwEIQAACEIAABCAgBJAggAAEIAABCEAAAk1GAAFssg6nuRCAAAQgAAEIQAABJAYgAAEIQAACEIBAkxFAAJusw2kuBCAAAQhAAAIQQACJAQhAAAIQgAAEINBkBBDAJutwmgsBCEAAAhCAAAQQQGIAAhCAAAQgAAEINBkBBLDJOpzmQgACEIAABCAAAQSQGIAABCAAAQhAAAJNRgABbLIOp7kQgAAEIAABCEAAASQGIAABCEAAAhCAQJMRQACbrMNpLgQgAAEIQAACEEAAiQEIQAACEIAABCDQZAQQwCbrcJoLAQhAAAIQgAAEEEBiAAIQgAAEIAABCDQZAQSwyTqc5kIAAhCAAAQgAAEEkBiAAAQgAAEIQAACTUYAAWyyDqe5EIAABCAAAQhAAAEkBiAAAQhAAAIQgECTEUAAm6zDaS4EIAABCEAAAhBAAIkBCEAAAhCAAAQg0GQEEMAm63CaCwEIQAACEIAABBBAYgACEIAABCAAAQg0GQEEsMk6nOZCAAIQgAAEIAABBJAYgAAEIAABCEAAAk1GAAFssg6nuRCAAAQgAAEIQAABJAYgAAEIQAACEIBAkxFAAJusw2kuBCAAAQhAAAIQQACJgWYhsJ+kqxONnSXpXUm3SjpV0tclgPiVpJUkXVBC2TQVOUXSUEkd66zSw+J6dSpTvRwjbmMyTnzpTOz8UNKbZbpXvsssIWmgpL6SVpQ0n6T3JD0u6SpJj1b4/rku/3Z8333LdO9HJM2RtGWZrleJy7h+jnv/bSjmuEbSZnHfFVOOcyFQdQIIYNWRc8MaEfCHuD9Ad40/UBeWtJOkQyVdLOnIEuplUdhK0g9KKJumIuUWrXK1vaekZSU9XaYLPizJMrlp1vUysbNKhQVwTUnjJc2VdImkZyX5i8pqkn4j6eeSvi/p4zK1t9DLvCXpMUnlEkBzdhsbUQD9N8EC6C+GHBCoawIIYF13D5UrI4F8H+J/lbSRJAthsUclBNAjUH4uZxdbmQqeX68CWO4m11IAPdL3ctzvG0v6LEfj9pD0F0mTy93wdq6HABYOHAEsnBVn1pgAAljjDuD2VSOQTwDPknSspO9J+iRRmxUknSFpG0mLSHpF0nBJd8fn+A+9r+mRjMxz5Kkyf/PfPx5t9DX+m7hmrqlUTzWNkPSFpP6SlpO0vqRFJVlIPM28rSR/+PuwAAyQNLUNcvdK6iFpvaxzPHrkae9Bki6StKSk0yVtEY+kfRqP9JjHpETZbAFcXpKlwO28LnGeRz5c582zpip3jhmvLWmmpAckHRPXJVN8r7heHmUzk3fikdkr2mhnPp5uk0fJjo7b+Hw80mvByne43q5/sj89VelRqkzseATu8Hh69ktJd8Ttcpsyx4Lx1OFukpaJR5uvlHRmfO1893f/3hiPSo8t8KlwvD0k6XdZ52dPX2Y4rR73+y8kua/dr56y9OjikDgGnpF0YNZIZ0YAPf18fHyeWboPzSh5mOHJkn4aT6d76trnvZQ4qZARwEyM/V6S//u3krpJukfSQXEdPEpqWf5A0mlZsejbbRcvEfhJHHe+r+v/WqIu/sLlaV4z7C7pKUmHSfpXjingdeL7mF8XSY6rE+Lp+cwlEcACg5fTak8AAax9H1CD6hDIJ4BeA2jJ89orf/j78LSi/7j7g8Uf3BbD3eMPIQuZBcvrszx1bFnzei0/S15H+I+EMPicpADmGknzh7Vl6w1JF0qaJmmipDVimfKHr+83Lp4KPDdet+gPxHyH63qTpB9L+nfiJH8Quz2eOnWbVo1l0h/sH8XS6HOWkvSj+EPTxYsRQAuJhTKzVu0QSZdK+qOkO+ORVov0ApIshG6vP1AnxO2/LxYH398y5fbmO/LxtBi9KmmUpM6SzpP0Tdwm8851+H4WMAvBwXF/WrLNL7MG8D+Sbo7b5lFjt8Pi4X/78PSxhcjXslRYIn4WS4hlxWKd7xgTC7VHogtdj+rYsNS0J4Dm5H9elGSh9pcZL33wEgjHg6Xt7JjVH+KYdfsyh+/jEUrz8HUsvBapXpIsRebiY4f4C5JjNbOO0oJk8VwrlmGfV4wA+ouAmTqe/Uw4HtwHvreZZdri59L38P/3Yfnzc/O3+Dk1V/eVv8xZCN+Pz/PPLL+OEX8x8fNsAfaz637NrAFcN+53/13wc/qVJMtp73gGwc+sDwSwjSDnV/VFAAGsr/6gNpUjkBFAfzh7Ib8/EDwydXm8/u+yxK0tK31i4UpOt3m62KNm/jDI/LHPtQYwc69iBNAjh8mRpMxomkdokh/wls4DJHVtA5VHJyyvFqATE+f5Q8obCty2XIflx3JoabUceLTFR6kC6BEb3+/2eNQmc0+P6HgUxkJk4bB0Do7ZFhMB+QTQQmJZyEyj7yLptni06P/auEFbU8D+YM/eFGDR8YilY8qHR9LcX15D+ETiPhYMb6LxF4vkKHOyKn+OZcqjhsnDf6OTm2+SSwOKEUDf32v4LLk+PMLsUVLHt0eqLeI+PMJpwfHPPFrsw/fxiLJjNDMyvFA8SmvJcrz7MHef6xHrzOHz/LPr480t/nkxAvhg/AUtcz1/ifi1pH1iEUy2xbJmofPh9ZN+xi2fGel3mxx3jjmPgpuB2+hRbI+qZ47jJHlmINnfrodnCSy8mT5w33hk018S/LfEBwKYAMl/1jcBBLC++4falY9A9i7gzJUtSf7QSx7/i0cDPBKQOfysHBWPlHiqyFOA+dYAFiuA3pySvJfvmRHAfvFUY6YeHp2yrPoD2aN2+Q5PO24df5D7HI+OeHTSU42WoczhUQxPPa8cT7H55x4JtZCdE59UqgD6/t7U4H8nd6+a5XOxMHhTjoXJUuBRnlviKbUpBXR9PgH0iKOn8TKHRzr9IZ3d9uxbtLcGcMNYLDLlPHXvmMjI+A3xRg1LYfLwFwZPLe4Yj0rlalo+Abw/HmXKlHGcOF58FCuAS8dTv5lrWc49ouUR7Mzh0XAvM9hE0pOJ+3gkzlP7ycPi5BFO8/UOacuVv6xY9jKH+/qu+IuFR9d8FCOA/pJwfuJ6XpbhUcVcbfHosZ8P94eXVPhci2/y8L0tpRsk4s5f4pJT2d7U5VHkjAD6C1XmehnB9DXdtpGSvHzBXwx9IIBZwPm/9UsAAazfvqFm5SWQkTKPHviDz9OcTrfhDzyPjPjDO3N4JM7TebmeD8uRR0L8gVguAfQHlddNJY+MAFqePK2aOfLJZTatTHlPx3p61TLnD0ePYmSmGC2+Xgvo6S+Pbn4ejzZZVpKjH6UKoD8Yk1yTdTRHS6Hr58MjKK6P19mZu+vs/vG0Zb4jnwB6DWDygz/fmsXs67YngNm7gLPvb4bur1yH22s5ujbP7z2d6b71FGVyCthi7i8cFn6vDfT6t1IFcP7EaJirkWtzR66483neae2lBcnD07GeSvZIr/vN6/2Saygz5/pnHlX2iLiPYgQwKbwum2HeVls8iuqRPY/qJUf2Xd7Tx16faK7+cuX/793Xmaljn+PlCdMTz4BHxf2lMFfbfL5HGD1F7gMBbOOB5Vf1RQABrK/+oDaVI5BrDaDXh/0z/oC11PmPvg+vD7KceBoo1zNiKXF6jnwCmFmD5/Qdryea5Kknfygl89b5wyNbWFwkVAB9DY9ieF2Txc8fwB7ZsUBkDn9gey1TcsrO02SeIm9LAC2RZuTreqQxc1jiPN2bWQPo9VEewbJg59qA4VGVzPqxzDU8euORJgurp+g8bZrvqDcBtEx4ZMkbQHLFjfsj1+5ety+zCcQMM1PvyXZnJDYpRJYWj6R6OjRzLB5PM+fqvxABbG8E0LHu+nh0zuvusg9/qfKaSB+VFsDMCKCfK8dI8kiOAHqU0180vNGnrRFAX8/rH72O0wKfq289kuoDAWzjgeVX9UUAAayv/qA2lSOQbxOIp7/8gZucavIfcU9tebF4WwvyvX7Q68s8mpg8XNbTZ/4wz+watvR5vZBHkQoVQI/8eYSylBFA18cfgBZOC4LXq2XvzvWHlkXOi/czh9dRed1gcgF8LtGyLI+Op0AzZT0yZc4ZAfQaLI+ceE1Z9gdxez2dWYuWPdWXLFduAbQgezOQJS555Iud7Pv7PI/kebo9udO0vbb695azTBoYb4rJXiuYEfOkALq+3tntOM0clm2vQwwRwOy4y6wB9KiZR899uG8ttI4r7wb34S8OzheYWROYr92VFkDf1yOWnur1RqjM5q7M2lOPenudn0dWHZ+esvZIZubwBhdvjkkydJ19ZEas87UNASwk2jmnLggggHXRDVSiCgTaSubrKU+nX/EUlYXP/+2f+cPB3/r9QbdYPFXkczLr9Y6I3wJiyfKi8xnxKIcFL7P71iMivqY/YLwg3euLChVAf+iUOgVspJlRGX9oexdsZgoug9tr2PxB6Olnf2B6JMRr8ryeqz0BtGRYft0+77i1RHqNm0UluQvYo4Rm6I01Hg302j5P0WVGOL3mz/fyqKLb600G5u+f+dzMurFcIVJuAfR6Lq+JdKx4V7ZHKC1yhQqgpwE94mrJ97o1r7n0KLN5+ouGd6o6RvIdFkdLnYXFa1OdksUjZ5Y8s3bfeKTQo6w+LF7maqHxZgxvUPDPPKWZq/9CRgC9EcXrXn3dzC5gi6frnBnl/mX8hedP8TpTS6z71dPDHkH0FwEf1RBAjz6bifvDa0ItrBY6S5/r7U1SPvyFx5t03Peewrf8e5NV9i5g7zr2aKE3EZm5vzhlNoSZja/hAwGswh9zblEeAghgeThylfon0JYAZha+e82ZP0x9eN2PPzD8oeYRPudN8xSWp4C8WcGHp4acVsMpJzxd6Q+5zBsALHv+ELfAeNrPH37+8PHatKQAekdhrqkqC1LoCKDraLFzPkDLXvY6Qy9ut6hYLPzfngaz1GamgDML3i1aLptZ5+Trui2e0jYffwB6Y4lHg/yhmxRAn2s+HmF1PTKvNvNIkdceWpS3j9f/OS2MpzC9ucWbR8wq80GdK8Jy1SsXT4/8uE1OnZPMW5h9TcuKP9w9NejRo8z0YFsCmM3FwmcptqhZIry71jJpLl7rmS8NTaYuyVfBOZbMNvMqONfN0/aZw3+/PVprYXGMetmCv4xYyBy72f3nuiXvn2vELlfcZc4zD4uOBd6j2d697Z8lD2+UcZ2cn89pfNx/liY/V/5S5cMC6Hp480W+I9NnyTWPPjfT54W0xUsbfH52HsDksgPzNSt/qXNMu65m6PYlGfre/kLl6/mLks/1LmqPonsmwOLuwwLoTU0eLeWAQF0TQADrunuoHAQgAAEIQAACECg/gWYUQK/t8HSVv2F6SsPfYD0N5um+zOFvp56q8bSZGXlKxolRk9nsy98bXBECEIAABCAAAQhUgUAzCqCnYfwKJ+/k9BSe0wQ4aazXeCQF0NMTmYW/VegKbgEBCEAAAhCAAASqQ6AZBTCbrBdOex2H1x5lks96BDB78X11eoS7QAACEIAABCAAgQoTQACj6V+/rzSzeN/ILYBevOxdc17Y70W+yXxnFe4WLg8BCEAAAhCAAAQqR6DZBdCjfE5Z4HxtTheQObyL0XncvKPQO0T9/ky/Gst5z5KH+Xm3qNNFcEAAAhCAAAQgkB4CTg/k1FOZXJHpqXkZatrMAtgnTgDqFA9+xVJbh9NROKWAE7QmD6dDSG4eKUOXcAkIQAACEIAABKpEwG8byiQ4r9It6+M2zSqAe8fJaf3KplyvLcruHQugE4s6t1Xy8Hs7p7z77rtaZBH/Z/WOIUOGaMQIp3Yr/SjlGoWUae+ctn6f73e5fp79s/buWzqptkuW677FXqfQ80vh7RbTF4U/X+Xoi2KZ5zu/kGelUs9C8rqFMmmvLsVep9Dz2zuvmPiv975oK7ba4x/ap+1xLqRuxf4NK+QZmDp1qpZbzjnnW3I6+lV/TXc0owAeFmd/d2b+J3L0uHcDm4t3CWeSlfodn5ZAJ/b9jgBOmTKl6gI4fvx49e5tJy39KOUahZRp75y2fp/vd7l+nv2zgQMHauRIJ/Sv7tFeewutTbHXKfT8Uni7zvRF4c9XOfqiWOb5zs9Vl1o8G4Uyae/5KPY6hZ7f3nnFxH+990VbsdUe/+Tv22OW61qFlGnvnGL/hhXyeWEB7N7d7ocAFhMDaT/XUjcr8Y7XTJ4/v9HAQuipYb+I3sPCzgPoTSB+lZDf+JB9tIwA1kIA094Jlah/LT7kKtGORrgmfVFfvUh/1E9/0Bf10RcIYDTSxVE6AQSwdHZlL9net8iy35AL5iVAX9RXcNAf9dMf9EV99AUCiACGRiICGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJIIAIYGjIIYChBCkPAQhAAAIQqDIBBBABDA05BDCUIOUhAAEIQAACVSaAACKAoSGHAIYSpDwEIAABCECgygQQQAQwNOQQwFCClIcABCAAAQhUmQACiACGhhwCGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJIIAIYGjIIYChBCkPAQhAAAIQqDIBBBABDA05BDCUIOUhAAEIQAACVSaAACKAoSGHAIYSpDwEIAABCECgygQQQAQwNOQQwFCClIcABCAAAQhUmQACiACGhhwCGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJIIAIYGjIIYChBCkPAQhAAAIQqDIBBBABDA05BDCUIOUhAAEIQAACVSaAACKAoSGHAIYSpDwEIAABCECgygQQQAQwNOQQwFCClIcABCAAAQhUmQACiACGhhwCGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJIIAIYGjIIYChBCkPAQhAAAIQqDIBBBABDA05BDCUIOUhAAEIQAACVSaAACKAoSGHAIYSpDwEIAABCECgygQQQAQwNOQQwFCClIcABCAAAQhUmQACiACGhhwCGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJIIAIYGjIIYChBCkPAQhAAAIQqDIBBBABDA05BDCUIOUhAAEIQAACVSaAACKAoSGHAIYSpDwEIAABCECgygQQQAQwNOQQwFCClIcABCAAAQhUmQACiACGhhwCGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJIIAIYGjIIYChBCkPAQhAAAIQqDIBBBABDA05BDCUIOUhAAEIQAACVSaAACKAoSGHAIYSpDwEIAABCECgygQQQAQwNOQQwFCClIcABCAAAQhUmQACiACGhhwCGEqQ8hCAAAQgAIEqE0AAEcDQkEMAQwlSHgIQgAAEIFBlAgggAhgacghgKEHKQwACEIAABKpMAAFEAENDDgEMJUh5CEAAAhCAQJUJTJ48VYst1t139f9MrfLt6+J2HeqiFumtBAKY3r6j5hCAAAQg0GQE5s6V/vxn6fjjp+qllxDAJuv+sjYXASwrTi4GAQhAAAIQqAyBxx6TBg+WXntNOuaYqTrhBASwMqSb46oIYHP0M62EAAQgAIGUEvjHP6QhQyQL4LHHSkcdJc2dO1XduyOAKe3Suqg2AlgX3UAlIAABCEAAAvMSeOMNaehQ6U9/kn7/+2j0b8klo3PYBMImkNDnBQEMJUh5CEAAAhCAQBkJvP++dNpp0tVXS3vvLQ0bJi233Lw3QAARwNCQQwBDCVIeAhCAAAQgUAYCn38unXOO9Ic/SNtvH0ngj36U+8IIIAIYGnIIYChBykMAAhCAAAQCCHz1VSR9Z58trb++NGKEtMEGbV8QAUQAA0KupSgCGEqQ8hCAAAQgAIESCMyaJV15ZTTSt+yy0plnSlttVdiFEEAEsLBIyX8WAhhKkPIQgAAEIACBIgjMmSPdcku0waNzZ+mMM6Rf/1rqUERmYwQQASwi5HKeigCGEqQ8BCAAAQhAoAACTuJ8//1RSpfPPpOGD5d+8xtpvvkKKJx1CgKIABYfNfOWQABDCVIeAhCAAAQg0A6Bxx+P0rj8+9/SiSdKhxwidelSOjYEEAEsPXqikghgKEHKQwACEIAABPIQ+Oc/oxG/Rx/12zuko4+WFvEnb+CBACKAgSGEAIYCpDwEIAABCEAgm8Cbb0Zr/O6889skzkstVT5OCCACGBpNjACGEqQ8BCAAAQhAICbgJM6nny5ddZW0557SKadIP/hB+fEggM0pgGdK2kHS8pK+lDRB0nGS/pcIsbUlXSxpPUmTJV0haXiOEEQAy/9cckUIQAACEGgyApMnR0mcL7pI2m67SAJXX71yEBDA5hTAMyTdIelFSV0lXSZpDUm94lBbSNJrkq6SdKqkVSXdL+k8SRdlhSMCWLnnkytDAAIQgECDE3AS54svls46S1p33SiX309/WvlGI4DNKYDZkbWOpOclLS5piqT9JJ0tqaekOfHJR0g6XNIqCGDlH0zuAAEIQAACjU3ASZw9zetULsssE4nf1ltXr80IIALoaPP07yGSVopDb6QkDzz/MhGKG0l6XFL3eNo48ytGAKv3vHInCEAAAhBIOQEncb711miDR6dOURLnnXcuLolzORAggAigv2/8SdLOkh6Ig+pKSd0k7ZkIMr9O+iVJy0malPg5AliOJ5FrQAACEIBAQxNwEue//CXK5ffpp9HI3777lpbEuRygEMDmFsA+kq6Pp3zHJgKKEcByPF1cAwIQgAAEICDpiSci8Xv55Sin36GHhiVxLgdUBLB5BXBvSZdI2k3S37KCaV9J52StATxS0mH51gAOGDBAnf1CQkm9e/du+YcDAhCAAAQg0MwEnMTZb+145BFp4MAokXM5kjiXynT8+PHyPz5mzpypUaNG+T+9tGtqqddMc7kiXp2c5mbOU3eLnHf39vUXkxyt8i7gV+NdwN4x7I0f90k6n13ADRMDNAQCEIAABCpEwEmchw2T7rhD6t8/GvVbeukK3azEyzIC2JwjgN7ZO0vS13HcWILnxps+MkK4pqRL4zyA3hnsVDGn5Ygz1gCW+PBRDAIQgAAEGovABx9E+fv++Edpjz2iJM7LO+NuHR4IYHMKYDlDEQEsJ02uBQEIQAACqSPgJM7nnhslcd5mm0gCf/zj+m4GAogAhkYoAhhKkPIQgAAEIJBKAk7ifMklURLnddaJcvn97GfpaAoCiACGRioCGEqQ8hCAAAQgkCoCTuJ89dVRKpcePaQRI6KRvw4p2lWAACKAoQ8dAhhKkPIQgAAEIJAKAk7ifPvt0kknSR07Rkmcd9klXeKXAY0AIoChDx0CGEqQ8hCAAAQgUNcEnMTZ2VO8m/ejj6LNHfvvX7skzuWAhQAigKFxhACGEqQ8BCAAAQjULYEnn4ySOP/rX98mcV5wwbqtbsEVQwARwIKDJc+JCGAoQcpDAAIQgEDdEbDwOYnzgw9KRx8tDRokdXfK5AY5EEAEMDSUEcBQgpSHAAQgAIG6IfDWW1ESZ6/1O+igSAK/9726qV7ZKoIAIoChwYQAhhKkPAQgAAEI1JzAhx9GmzquuELq1y9a57fiijWvVsUqgAAigKHBhQCGEqQ8BCAAAQjUjMCUKdJ550kXXCBtvXWUxHlNvwurwQ8EEAEMDXEEMJQg5SEAAQhAoOoEpk+XRo2KkjevtVb07402qno1anZDBBABDA0+BDCUIOUhAAEIQKBqBL75RrrmmmiKd+mlI/Hbdtt05vILgYYAIoAh8eOyCGAoQcpDAAIQgEDFCTiJ8513RkmcndfvtNOk3XaLEjo344EAIoChcY8AhhKkPAQgAAEIVIyAZe+BB6Icfu+/H+3w/e1vpfnnr9gtU3FhBBABDA1UBDCUIOUhAAEIQKAiBJ56Kkri/MIL0b8PO0xqhCTO5YCFACKAoXGEAIYSpDwEIAABCJSVwEsvRVO9Hvk78kjp2GOlRRct6y1SfzEEEAEMDWIEMJQg5SEAAQhAoCwE3nknmuK95RbpwAMjCfz+98ty6Ya7CAKIAIYGNQIYSpDyEIAABCAQROCjj6QRI6TRo6Vdd5WGD5dWWinokg1fGAFEAEODHAEMJUh5CEAAAhAoicDUqdL550sjR0qbbx69yWPttUu6VNMVQgARwNCgRwBDCVIeAhCAAASKIjBjhnTppdGo3xprRLn8Nt64qEs0/ckIIAIY+hAggKEEKQ8BCEAAAgURcBLn666Lkjgvvngkfttt13xJnAuC1c5JCCACGBpHCGAoQcpDAAIQgECbBJzL7667ok0ds2ZFSZx33715kziXI1wQQAQwNI4QwFCClIcABCAAgbwEHnwwyuH37rvRDt8DDiCJcznCBQFEAEPjCAEMJUh5CEAAAhD4DoFnnonE77nnpBNOkA4/XOraFVDlIoAAIoChsYQAhhKkPAQgAAEItBL497+jqd7775eOOEI67jhpscUAVG4CCCACGBpTCGAoQcpDAAIQgID++98of9+NN0q/+5108slSjx6AqRQBBBABDI0tBLjLoccAACAASURBVDCUIOUhAAEINDGBjz+OdvNefrn0619Lp54q/fCHTQykSk1HABHA0FBDAEMJUh4CEIBAExL44osogbMTOW+ySZTE+Sc/aUIQNWoyAogAhoYeAhhKkPIQgAAEmojA119Ho32nny6ttlo0+mcB5KguAQQQAQyNOAQwlCDlIQABCDQBgdmzpeuvj1K5dO8eid/225PEuVZdjwAigKGxhwCGEqQ8BCAAgQYm4CTOd98d7eydPj1K4rznniRxrnWXI4AIYGgMIoChBCkPAQhAoEEJPPxwlMPvnXekoUOlAw+UOndu0MamrFkIIAIYGrIIYChBykMAAhBoMAJO3uwkzk8/HeXxO/JIqVu3BmtkypuDACKAoSGMAIYSpDwEIACBBiHw6qtR/r57743e3HH88dLiizdI4xqsGQggAhga0ghgKEHKQwACEEg5gf/9L0ri7E0e++8fSeAyy6S8UQ1efQQQAQwNcQQwlCDlIQABCKSUwKefRrt5L71U2nHHaIPHKquktDFNVm0EEAEMDXkEMJQg5SEAAQikjMCXX0oXXiide670859LI0ZIvXqlrBFNXl0EEAEMfQQQwFCClIcABCCQEgJO4jxmTJTEeeWVo9G/zTZLSeWp5jwEEEAEMPSRQABDCVIeAhCAQJ0TcBLnG2+MkjgvtFD02ra+fUniXOfd1mb1EEAEMDR+EcBQgpSHAAQgUKcEnMR57FjpxBOladOkU0+V9tpL6tSpTitMtQomgAAigAUHS54TEcBQgpSHAAQgUIcEJkyIkji/+Wa0q/egg6QFFqjDilKlkggggAhgSYGTKIQAhhKkPAQgAIE6IvD889KQIdLf/y4de6x01FHRtC9HYxFAABHA0IhGAEMJUh4CEIBAHRD4z3+ikT5P+Q4YEI3+LbFEHVSMKlSEAAKIAIYGFgIYSpDyEIAABGpI4L33orV9114r7btv9M7eZZetYYW4dVUIIIAIYGigIYChBCkPAQhAoAYEPvtMOvts6eKLpT59oiTOq61Wg4pwy5oQQAARwNDAQwBDCVIeAhCAQBUJeDfvRRdJ55wjbbhhlMR5vfWqWAFuVRcEEEAEMDQQEcBQgpSHAAQgUAUCM2dKV1wRjfStsEKUxHmLLapwY25RlwQQQAQwNDARwFCClIcABCBQQQJz5kg33xxt8FhwwSiJ869+RRLnCiJPxaURQAQwNFARwFCClIcABCBQAQJO4nzffVFKlylToo0e++xDEucKoE7lJRFABDA0cBHAUIKUhwAEIFBmAo89Jg0eLL32mnTSSVL//iRxLjPi1F8OAUQAQ4MYAQwlSHkIQAACZSLwwgvRa9ssgIMGSUcfLS28cJkuzmUaigACiACGBjQCGEqQ8hCAAAQCCbz+epS/709/kg49NBr9W3LJwItSvKEJIIAIYGiAI4ChBCkPAQhAoEQCkyZFu3qvuUbaay9p2DDpBz8o8WIUayoCCCACGBrwCGAoQcpDAAIQKJLA559Hefz+8Afpl7+MJHD11Yu8CKc3NQEEEAEMfQAQwFCClIcABCBQIIGvvoqkz2/wWH/9KInzBhsUWJjTIJAggAAigKEPBAIYSpDyEIAABNohMGuWdOWV0UjfMstESZy33hpsECidAAKIAJYePVFJBDCUIOUhAAEI5CHgJM633holcZ5//iiJ8047kcSZgAkngAAigKFRhACGEqQ8BCAAgSwCTuJ8//1REufPPpOGD5d+8xtpvvlABYHyEEAAEcDQSEIAQwlSHgIQgECCwBNPRGlcXnklEsDf/17q0gVEECgvAQQQAQyNKAQwlCDlIQABCEj65z+jJM6PPCIdc4w0cKC0iP/CckCgAgQQQAQwNKwQwFCClIcABJqawJtvRkmc77xTOuSQaNRvqaWaGgmNrwIBBBABDA0zBDCUIOUhAIGmJPDBB9Gu3quukvbYQzrlFGn55ZsSBY2uAQEEEAEMDTsEMJQg5SEAgaYiMHmydO650oUXSr17S6efLq2xRlMhoLF1QAABRABDwxABDCVIeQhAoCkIOInzJZdIZ50l/eQnUS6/DTdsiqbTyDokgAAigKFhiQCGEqQ8BCDQ0AScxPnqq6NULj16fJvEuUOHhm42jatzAgggAhgaoghgKEHKQwACDUnASZxvv1066SSpY8coifMuu5DEuSE7O4WNQgARwNCwRQBDCVIeAhBoKAJO4jx+fLSb9+OPo80d++1HEueG6uQGaAwCiACGhjECGEqQ8hCAQMMQ+PvfoyTOL74YCeChh0oLLtgwzaMhDUQAAWxOAdxd0gBJ60haSNL8kuYk4tr/PUPSN4r4zJW0kaSXcsQ+AthAfxBoCgQgUBqBf/0rSuL84INRAmcncu7evbRrUQoC1SCAADanAG4jaXFJXSVdmUcAt5L0cAFBiAAWAIlTIACBxiTw9tvSsGHSbbdJBx8cjfp973uN2VZa1VgEEMD0CaCFq4+kZSWdI8l/ajxK90EJobmZpIfyCODW8e/auywC2B4hfg8BCDQcgQ8/jDZ1XHGF1K9ftMN3hRUarpk0qIEJIIDpEsCfSBovaYqknvH07XaSDpS0awlx2pYAWig9NfyOpMvjkcJct0AASwBPEQhAIJ0EpkyRzjtPuuACaeutoyTOa66ZzrZQ6+YmgACmSwAfkXSbpEslfS5pMUkLS3olHhEsNprzCeAWkp6UNFuSp4tvlDRY0ugcN0AAi6XO+RCAQOoITJ8ujRoV5fBba63o3xt5ZTQHBFJKAAFMlwB+KsmvCPcmjc/idXwOPY8IlrLcOJ8AZofzUEnbSvoFApjSJ51qQwACJRH45hvpmmuiVC5LLx2J37bbksuvJJgUqisCCGC6BPB1SZtIej8hgD+Q9ICk1UqIrGIEsLekjfMJ4IABA9S5c+eWX/fu3bvlHw4IQAACaSXgJM533hklcXZev9NOk3bbLUrozAGBtBIYP368/I+PmTNnapSHtaMBpKlpbVNIvdP0Mp4RktaPU7g8JWltSe695ySdWgQE/wnz+j4L4P3xNLKne2dK8jpDM3kxHmn0buCbJXkUsCVSsg6mgIsAz6kQgEB9E7DsPfBAtJv3/fejkb/995fm919MDgg0EAFGANM1ArhAvA5v3zgGnZ/vbkl7Sfq6iLjcT9LVcX4/F8vk+vPaPwuddxd7l7HzAHoTiNccXpHn+ghgEeA5FQIQqF8CTz0VJXF+4YXo34cdRhLn+u0tahZKAAFMlwBm+nsJSSvHqV/+GxoEgeURwECAFIcABGpL4OWXoyTOHvk76ihp0CBp0UVrWyfuDoFKE0AA0ymAlY6LYq6PABZDi3MhAIG6IfDOO9EU7y23SAccEK33+/7366Z6VAQCFSWAAKZLAB9LTNtmB8amFY2U/BdHAGsEnttCAAKlEfjoI2nECGn0aGnXXaMkziutVNq1KAWBtBJAANMlgMOyAs3JoHeTdJWkQTUKQgSwRuC5LQQgUByBqVOlkSOl88+XttgiepOHc/pxQKAZCSCA6RLAXDG6uaSDJO1dowBGAGsEnttCAAKFEZgxQ7rsskj41lgjyuW3ca6kVoVdjrMg0BAEEMD0C6B38PqtILVasowANsSfAhoBgcYj4CTO110XrfNbfPFI/LbbjiTOjdfTtKgUAghg+gXQU8DnS3JC6FocCGAtqHNPCEAgLwHn8rvrrmhTx6xZURLn3XcniTMhA4EkAQQwXQL4btYmkG5xEufDJI2pUWgjgDUCz20hAIHvEnjwwSiH3//+Jw0dGu3uJYkzkQKB7xJAANMlgE7gnDy+kDRR0ls1DG4EsIbwuTUEIBAReOaZSPyee0464QTp8MOlrl2hAwEI5COAAKZLAOsxkhHAeuwV6gSBJiHw739HU7333y8deaR07LHSYos1SeNpJgQCCCCA9S+AWxbYvw8VeF65T0MAy02U60EAAu0S+O9/o/x9N90k/fa30sknSz16tFuMEyAAgZgAAlj/AjingGj1O4E7FXBeJU5BACtBlWtCAAI5CXzySZTE+fLLpZ12kk49VVrZL8bkgAAEiiKAANa/ABbVoTU4GQGsAXRuCYFmI/DFF9IFF0jnnSdtummU02+ddZqNAu2FQPkIIIAIYGg0IYChBCkPAQjkJfD119Fon4Vv1VWjXH6bbAIwCEAglAACmD4BXF2S1wUurXnrPjQ0GEosjwCWCI5iEIBAfgKzZ0vXXy8NGyZ17x6J3/bbk8SZmIFAuQgggOkSwF0l3STpZUlrxP/+saTHJW1RrqAo8joIYJHAOB0CEMhPwEmc77lHOvFEafr0KInznnuSxJmYgUC5CSCA6RLAFyRdJOnq+PVvTnZwuKSlJDECWO6ng+tBAAJVJfDww1Euv7ffjpI4H3ig1LlzVavAzSDQNAQQwHQJ4FRJlr7ZkibH7//1n8c3JS1bo6hlBLBG4LktBBqFgJM3W/yeflo6/njpiCOkbn7PEQcEIFAxAghgugTwA0krSpoeS5+XQn8u6cP4lXAVC5Q2LowA1oI694RAAxB49dUof99990Vv7jjuOGnxxRugYTQBAikggACmSwDHSfqjpLvjd/+uJukrSX7h0WY1ijcEsEbguS0E0krA7+l1EucbbpD22y+SwGWWSWtrqDcE0kkAAUyXAH4/Tvj8Xjz9e7YkC9hJkt6oUQgigDUCz20hkDYCn34a7ea99FLpV7+KkjivskraWkF9IdAYBBDAdAngfJK+qbPQQwDrrEOoDgTqjcCXX0oXXiide670859Hb/Lo1aveakl9INBcBBDAdAngR5KulXSlpFfrJFQRwDrpCKoBgXoj4CTOY8ZIp58eva7No3+b1WqxSr3BoT4QqDEBBDBdArizpAMlbSvp/yRdIem2eFNIrUIJAawVee4LgTol4CTON90UpXJZaKHoLR59+5LEuU67i2o1KQEEMF0CmAnT5ST9TtL+cVqYmyX9vkYxjADWCDy3hUC9EXAS53HjpCFDpGnTojV+e+0ldepUbzWlPhCAAAKYTgHMRO4ScVLoHeLNIbWIaASwFtS5JwTqjMCECVEuvzfeiHb1HnSQtMACdVZJqgMBCLQSQADTKYB+F/ABknaS9J94TeDFNYprBLBG4LktBOqBwMSJ0Yjfk09GefyOPDKa9uWAAATqmwACmC4BPFHSbyUtKenWWPyeqXGIIYA17gBuD4FaEPjPf6KRvrFjpQEDpBNOkJbwnEQJx8T3J2rsq2O142o7qlcPtgeXgJAiECiaAAKYLgF8IpY+y58TQNfDgQDWQy9QBwhUicB770Vr+667TvrNb6KNHssGvIjS8tfn5j6a9MUk9Vy4p+7d814ksEp9yW2amwACmC4BrMdoRQDrsVeoEwTKTOCzz6Szz5Yuvjja0XvaadKqq4bfZPgjw3XKhFNaLzR88+EautnQ8AtzBQhAoE0CCCACGPqIIIChBCkPgTIQKMc0aq5reDfvRRdJ55wjbbhhlMR5vfXKUOH4EowAlo8lV4JAMQQQQASwmHjJdS4CGEqQ8hAIJFAOicq+xp92u1fPjuvVMt27wgpREucttgisaJ7ivve418ap76p9mf6tDGKuCoHvEEAAEcDQxwIBDCVIeQgEEijHNGr2NRZ9Ybh6vDq0ZcTP7+3t0CGwkhSHAATqigACiACGBiQCGEqQ8hAIJFCOEcDn35+oba7uo89mTVKnaT118sr36qQDe5HEObBvKA6BeiWAAKZPAJ1ha3VJC2cF1UM1CjIEsEbguS0EkgRCplGdw89JnF/4cKI22n+chu/ZVxsuTzoWIgwCjUwAAUyXAP5a0rU55G8ubwJp5MeUtkGgMgT+9S/pxBOlhx6SBg6UjjlGWsRf6TggAIGGJ4AApksA/daPSyWNJg9gwz+bNBACFSPw9tvSsGHSbbdJBx8cSeDSS1fsdlwYAhCoQwIIYLoEcKqkevt+zhRwHT7YVAkCuQh89FGUxmX0aKlfP2n48GiHLwcEINB8BBDAdAngfZKGSPpHHYUqAlhHnUFVIJCLwNSp0siR0vnnS1tuKZ1xhrTmmrCCAASamQACmC4BPFnSAZKukPR+VuBeVaNARgBrBJ7bQqA9AjNmSJdfHgnfj34knXWWtPHG7ZXi9xCAQDMQQADTJYBv5QlKbwJZqUYBiwDWCDy3hUA+ArNnS9dfH63zW3TRKInzL39JLj8iBgIQ+JYAApguAazH2EUA67FXqFNTEpg7V7rnnmhTh0f//L7ePfaQOnZsShw0GgIQaIMAApgeAews6XlJ60uaUUdRjQDWUWdQleYlMGGCdMIJ0ltvSUOHSgceKHX2Xw0OCEAAAjkIIIDpEUB333uSVpQ0s46iGQGso86gKs1HYOJEacgQycmcjztOOuooqVu35uNAiyEAgeIIIIDpEsBTJX0t6YziurmiZyOAFcXLxSGQm8Drr0snnxxN+Q4YEI3+LbEEtCAAAQgURgABTJcAPiZpQ0kfSnpH0pxEN29aWJeX/SwEsOxIuSAE8hOYNCla23fNNdI++0QbPZZdFmIQgAAEiiOAAKZLAIe10b3Di+v6sp2NAJYNJReCQETA7/Ud++pY7bjajurVI3on7+TJ0tlnS3/4g7T99pEEOrULBwQgAIFSCCCA6RLAUvq40mUQwEoT5vpNRcDy1+fmPpr0xST1XLin7tjpXj12e6+WHH7rrhuldNlgg6ZCQmMhAIEKEEAA0yWAbSVzSE4HVyBU8l4SAawmbe7V8ASGPzJcp0w4pbWdCz0zXKt9MLRFALfeuuGbTwMhAIEqEUAA0yWAljwnfc51dKpSzGTfBgGsEXhu25gEnp80UVtf1Uefz56kTl/11Jlr3qtB+/RShw6N2V5aBQEI1IYAApguAdwsK0yWkXRM/Gq4y2sTQkIAawSe2zYWASdxfuABafBg6d1ZE7XR/uN0cr++Wn/ZaA0gBwQgAIFyEkAA0yWAufrer4C7TtIvyhkYRVwLASwCFqdCIBeBp5+O0ri88EKU089pXRZcEFYQgAAEKkcAAUy/AHrq93OpZSSuFgcCWAvq3LMhCLzyinTSSdJf/hIlcD722OjdvRwQgAAEKk0AAUyXAHq0L3k43/+BkraQtHalgyXP9RHAGoHntukk4F2+1z89Vm/ev6PGX9tLv/tdJIE9eqSzPdQaAhBIJwEEMF0CmL0JxMvC35S0n6QnahSCCGCNwHPb9BF4+JWJ6ntLH03rOEkLzuqpW351r3bcgDV+6etJagyB9BNAANMlgMtnhdwXkj6rcRgigDXuAG5f/wS+/FK64ALp9MeGa+bG36Z4Gb75cA3dbGj9N4AaQgACDUcAAUyXAO4p6eYcUbiHpFtqFJ0IYI3Ac9v6JzBzpjRmTPTWjpVXln47ZKJOee3bJM/37nlv65s+6r811BACEGgkAghgugRwap7NHh4FXLxGgYkA1gg8t61fArNnSzffLJ18stStmzRihNS3r1py+XkN4LjXxqnvqn2Rv/rtQmoGgYYngACmSwA95btwVlRa/F6TtGSNohUBrBF4blt/BJzL7777olQuU6dKp54q7b231KlWadrrDxE1ggAE6oQAApgOAXw3fgNIT0mTsmLH4nePJE8P1+JAAGtBnXvWlIBH8ca+OlY7rrZj6yje449Hufxe+nSifrb/WJ2y547a8Ads8KhpR3FzCEAgLwEEMB0C6F2+3vF7maRDEr3pXcEfSHpI0uwaxTkCWCPw3LY2BCx/fW7+dh3fyPXv1Q3n9tKECdJex0zUPd366INpk9Rz4Z5ijV9t+oi7QgAC7RNAANMhgJme9Ns+Hm+/W6t6BgJYVdzcrJoEco30DX9kuE6Z8O1O3k6PDtfhaw9tmfa99KV5f8cu32r2FveCAASKIYAApksA3bcrxtO9ng4+TNIqkuaT9EoxHV/GcxHAMsLkUrUjkC172SN9mdG8v700Ub++tY+mdZqkrt/01O073avt142mevOVqV2ruDMEIACB3AQQwHQJ4JaSxkp6UtJG8YaQTSSdIGmHGgU5Algj8Nw2jEBS+Hyl5LSuZc9r/JIjfYN/NlydHh/aks9vg74T9eOdx+mAX3x3Jy+7fMP6hdIQgEB1CCCA6RLAZySdHm/68Pt/F5PkV8b7bSC1epEUAlidZ5W7lJFA9khdn1X7aMxzY1rv4Klbp2nJSOEi6inddK9+8v1eOussaSN//eKAAAQgkGICCGC6BHCypMyr4pO5/zIyWItQRABrQZ17tksge4QvuWs3ex3fIesdorGvjdWkL77dvLHWUr102pUTdeGfx+n7U/rqosG91Lt3lMuPAwIQgEDaCSCA6RLAlyXtKOn1+BVwzgH4I0m3S1qrRsGIANYIPLedl0C+Kd2lui6luXPn6pPpn7TuzHXJ7Clf/8wJmvus2ldv/72XTjxRmjVLOv10qV8/qWNHiEMAAhBoHAIIYLoE8BhJe0s6Ppa+PpLOiV8Pd3GNwhIBrBF4bvstgfamdJOsMjtzc63VcyqX44+X3n5bGjZMOvBAaf75IQ0BCECg8QgggOkSQI9B+M3xR8WvhJsuabQki+HcIsJzd0kDJK0jaSFJ/ohzTsHMsbYkC+V6kjztfIWk4XmujwAWAZ5Twwnkmtqd9OWkedbwJad0c40A9uoxb4Lmf/xDGjxYeuIJ6bjjpKOOil7hxgEBCECgUQkggOkSwGQcLh3L2cwSgnOb+N3BXSVdmSWAFkK/Wu4qSadKWlXS/ZLOk3RRjnshgCV0AEWKI5CRvlWXWFWDHhjUslYvKXb5pnkz79z13XK9f/ett6ShQ6U77pAOPTSSwCVr9VLF4pBwNgQgAIEgAghgegUw0/F+N7CnhE8qIRI2i98ikhwB9FtHzpa87bF1VPAISYfHOQezb4MAlgCeIoUTSE7vLtx5YX0x06/E/u7hUb8eC/do2b2bPcKXffbHH0dr+8aMkXbfXRo+XFp++cLrxJkQgAAE0k4AAUyPADrf3wZxwmePyHk62NO4nhL+RNLqJQRjLgEcGV/rl4nrOemF30DSXdKXWfdBAEsAT5HCCWTv2F2o80L6cuaX84wAFvratS+/lEaOlM49V9p8c2nECGmtWm2fKhwBZ0IAAhAoOwEEMB0CeHD8HuBM6heP+G0raeV4mvb6rDV8hQZKLgH0lLBXP+2ZuIh3Gr8kaTlJkxDAQvFyXjkIZG/wOG+b8/Sfz/7TMtLnI9fUbvZ9Z86MRvtOO0364Q+ls8+WfuEXK3JAAAIQaFICCGA6BPDFWPSc7mUvSdfE//hVcKWsAcyEe9lGAAcMGKDOnTu3XLd3794t/3BAIJRAcu1fRvram95N3nPOHOnWW6WTTpK6dJHOPFPq25dcfqH9QnkIQCCdBMaPHy//42PmzJkaNWqU/9Oze1PT2aKwWqchrWsyAXQnSTPihNDTwpquXAK4b5xaJrkG8MjEe4ezb8kUcGAnUDwikJS91z59TckNH4VO8WZYzp0r/fWv0aaOTz6J1vjtu6/UyU8PBwQgAAEIiBHAdIwA2swtWpkj+RaQUsLY6we98cMC6PWE3kgyOx5N9PTvq/Eu4DPijR/3STqfXcCloKZMewQsfqOfG607X76zJVlzxw4dNWfuHGVv+Mjk72vves88E+Xyc2qXIUOkAQOi0T8OCEAAAhD4lgACmA4B/DremZvpuUFxWpZkLHszSKGHd/pencgd6FFQ5xHcQtKjktaUdGmcB3BKvP7wtDwXZwSwUOpNfl5G9OZqrjZffnNlj/LlwpPZ8FHICOBrr6nl7R1//nOUx+/YY6VFMy9ObHL2NB8CEIBANgEEMB0C+Eg7iZ4tb1vWKLwRwBqBT9NtLX/b3rCtPvnKG9a/PXKldcmMAFr6khs+8q39mzQpmuK97jppv/2ivH49vYCBAwIQgAAE8hJAANMhgPUcwghgPfdOHdTN8nf0+KM14Z0JOWuTTOuy8+o7a7PlN2vd5dvWho/Jk6VzzpEuukjaYYcor9+qTlvOAQEIQAAC7RJAABHAdoOknRMQwFCCDVr+O2v71FFz5nnjoFToKF8S0YwZ0iWXRDn8evWSzjpL2sAZMjkgAAEIQKBgAgggAlhwsOQ5EQEMJdhg5bPFL9m89Xusr/V6rlfwKF+y7OzZ0TSvp3j9ujbn8ttmG1K6NFj40BwIQKBKBBBABDA01BDAUIINVD6ZtDm7WYVs5MiFwildxo6NdvR69M9TvX59W0fvZeeAAAQgAIGSCCCACGBJgZMohACGEmyQ8vnW+i3VdSl5bV//9fq3+47ebBSPPSadcIL0+uvRyN9BB0lxvvEGoUYzIAABCNSGAAKIAIZGHgIYSjDl5W9+8Wad//fz9fqnr2vKzCmtefxCxO/FF6MRvwkTonQuRx8tLbRQykFRfQhAAAJ1RAABRABDwxEBDCWYsvLJN3bc+cqd8j/Zx+YrbK6R244sesTvnXeikb7bbpP694/y+i21VMoAUV0IQAACKSCAACKAoWGKAIYSTFH5lnx+12/b8saOfEcpa/38ujbv6r3sMmm33aRTT5VWWCFFYKgqBCAAgZQRQAARwNCQRQBDCaaofP97+2vMc2Ny1rijOmqn1XfSiZucWPDI37Rp0gUXSOeeK/3iF9KZZ0prr50iIFQVAhCAQEoJIIAIYGjoIoChBFNQ3uv8/L7eTh066aG3H5qnxot1WUwrLbaSjtnoGO251p4FtWbWLOmPf4ze4OGRPqd02XTTgopyEgQgAAEIlIEAAogAhoYRAhhKsM7LW/72+dM+mjN3jjzK13W+rvrymy9l8ev3435F7e51Spe774529vrwiN9OO5HLr85DgOpBAAINSAABRABDwxoBDCVY5+U3v2bzeV7j5mTOfVfrq76r9i14qtdNfOIJ6bjjpDfekE45RTrgAGn++eu88VQPAhCAQIMSQAARwNDQRgBDCdZp+cxu384dO+ukR06KRgA7dNQNO91Q8FSvm/bKK9LgwdKDD0YpXQYOXAwOGAAAIABJREFUJKVLnXY51YIABJqIAAKIAIaGOwIYSrDOymde5XbLi7e05PVbcsElNfBnA/XXt/6qg9c9uGD5mzQpGum7/vpotO/kk6Xvfa/OGkt1IAABCDQpAQQQAQwNfQQwlGCNymdG+HZcbUf95T9/0ejnR6vPD/vo1pdv/U6aF7/F4/I+lxdU06lTo129I0dK228fpXdZZZWCinISBCAAAQhUiQACiACGhhoCGEqwBuWT+fwWnG9BTf9mepu1OGS9Q3RZn8vaPGfmTGn06CiH3xprSOecI224YQ0axy0hAAEIQKBdAgggAthukLRzAgIYSrAG5dvK55ddHb/Sbfw+4/Nu+PDOXr+5w2/t6NJFOussaYcd2Nlbg27llhCAAAQKJoAAIoAFB0ueExHAUIJVKp/J5efp3HyvcHNVFuy4oKbPmV5QmpeHH4529r7/fjTyt99+UqdOVWoQt4EABCAAgZIJIIAIYMnBExdEAEMJVqG85W+vu/ZqvdOWK2w5T0LnDXpsoI+/+rhlk8d2q2ynca+NazPNy4svRrn8Hn88+veRR0pdu1ahIdwCAhCAAATKQgABRABDAwkBDCVYofLJTR5737G3XvnsldY7rbjIii3JnC197U3xJqv37rvS0KHSLbdIhxwSTfsuuWSFGsBlIQABCECgYgQQQAQwNLgQwFCCFShv+etzcx9N+mKSei7cU87l9/aUt1vvtPqSq+vGnW9sd6QvU2Dy5OitHRdfHL254/TTpRVXrEDFuSQEIAABCFSFAAKIAIYGGgIYSrAC5Yc/MlynTDil9cq7rL6L7nrlLs3VXHVQhxb5K+S9vTNmSKNGSWecIa27brSz1//mgAAEIACBdBNAABHA0AhGAEMJlql8cpPHE+88oVHPjWq98oD1Bmjj5TfWmOfHFJTMec4c6aabpJNOkhZdVDr7bGnbbdnZW6au4jIQgAAEak4AAUQAQ4MQAQwlWIby2Zs8Fu+yuD6b8VnrlVfovoLeOuqtgu70wAPRzt7PPoumevfeW+rYsaCinAQBCEAAAikhgAAigKGhigCGEixD+fVHr6/nPniu9Uo9u/XUpGmTWv//iC1GaPCmg9u8k3f2+l29Tz0VjfwNGBDl9eOAAAQgAIHGI4AAIoChUY0AhhIsQ/mtrt1qnrQuTvOy9Ypbt075tiV/fmevd/beeKN06KHRzt7FFy9DpbgEBCAAAQjULQEEEAEMDU4EMJRgGcofcu8hGv3c6NYrFfLqti+/lM47L/rHb+7wO3tXXrkMleESEIAABCBQ9wQQQAQwNEgRwFCCJZZP5vn79yf/nifR800735R3l+/s2dLVV0snnyyttFIkgBttVGIlKAYBCEAAAqkkgAAigKGBiwCGEiyhvOVvi2u20JSZU9S9c3dttfJWLWleModf93Z5n8vnubLf2Tt+fLTOb/r0aGfvzjuzs7cE/BSBAAQgkHoCCCACGBrECGAowQLKJ0f7evXopV1ui/L6ZQ6/2eOtqd/u8s2eAv7HPyLxe+65aL3f738vde5cwI05BQIQgAAEGpIAAogAhgY2AhhKsJ3ylr9NrtpE076Zpm7zddNjv3tMO9ywg97/6v3Wkkt0WUIdO3b8zqvd3nsvmuq9+WbpsMOkIUOkxRarcIW5PAQgAAEI1D0BBBABDA1SBDCUYDvlt7x2Sz389sOtZ3mH7z8//Kc+mf5J68+WXHBJ/fU3f219tdsPF+rV8taOkSOlHXeMNnjw6rYKdxSXhwAEIJAiAgggAhgarghgKMF2yi95zpL6dPqn88jewJ8N1JCHh7T+LJPn75tvpD/+URo2TFpllWiDx4YbVriCXB4CEIAABFJHAAFEAEODFgEMJdhO+a2v3VoPvv1g61lbrbCV/rbf33Tmo2e25vk7YZPB+vOfo3V+s2ZF7+z99a/Z4FHhruHyEIAABFJLAAFEAEODFwEMJZgob6kb/fxo9V+3f+ubO/yzXKN9mWITJ0qDBkne6OGRv/792eBRxi7hUhCAAAQakgACiACGBjYCGEowLp9P9LJf87Zej/X07MHP6t13o1e23X67dPjh0uDB0qKLlqkyXAYCEIAABBqaAAKIAIYGOAIYSjAu3+O8Hvpg2getV+vRrYcmDZqkXW/bVXe+cmfrz3+1yi5a59U7Wtb3eZr3jDOkFVYoUyW4DAQgAAEINAUBBBABDA10BDCUYFx+mXOX0aSvJrVerWfXnnrv2PfkNDBbXbeVPp/xubp2XExdb3tQ3uV74YVs8CgTei4DAQhAoOkIIIAIYGjQI4BFErz5xZtb3tvrt3XsudaeraUXOHUBzZw7s/X/d+7QWV8P/brl/1/9l4k66bpxmv1yX11wfC/tsQcbPIrEzukQgAAEIJAggAAigKEPBAJYBEHL31537dVaIvnO3qXOWeo7uf2e2+NjnXCCNHasdPzx0jHHSF27FnFDToUABCAAAQjkIIAAIoChDwYCWATBnuf2nOcNHj269tCkY6Np3+y1fj+as4v+e94d2nXXKJHzMssUcSNOhQAEIAABCLRBAAFEAEMfEASwCIIdhnf4ztlzh81t+VlyrV+HGYtprecf1BWn9dJPf1rEDTgVAhCAAAQgUAABBBABLCBM2jwFAczCc9i9h+mGf92gfdbcR5f0uWSe37YlgE8+KR00dKL+13WcBu/cV8fv10sdvuuLof1FeQhAAAIQgIAQQAQw9DFAABMELX+jnhvV+pMB6w2YRwK7ntFV07+Z3vr7rvN11cv7TGtZ5zdunFr+PXAg6/xCg5LyEIAABCDQNgEEEAEMfUYQwATBBU9bUDPmzGj9SZeOXTT95G+FLzvZ8+bfjNBT5w/Wbruxzi80ECkPAQhAAAKFE0AAEcDCoyX3mQhggstCZyykad9Ma/1Jt/m66csTv5yH3IhHz9TIR8doxuMHa50vBrfk89tgg9BuoDwEIAABCECgcAIIIAJYeLQggO2yWvTMRTVl5pTW87p37q7Jgye3/v9nn5UGDJA++EA65xypXz/y+bULlRMgAAEIQKDsBBBABDA0qBgBTBD86Zif6pn3n2n9yQY9NtDTBz+tTz+VhgyRrr9eGjQoWutHPr/Q0KM8BCAAAQiUSgABRABLjZ1MOQQwQTA7l9/OP9pV23x+u048Ufr5z9Uy3bvyyqHIKQ8BCEAAAhAII4AAIoBhESQ1lQB6E8fo50er/7r9NXjTwd9ht8GYDfTs+8+2/nyBTzbQMn9+WhddJPXpE4qa8hCAAAQgAIHyEEAAEcDQSGoaAczewTtiixHfkcAup3XR13Oi9/f66Kgumnb8dHXpEoqZ8hCAAAQgAIHyEUAAEcDQaGoaAex2ejd9NfurVl5dO3XVtJO+3fH7zTdSlzO6aLa+FcAFOi2gGSd9mxYmFDblIQABCEAAAuUggAAigKFx1DQC2NZbPB57TDrsMOnt1Q7T1B/nTwQdCpvyEIAABCAAgXIQQAARwNA4amoBnHTwXB17rHT33dLJJ0tHHSUd80D+V8GFwqY8BCAAAQhAoBwEEEAEMDSOmloAFz5/rrbfXjrvPGnZZUNRUh4CEIAABCBQHQIIIAIYGmmpFcD2dvRmg/nOFPAc6cHN5mrLLUMRUh4CEIAABCBQXQIIIAIYGnGpFMBCdvS2K4CS5g6bG8qP8hCAAAQgAIGqE0AAEcDQoEulAM4/fH59o29a2z6f5tOsYbNyspgzR7rySqn/f7tI87PDNzRgKA8BCEAAArUngAAigKFRmEoBbGtHbxLIyy9LBx8svfuutNZxh+m+T9jhGxowlIcABCAAgdoTQAARwNAobEgBnDFDOvNM6dxzpd//Xho+XFpoIemwe9nhGxowlIcABCAAgdoTQAARwNAobDgBnDBB6t9f6tZNGjNGWm+9UESUhwAEIAABCNQXAQQQAQyNyIYRwM+OmKvjjpNuvlk69VTpiCOk+eYLxUN5CEAAAhCAQP0RQAARwNCobBgBXPrSuS2jfZdeKq2wQigWykMAAhCAAATqlwACiACGRmdjCOAc6ZY15qpfP6lDh1AklIcABCAAAQjUNwEEEAEMjdCaCODut+2ue167R79a9Ve6td+tRbeh0F3ARV+YAhCAAAQgAIEUEEAAEcDQMK26AFr+bnvlttZ691u9X1ES+MEHUo9R80vzJfIAdphPs4bmzgMYCojyEIAABCAAgXojgAAigKExWXUBDBm9u/tu6aCDpI77ba2PFn6wte1brbCV/rbf30JZUB4CEIAABCCQCgIIIAKYK1CHSTpZ0leK+Ph9Z+Mk7Z3j5FQI4BdfSEcfLd15Z7TJ40ebT9Rm12ymL2Z+oYU7L6wJ+09Qrx69UvHQUkkIQAACEIBAKAEEEAHMJ4BbSdq0gACrewH8+9+lffaRll9euuYa6Qc/iFo18f2JGvfaOPVdtS/yV0BHcwoEIAABCDQOAQQQAWxYAZw1SzrtNOn886O8fh4B7NixcR5eWgIBCEAAAhAolQACiADmE8BB8RSwp4GflHSipLfTMgX82mvRqN/06dKNN0prr13qI0I5CEAAAhCAQOMRQAARwFxRvYakLyS9K6mHpHMl/UySNcpCmDzqagp47lxp9Ghp0KDodW5nnCF16dJ4Dy4tggAEIAABCIQQQAARwELip7OkKZL6SsreKtsigAMGDFDnzj5N6t27d8s/lTry7QL+8EPpgAOkF16Qrr1W2sqrGDkgAAEIQAACEGghMH78+JZ/fMycOVOjRo3yf3aXNLUZEfHeh/Z7PSOAO0p6IOv0uhgBvKfXXB14YCR93uW72GLtN4ozIAABCEAAAs1KgBFARgBzxf5ukh6S9Kmk78VTwL+QtJakaXUngHOk7hfNbRG/vfZq1keZdkMAAhCAAAQKJ4AAIoC5ouWeeM1fN0mfS3o0zgv4Zo6Taz8COEd654C5reldCg9/zoQABCAAAQg0JwEEEAEMjfwWAdzp6p101/53hV6roPIhbwIp6AacBAEIQAACEGhwAgggAhga4i0CqBOkfr2KeydvqTdGAEslRzkIQAACEIBARAABRABDn4VWAVQXae4wvzWusgcCWFm+XB0CEIAABBqfAAKIAIZGedUFcNtrt9UDb3+7GXmbFbbRX/f7a2g7KA8BCEAAAhBoGgIIIAIYGuxVF0BX2BL40DsPacvlt0T+QnuQ8hCAAAQg0HQEEEAEMDToayKAoZWmPAQgAAEIQKCZCSCACGBo/COAoQQpDwEIQAACEKgyAQQQAQwNOQQwlCDlIQABCEAAAlUmgAAigKEhhwCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIAIYGnIIYChBykMAAhCAAASqTAABRABDQw4BDCVIeQhAAAIQgECVCSCACGBoyCGAoQQpDwEIQAACEKgyAQQQAQwNOQQwlCDlIQABCEAAAlUmgAAigKEhhwCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIAIYGnIIYChBykMAAhCAAASqTAABRABDQw4BDCVIeQhAAAIQgECVCSCACGBoyCGAoQQpDwEIQAACEKgyAQQQAQwNOQQwlCDlIQABCEAAAlUmgAAigKEhhwCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIAIYGnIIYChBykMAAhCAAASqTAABRABDQw4BDCVIeQhAAAIQgECVCSCACGBoyCGAoQQpDwEIQAACEKgyAQQQAQwNOQQwlCDlIQABCEAAAlUmgAAigKEhhwCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIAIYGnIIYChBykMAAhCAAASqTAABRABDQ65VADt06aA5w+aEXo/yEIAABCAAAQhUmAACiACGhlirAHZfpLsmD54cej3KQwACEIAABCBQYQIIIAIYGmKtArjAggtoxtAZodejPAQgAAEIQAACFSaAACKAoSHGFHAoQcpDAAIQgAAEqkwAAUQAQ0OuVQBXXnplvX7066HXozwEIAABCEAAAhUmgAAigKEh1iqASyy6hD45/pPQ61EeAhCAAAQgAIEKE0AAEcDQEGsVwJ5L9NR7g94LvR7lIQABCEAAAhCoMAEEEAEMDbFWAdyl1y66o98dodejPAQgAAEIQAACFSaAACKAoSHWIoCLnrKoHjr4IfXq0Sv0epSHAAQgAAEIQKDCBBBABDA0xFoE8NFXH9Umq24Sei3KQwACEIAABCBQBQIIIAIYGmYtAjhlyhQtsoj/kwMCEIAABCAAgXongAAigKExigCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIAIYGnIIYChBykMAAhCAAASqTAABRABDQw4BDCVIeQhAAAIQgECVCSCACGBoyCGAoQQpDwEIQAACEKgyAQQQAQwNOQQwlCDlIQABCEAAAlUmgAAigKEhhwCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIAIYGnIIYChBykMAAhCAAASqTAABRABDQw4BDCVIeQhAAAIQgECVCSCACGBoyCGAoQQpDwEIQAACEKgyAQQQAQwNOQQwlCDlIQABCEAAAlUmgAAigKEhhwCGEqQ8BCAAAQhAoMoEEEAEMDTkEMBQgpSHAAQgAAEIVJkAAogAhoYcAhhKkPIQgAAEIACBKhNAABHA0JBDAEMJUh4CEIAABCBQZQIIIALYVsgNl3SgJEvec5IGSHopqwACWOWHlttBAAIQgAAEQgkggAhgvhg6VtJhkn4p6Q1JwyTtK2lVSV8lCiGAoU9hGcuPHz9evXv3LuMVuVSpBOiLUslVphz9URmupVyVviiFWvnLIIAIYL6oelPSSEmXxCd0kjRJ0kBJNyKA5X8Yy3HFgQMHauRIdxtHrQnQF7XugXnvT3/UT3/QF/XRFwggApgrEj2qN1nSRpKeSpwwXtKLkgbVgwCW41tkKdcopEx757T1+3y/y/Xz7J/V6g9re+0t9M9dsdcp9PxSeLvO9EXho8nl6Itimec7P1ddavFsFMqkveej2OsUen575xUT//XeF23FVnv8k79vj1muaxVSpr1ziv0bVsjnBQKIAOaK12Ul/VfS6pJeTZxwi6Spkg7OFsB3331Xiyxib6zeMWTIEI0YMSLohqVco5Ay7Z3T1u/z/S7Xz7N/1t59g2C1Ubhc9y32OoWeXwpvN5e+KPz5KkdfFMs83/mFPCuVehaS1y2USXt1KfY6hZ7f3nnFxH+990VbsdUe/9A+bY9zIXUr9m9YIc+ABXC55Zbz7bvHn+3FoGiIczs0RCvK24hiRgCXkfS/8t6eq0EAAhCAAAQgUCUCHvR5r0r3qqvbIIC5uyPXGsD3JR2dtQbQ/HpK+qKuepXKQAACEIAABCDQHoGF4/X9c9s7sRF/jwDm7lWv8/Mu4B0kWQaHStpH0mpZu4AbMSZoEwQgAAEIQAACDU4AAczfwadI6i/J3xCezZMHsMHDg+ZBAAIQgAAEINCIBBDARuxV2gQBCEAAAhCAAATaIIAAEh4QgAAEIAABCECgyQgggJXr8N0lHSVpjqSLJN1WuVtx5XYIOM4nxKl9LovXdAKtNgTWlfQHSd9IcoL1YyQ9XZuqNP1dF5V0n6SZkrrFf6eSie6bHlANACwp6bU43+xVNbg/t/yWwAxJT8b/9wFJZzYaHASwMj3qVDJ/l7S+olyLz0j6GbuFKwO7wKs6Zc9Wkn6IABZIrDKnfU/SNElfSvqxJH/IbViZW3HVAgh0jL+k+m/WK5L8nHDUjoC/HP1A0tj42ahdTbiz8wG7Lxr2QAAr07XbSNo13kTiO4yWdLukv1Xmdly1QAL7SVoZASyQVuVP87u1r5H088rfiju0Q8Did2X8/nNg1YaAXz7gDBTvxPllGQGsTT9k7ur0bh68+cp58SX9s7bVKf/dEcDyM/UV95C0dhw0/v9nSZoo6dbK3I6rFkgAASwQVBVOmz+efrxA0v1VuB+3yE3AU453SlpD0uBYAmFVGwJ3STpC0gGS3mUEsDadkLjrEpI+lbSepBviJUQ1r1Q5K4AA5qbp9XsDJK0jaSFJ/rDyWr7kMVzSgZI8dfJcVpqYbSXtLOmQuAAjgGFRG9ofmbsjgGH94NLl6AtPO97s1w3zIRfUIeXoi0wFLIL+O+a/eX4XOkdxBEL7wi+e3jyW8GEIYHHwc5wd2h/Zl3xekmf2LIQNcyCAubvSHb24pK7xN+JsATw2ThT9S0lvSPIDu68kT2l5uNhS+ISkDST5w+6peJqLN4aU9uiE9kdSAL0G8OTSqkGp+I9gyLPhvznXx7Lh0T+O0gmEPhed4w0groH/1nmWwjMXX5depaYtGdoXnmLcOmbvv1HT49HAR5qWaFjDQ/vDm6LcBx74WV7Sg/H68bBa1VlpBLDtDtlM0kM5RgBzvSpukqSBiVfFsQu4/MEe0h83SVor/qCztFveZ5e/ik1zxVL7ws/FH+Odv/7749GmnZqGWmUaWmpf+AvqefGO7AXiXcBeq8xROoFS+yJ5R795yu+YZw1g6f2QKVlqf/jZ8MzdVEnzxcu5Hg2vTn1dAQEsXgA9uucPrY3ikb3MFTyd9WK8iLe+erlxapPrYaY/atO/9EVtuOe6K31BX9QPgfqqCc9GG/2BABYvgMtK8vZw79h6NVH8lvjbwsH1Ff8NVZtcDzP9UZsupi9qw71QAeS5qE3/8FzUhnu+u9IfCGDJEcm3h5LRVaQg/VERrCVdlL4oCVtFCtEXFcFa0kXpi5KwVawQ/YEAlhxcxawfeF/S0Yk1gCXflIJ5CdAf9RMc9AV9UT8E6qcmPBf10xeuCf2BABYdkd65652/Dh7nKFs43jDgVybNjdf5HSZpB0neEOJFu/tIWi3eBVz0DSnQJgH6o34ChL6gL+qHQP3UhOeifvrCNaE/CugP1gDmhuR8cVfHsuczzMnit4WkzE6gU+I3fVgOn83KA1gAek4pggD9UQSsCp9KX1QYcBGXpy+KgFXhU+mLCgMu8vL0RwHAEMACIHEKBCAAAQhAAAIQaCQCCGAj9SZtgQAEIAABCEAAAgUQQAALgMQpEIAABCAAAQhAoJEIIICN1Ju0BQIQgAAEIAABCBRAAAEsABKnQAACEIAABCAAgUYigAA2Um/SFghAAAIQgAAEIFAAAQSwAEicAgEIQAACEIAABBqJAALYSL1JWyAAAQhAAAIQgEABBBDAAiBxCgQgAAEIQAACEGgkAghgI/UmbYEABNJM4M+SnpB0RomN6CRplqTNE28sKvFSFIMABBqdAALY6D1M+yBQPwQekbSRpK8lzZH0rqSLJY0poop+xdPpkpYrokyznIoANktP004IlIEAAlgGiFwCAhAoiMDDkh6TNDQ+ezdJt8QjVv55Icf+kk6V9INCTm7jnM6SZgZeo1zFy1UXBLBcPcJ1INAEBBDAJuhkmgiBOiGQLYCu1seSzpQ0Mq5jR0lHSzpAUk9J/5F0vKSHJP1C0gOS5pc0XdJcSf0lPSnpLUk/lPRmfJ3NJPl+88WjjcMkbR3/zNf+XNKacbmrJP1M0iaSPpR0rKS78zBbPi5zcFzPZSQ9E9cjc++22uDLZkYx3W7fa3FJ3eO6JQX5RzGXDeL2eor4OElT47otJWm0pC0kfRqL9Q1MAddJtFMNCNQ5AQSwzjuI6kGggQgkBdCjVbtLul5SH0n3x+08RdKOkvpJel3SryTdKGmtWLwsT6dljQBayixfq2QJoKXRsujpZgvgiZKGSzpXkiVtRnxN/x30ff4RS53rYLH7Mgf7jAA+LWlnSZ/F09g/j+voexXShisl/VHSwLh+rkuSz0KS/i3pJkknS1pU0q2xuO4U1+uvkr6RtKckt8Est4+F8NEGihuaAgEIVIAAAlgBqFwSAhDIScCCs2EsXgvHI3hDJJ2XOHuyJE8Ne6Qvc1h0vH5wRDx6VqoAHphj7aBHDi1jmY0XXWPxcz09spd9ZATQ0uoROR+WNY8oevOFN3EU0oYrJJmB10NmjqQAWuoulNQjFkSf8xNJz0v6fjyy+b94FPPl+AIe0fwnI4A8fRCAQCEEEMBCKHEOBCBQDgJJwekm6QJJK0jaLpacpSV9EE9xeiTNh/9GeRr3WkmHBQrgNvE0crItFkALpaeBM4fv7elijyDmE0DLVka8fM778eihyxTSBgvnslkXT/Lx1LBF+KeJcyyanv71zzyC+fdYIr+KzzHTLxDAcoQq14BA4xNAABu/j2khBOqFQPYaQG9+eCUe6fJuYP9/j6T1lvR4nkr/Jh6tS24C8Rq6TyStI+nFuNxe8ZRocgp4K0mbZl23VAHMNwLoUcP22pBrGtvVSvLZI+bidZAZGfYI4HPxqKCl2LuoPTXOCGC9RDj1gECKCCCAKeosqgqBlBPItQnEMuQp4JXi0StvBvGGjN/Fa+AWlLR+PKrmDSEexbsnHj3z+rvM4fWC98Vr6jxNe3s8ZVopAfy/eITOsueRTG8g8aigZe38ON1Ndhs8Suh6FiKAnh62HHtTh9cUeg2g1wNOkZRcA+idzPvEI6XXxOspvSmENYApf1ioPgQqTQABrDRhrg8BCGQIeHrUI3uZNDD+uacyX5I3t1nwAAABPklEQVR0p6STYpHxVK932XqK1JsjvO5tUCxE3jxiKbIIuuyhcSqZjSVdFk8pex2czxmVtQkk1wigN484r2ByCnh2fP22poAPknRMvFnk2bi+b8QN9d/VttqQTwCz+awey6UF2LueLbjeEW0J9OEp88slbRnvAjY/txsB5JmDAATaJYAAtouIEyAAAQi0Esi14xg8EIAABFJHAAFMXZdRYQhAoIYEMruAkzkHa1gdbg0BCECgNAIIYGncKAUBCDQnAUYAm7PfaTUEGo4AAthwXUqDIAABCEAAAhCAQNsEEEAiBAIQgAAEIAABCDQZAQSwyTqc5kIAAhCAAAQgAAEEkBiAAAQgAAEIQAACTUYAAWyyDqe5EIAABCAAAQhAAAEkBiAAAQhAAAIQgECTEUAAm6zDaS4EIAABCEAAAhD4f8TNHtAPdNQvAAAAAElFTkSuQmCC\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x869f6b0>"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fig, axes = plt.subplots()\n",
"T=np.r_[1:100001]\n",
"#sT=gum.par[1] - gum.par[0]*log(-log(1-1./T));\n",
"sT = gum.isf(1./T)\n",
"plt.semilogx(T,sT)\n",
"plt.hold(True)\n",
"N=np.r_[1:len(Hs)+1]; \n",
"Nmax=max(N);\n",
"plt.plot(Nmax/N, sorted(Hs, reverse=True),'.')\n",
"plt.title('Return values in the Gumbel model')\n",
"plt.xlabel('Return period')\n",
"plt.ylabel('Return value') \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Section 5.2 Generalized Pareto and Extreme Value distributions\n",
"----------------------------------------------------------\n",
"Section 5.2.1 Generalized Extreme Value distribution\n",
"-------------------------------------------------\n",
"\n",
"Empirical distribution of significant wave-height with estimated Generalized Extreme Value distribution"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCbxV4/rHv80alDkyk4xxQy73GhIJDaKUEhmS4YQG89Rg1mAqYxkqNJjqFMJ18cc1RCgzIVEydUql0/T/PHutnd3pDHufd++91tr7934+5yPnrHdY3/fZp1/P+z7PUwU1ERABERABERABERCBvCJQJa/eVi8rAiIgAiIgAiIgAiKABKCMQAREQAREQAREQATyjIAEYJ5tuF5XBERABERABERABCQAZQMiIAIiIAIiIAIikGcEJADzbMP1uiIgAiIgAiIgAiIgASgbEAEREAEREAEREIE8IyABmGcbrtcVAREQAREQAREQAQlA2YAIiIAIiIAIiIAI5BkBCcA823C9rgiIgAiIgAiIgAhIAMoGREAEREAEREAERCDPCEgA5tmG63VFQAREQAREQAREQAJQNiACIiACIiACIiACeUZAAjDPNlyvKwIiIAIiIAIiIAISgLIBERABERABERABEcgzAhKAebbhel0REAEREAEREAERkACUDYiACIiACIiACIhAnhGQAMyzDdfrioAIiIAIiIAIiIAEoGxABERABERABERABPKMgARgnm24XlcEREAEREAEREAEJABlAyIgAiIgAiIgAiKQZwQkAPNsw/W6IiACIiACIiACIiABKBsQAREQAREQAREQgTwjIAGYZxuu1xUBERABERABERABCUDZgAiIgAiIgAiIgAjkGQEJwDzbcL2uCIiACIiACIiACEgAygZEQAREQAREQAREIM8ISADm2YbrdUVABERABERABERAAlA2IAIiIAIiIAIiIAJ5RkACMM82XK8rAiIgAiIgAiIgAhKAsgEREIGSBHoAD5eBZRGwWZaRDQCuA6olMe8RwH+BFsDrSTyfyiM7At8CZwBjKujYAegL7AFsDCwEZgL3AdP9vvG1lhxqLXAO8FAqiyvj2VeBNUDLFMc6AdgFuD3FfnpcBEQgIgQkACOyUVqmCGSRgAlAEx+dgB9LzLsK+CCLa7GpGgHbAe8mMW89YC/gU+DPJJ5P5ZFkBeBFwB3AKGAysBTYFWgDfAlckSAAXwEuBGaUWMg3wG+pLK6MZ00Mm6BMVQDaPwCOAnZIwxo0hAiIQAgJSACGcFO0JBEImEBcAO4GzAl4LclOXxWw32erk+1QieeSFYDfA+/5Arq8aeIewKMBE4KZaBKAmaCqMUUgBwhIAObAJuoVRCDNBJIVgHYUap7CfwN9gOOAZb736xbgWOAmoInvkTuvhPfQjiftWHcIcCNggtOOWO24d1LCOw30v2ciL97sWNPGXgKcC2wPHAhsUsYR8IlAf2A//0j0c+B6YKo/YAFwKrA7YPPEf/5cwpzJCkBbkx0R25iZEoDx9zfe5wOb+6LTvI8fJUxamgC0/bjVPyav5T9vjONH0+b9Mxswz2H874jv/CPhNJuahhMBEQiKgARgUOQ1rwiEl0BcANr9tZIeQBMeJgysxe8KfuULnv8BJ/uC7DZfEN7gH4GayLPjWTsKtWNkayZObI6/ALvn94svZuyo1I4sX/OfK+0OoK3jJ8COSu241Y5Z7Y6dHf+aN+3IhDuAdsR6J/A08Jh/NLy/32eEP4etz45nbTwTpe18AWei9kX/mWQF4H+Ag/13siNg41Nai3sAj/FZxJ8xvvZ+5TX7+TzAvI22dhNyJmhNCJqQtruaccaJR8DbAB8DRcC1wGL/PW0Nxt1E4M7A3b6gNg7298SKEsIyvNarlYmACCRFQAIwKUx6SATyikB5QSDmMWvv04g/Z0LCPHjWTDyZMDNPnAmRuf73TUg863ud/i9BnBzuiyU7MrVm3rdP/KAJE0jWyhOAFqhQnLA71idRAFoAht1jNGFj4jSZZr8XbR3m/TMPm3kPrSUrAO29zYPZ1BdPdpfvJT+wxv4bb3EBmOhps5+ZsKvo7p0JwF/950xAx9dnYvNmn5l9r6QHcChgXkLzdJq3Nc48fmfSvKjWdAcwGUvRMyIQYQISgBHePC1dBDJEIO4BtEjWkkEg5lmKewXjzx0EvJ+wljeB+r4Ain/bRNEXQHfgcf+bJk7M27RTifcYDFwK1Pa/X5YAtOPnniX6lhSArX0hl+jJKw3bAcAg3+u1ZcLRpx0Fm1cxLrCSjQK23612NG6eNfMGHgpsBFzjH13beHEBaEe4cQFs3zdBO7uCvTUBaMfMdgyf2Czy2QShzWutpAB8x/fmmfBObMbYhLwJdwuekQDM0IdLw4pAWAhIAIZlJ7QOEQgPgWTvAJb1nIkO8wQmioy498wEWzy9iT1XB/hniVe3u3N3AVv7x8JlCUDzOppoSWwlBWA3YKwvRs3LVVqzCONZvufRjpPNa2nH1HZ8bUfU5mW0lqwHsLQ57F3MC2njbeUfwboEgZgAtKPfy0tMZp5HE6x7lyEAzUNoUdxdSvSze5T3+GL8BwnA8HwYtRIRyBQBCcBMkdW4IhBdAtkUgKV5AO0u2yVJeABNoFnASHkC0DxhLwDmCUw8fk3sY6L0fj/VzPyEH1iQih3FpkMA2rB2F9EEpgleS/viKgAr6wE0D2H8eD3+uhYEYt5JeQCj+7nVykUgJQISgCnh0sMikBcEsikAzUv4L8COJq3F7wD+7N8XtO+V5QFMRgBa4IndSSzvDqDdibOEx3GPo81pkbJ2F9G8YakKQBtnQSmWYh4287SZJ9Hu+cW9la0qkQYmfgfQxlruz2VH6RbIYtHRJuislTwCtuCci0vcz4wzt+hlO863ZgmrOwJ2HK4mAiKQgwQkAHNwU/VKIuBIIB7cYUETJlRKNruvZgIkHUfAFoxgEaYmWCwK+AI/fYxFAccreaQqAEtWAokfKT/jRwGb0PmHL5xG+kemH/oibJifeNrWYzkFTRylKgAtOONl/+6h3Rm0+5AWYWvibwJgx9LWXD2AJk7tuNoCO+x+od1htCotJl7LiwK2d7Wf2zsaC2NuIvT4BC9pXBQbO/NWmtewonuJjman7iIgAtkkIAFYOm27H2N5zewvOUsfMTGbm6K5RCBgAnFhV9YyzCv0ewUC0IRT4jGjeaoseCSxxFn8rqB5pSxytTFg+ebsXt+TCZPHAxSqJ3zPxJl5AO1nia3kHcD4z07yA0v2BVYCn/lpU+J5/qzqiQWfmBfNUsHYMbQFjth4iQLQ3uHMCkrB9fLFlOUcbOgLSfPMWfCL/T6Jp8Fx9QDaHUhLf2MizdK/WKUUO2a2+4zxZozt95hV9Yg3C8ixPICWKsfSx5ggNI6JR+R2N/NBX4zbsbClm4lzCNg8Nb0IiEA6CEgAbkjR/rVu+cwsHYLxMW+HRfHZv5TVREAE0kegtGCR9I2e2yOZqCvtCDy331pvJwIikDYCEoAborSjEPMG2HGNNbscbpF1dqSjJgIikD4CEoCVZykBWHl26ikCIpCQ60ow/iZwCmDHRFf537KSVlZhwO7uqImACKSPgAnAkkfF6Rs9t0cq6wg8t99abycCIpA2ArnoAbT7e3Ynxu7fWARgjVLKKtllaUv9YMe9lsDWnreIP2uWNsLuC1ndUmvyAKbN3DSQCIiACIiACIhAGAjkogC0I1yLhLNLzKNKEYBWYaC3f8HbLnvb5efT/cg5K/tkotAqGTT3vROWnsLSVOgOYBgsVmsQAREQAREQARFwJpCLAjAOJR5hV9IDaFF8w4F4Efh47dJ+fooI659sFLDxayRx6GyHGkAEREAEREAEsk3AaoVbnlCrx513Ld8EoHn3LP/VIQmJZ23TLUmspU6w6gOptG3LyJOWyhh6VgREQAREQAREIBgCVgqyZM3zYFaS5VnzTQDaRlvi1D39wvRx3OOBxYDl70qlmaAs+uGHH6hf3/4YbPvoI+jcGRaUUoOgGivZhEVszQK2YT6N+IlGzGcHvmd3vqQJX1CPP/mOnZhJM96jOTM4kI/Yj+JYjlmvNWgAw4bByZYiOGTtqquu4qabrAiCWtAEtBdB78D682s/wrMf2otw7MXixYvZfvvtY3+t+X//h2NhWVxFvgnAdHsAYwKwqKgoFALQ7GbmTCgshIULYfx4MF3auDG8VFYV1HXGtjYmDPdhNs15j4N5m3/yTkw0vs3BTKd17OsD9mdtLHATqlWD886DEfHD9CwabmlT9evXj+HD7XRfLWgC2ougd2D9+bUf4dkP7UU49sIEYAPzaEgAhmND0ryKVO4AWgH4vgl3AJNdSkwAFhQU0K5dO1q3tnrz4WxPPOF57szev/0W5s2DHXaAbywMpsy2ll2Yw1H8Jyb/7L+rqE4h7ZhIZ17maFbFgqw9MXj99XDllcG9v36xBse+5Mzai/Dsha1E+xGe/dBeBL8X06dPp7CwkJEjrRKkPIDB70j6VmDuKVMlJgCfB+ySp+XMKvYveto9P4sCttqcFhByHdAdsJqkFgWcSgudBzCVxcefNXFo4u3772HZMqhdG5bHy8snDFiNVTHP4Ik8Q2cmUodlPM1JPEFXXqXFOs/gP/8Jb79dmZW49bEPdZhFuNvbRau39iJc+6X9CM9+aC/CsRfyAHqlznKtxQvZx6N67B3tz1b3Ml5c3oqgW6UPE4dW6DwxD2AqPHJCAJb1wjffDIMGwYoVGz5RhTUxMdiFCXTlCRZTn1H05BHO4Ge2jnWoUsW7KzhBKbRTsSk9KwIiIAIikGECEoC5KQAzbDbrDR+ZI+B0QOndG+67D1abPzWh1aCYE5jMOTxIC17lWTownH68Eyuh7DWLzQjyeDgd768xREAEREAEok9AR8DeHuaiBzCb1pnTHsDyQFqwSffu8Omn6z+1M3MoYGRMDM6iKUO5hCm0Zw2WbtGLUpZHMJsmqrlEQAREQARKEpAHUALQ9VORtwIwEZzdITz9dFi16u/v1qcoJgIv5k6WUYfruTZ2VzAuBAsKwhM97GoE6i8CIiACIhAtAhKAEoCuFisBmEDQvIK9esEMu1Xpt+qs5DTGci3Xs4JaDOY6JtAlJgS32w5++MF1C9RfBERABERABFIjIAEoAZiaxWz4dF7dAUwFVpcuMHHi+kKwB49yDTewnNqx/1oEsZmgjoVTIatnRUAEREAEXAjoDqBHT3cAXawI5AGsgJ95BQ87DJYu9R60gJEzeZhBDOAbdqU/w9YFi+y1F4wbB82auW2KeouACIiACIhAeQTkAZQAdP2ESAAmSdCE4P77//1wXf7kUobEBOA02nAlN/Mtu8Qe2HVX+PrrJAfWYyIgAiIgAiKQIgEJQAnAFE1mg8clAFMk2LChV6Yu3rbhp9i9wG48zjD6czNXspw6sR9/8IG8gSni1eMiIAIiIAJJEJAAlABMwkzKfUR3ACtBsLQE0834gHu4gIb8HIsctnJzZp5BVRWpxGupiwiIgAiIQAQI6A6gt0m6A+hmrPIAuvHj4IPhnXfixrgmdj/wVi7nbQ6OCcE57Br7oQJFHEGruwiIgAiIwDoC8gBKALp+HCQAXQn6/ROF4Gb8xk1cFUsfY/+9jctYSU023RR+/z1NE2oYERABERCBvCUgASgB6Gr8EoCuBBP6W0Lpbt3+/kZz3o3VF7Z2NqOZQfPYn5VEOo3QNZQIiIAI5CEBCUAJQFezlwB0JVhK/2OOgZde8n5gaWMu59ZYlPBIChjAoFiQiJJIZwC8hhQBERCBPCEgASgB6GrqCgJxJVhO/+23h3nzvAf25NOYN3ArFsZKzL3KkToSziB7DS0CIiACuUpAQSDezioIxM3C5QF041dh7969YeRI77GqrKaAkdzI1YzhdC7jNpZRVwEiFVLUAyIgAiIgAokE5AGUAHT9REgAuhJMsn9i/sCdmcOj9IiljDmdMbFKItWqwdix0LVrkgPqMREQAREQgbwlIAEoAehq/BKArgRT6N+0Kcye/bc3sB/DYyXlhtMvlkzaIoVvugmuvDKFQfWoCIiACIhA3hGQAJQAdDV6CUBXgin279IFJk78u9M+zGIsp7GGqrG0MZ+yt6KEU2Sqx0VABEQg3whIAEoAutq8BKArwUr0t7rCvXrBjBle55qsiEUHW+Lo6xjM7fRll12rqp5wJdiqiwiIgAjkAwEJQAlAVztXFLArQYf+JgQPOADWrvUGOYS3YsEh37NjzBv4W81GPPKI7gU6IFZXERABEcg5AooC9rZUUcBupi0PoBu/tPSuXx+WLPGGqscSRtCbNkyLlZWbSjv22QdmzUrLVBpEBERABEQgBwjIAygB6GrGEoCuBNPUPzFAxIbsxmPcwwWxaGFLF7OCjZQuJk2sNYwIiIAIRJ2ABKAEoKsNSwC6Ekxj/8ScgTbsLnzD43RjI/6iK0/wGXtRty48+CB07bAcatdO4+waSgREQAREICoEJAAlAF1tVQLQlWCa+1s94fPOg8WLvYGrszKWIuZC7sbSxjzIORzO64yrcjpfXDOWowcfnuYVaDgREAEREIGwE5AAlAB0tVEJQFeCGepvQvDMM2HFCm+Clvwnli7mfxxCTx6kO49xC1cwbos+HDRtIM0OqpGhlWhYERABERCBsBGQAJQAdLVJCUBXghnun3gsvAW/8BBn0ZRZdGYiS6kbOyIupiZ1n3mMvTo0yfBqNLwIiIAIiEAYCEgASgC62qEEoCvBLPQ3b2D//jB/vk22lv4Mi1UQuYqbuI9zuYmr6cUDLLxrArteeHwWVqQpREAEREAEgiQgASgB6Gp/ygPoSjCL/S1vYNu28NNPXs7ACXThXQ7ibEZzAO/zKXvx3Afb0KxZFhelqURABERABLJKQHkAPdzKA+hmdvIAuvELpPfQgX/y/KB3+Ij9Yomj9+Dz2JHw+xxIjRrwzjtIBAayM5pUBERABLJDQB5ACUBXS5MAdCUYRP833mB16+O4dNkg7uBiLmMI13J9LF+g5Q60j8XOO8ONN6qKSBDbozlFQAREINMEJAAlAF1tTALQlWBQ/WfMYOVx7Xn0t7acv3YkB/M24zmFN/k35/Agi2kQW9mwaxfRr9Nc2HffoFaqeUVABERABNJMQAJQAtDVpCQAXQkG2X/ePJYd3Y7/fbEZJzOJ6qyKpYrZlW9i//8hzTiRp5lY6zSq3zgY+vaFqlWDXLHmFgEREAERSAMBCUAJQFczkgB0JRh0/z//ZFHbU1n0v884qPgNfmWLWHTwldwcSxz9AL04hP/xVO3ubPOvXeDRR2HbbYNeteYXAREQARFwICABKAHoYD6xrhKArgTD0H/1ahg/npl7dqNtuyqxKOEW/Dd2JPwCx3I+98a8g6PqXMRJ1adQffQD0KlTGFauNYiACIiACFSCgASgBGAlzGa9LhKArgRD2L9xY/jmG9iGn5hIZzZmCR15im9oHDsafrT2udSe9hQceWQIV68liYAIiIAIVERAAlACsCIbqejnEoAVEYroz+MVRKyW8K1czlk8RA8eZQonsCUL6XzBlowYqSxKEd1eLVsERCDPCUgASgC6fgQkAF0Jhri/VRDp1s1bYCcmMZqzY2liruEGVlOdVq3gxRdD/AJamgiIgAiIQKkEJAAlAF0/GhKArgTD3H/BAn48vicn/Hgv7y/cnj34jKfoyAK2pitPsJCG7LMPzJoV5pfQ2kRABERABEoSkACUAHT9VEgAuhIMc//iYigogGnTuGrvydz8cnPq8iej6Mlh/F+seshb/Jt//hPefht4+WWYNw969IAqOh4O89ZqbSIgAvlNQAJQAtD1E6BawK4Ew95/7VoYPhwGDODp9o/QZVInVq1aS29GcAtXxFLG3MVFdO5chUP+fIkz/tOdb7Y9nBqj72ffFpuF/e20PhEQARHIOwKqBextudwUbqYvD6Abv+j0njIFTj0VrryShndcycJfqnAIb8WihN/gUHoyiqXUiwWI2F3BZsxk1GFjOOHOlqorHJ1d1kpFQATyhIA8gBKArqYuAehKMEr9P/wQ2rfny4GPs+c5h7JmDTHBZ/kCt2ZBLFXM5+wJrKUXDzCM/jxQ5TxWDbqRy66tFaU31VpFQAREIKcJSABKALoauASgK8Go9V+6FOrWZeZM6NULPvgAqqxZxWCuix0LmydwEp1jb9WEL7iX8zmThzm4845MmBC1l9V6RUAERCA3CUgASgC6WrYEoCvBiPc3IVhYCLvtBp/ePJn+s3rwCGdwGbexkprrvZ3SxkR8s7V8ERCBnCEgASgB6GrMEoCuBHOsf+Ed37DbFR35bUXdWNWQ+TRa7w07d0aewBzbc72OCIhA9AhIAEoAulqtBKArwVzp/913sNNO3tssW8ac4y6g7uvP04UJvEaL9d5yr71g3Jg1NDugaq68vd5DBERABCJFQAJQAtDVYCUAXQnmQn/LF7j77rEAEYYNg+rVYe1a5l7zAJvf1I+BDGQol6wXdH8HfTj+qL/YbfKw2J1CNREQAREQgewRkACUAHS1NglAV4K50v/bb6FtW9hxRxg/HuqbacAX496j9mkdeY/msWCQJXjf35HvGMtp7LfNL9QvfAwOOCBXSOg9REAERCD0BCQAJQBdjVQC0JVgLvUvKoIuXbxqIFOnrjsS/viVX1nSvhtbLP2ek3iaT9k79tZVWc2VVW5hcK0bqTrgOrj0UqhWLZeI6F1EQAREIJQEJAAlAF0NUwLQlWCu9V+1Cvr29SI9Jk+GQw7x3nD1ap5qOpBjPrsjliNwPF3XvfnRDd5j1F+nUnvnbdjqrWdh001zjYreRwREQARCRUACUALQ1SAlAF0J5mr/kSNhv/3g0EPXe8OJPabRakz32PHvJQxdlyrGagybMNzyhj5cebWCQ3LVLPReIiAC4SAgASgBWJYlWom81yBW1uFe4LoyHpQADMdnOVKrGHDaHDqM68hyasdSxfzEtuvWX6UKPPYYfPmlF1PSrFmkXk2LFQEREIFIEJAAlAAsz1Dtb+WjgMYSgJH4PEdqkUMGL2f7Wwo4cvk0TmE8r3LkuvXXqRPLJEONGjBoUKz8sJoIiIAIiEAaCUgASgBWZE49gF0lACvCpJ9XisDatTzXcRRHPNOHQQxgCJeulyomPmbv4+dw97Pbe4pQTQREQAREwJmABKAEYEVGJAFYESH9PDUCo0bBQQfBvvuu6/dwwQyOvKcTM2lGnwaP8NPSBlgsSbw9Qwf+sdVP7PR/46BJk9Tm09MiIAIiIAIbEJAAzB0B2AUoAPYD6gHmKllTYscHAT0hlojtff/5T/xnzgNsjEXAiQn9JAD1iyO9BG66CW65BZ54Atq0WTf2x//9jTq9TmW74jmM6/AU59zVdN3PavEXN3I1vWs+QK0Rw6FnT7DLgmoiIAIiIAKVIiABmDsCsBWwGVAHGFWKALSztd7AccA3wADgdMDcKcvKsR4TgHYH8NoynlEQSKU+enneaeJEOOssuP566NPnbzG3ejUMHgzDh3NZg/sY8uOp64E6ipd5sm4PNjm6OZgncYst8hykXl8EREAEKkdAAjB3BGDcAo4AXilFAM4BhgMj/Act2+5PQD/gsTLM53HA3DAmKk00mnhcXeJZCcDKffbU6913vTDfE06AESPWv9/33HOs6tqdUUu7cdHq4etSxRi0zfiNqdueS9MVM7j9vC9pe1JNRQrLmkRABEQgRQISgPkhAE2k2dGuZeR9J8FGpgOzIFaktbItJgALCgqoWbNmbIzWrVvHvtREoEICc+dCu3Zesuj77lv/8W+/ZdnxHfnup1ocs3gSP7Jdws/X0qTK13y5djdq14bjj4err1bKmAp56wEREIG8JjB9+nTsy1pxcTEjLV8rNAAW5yOYXLtIVJoH0P7mnOvn9PsiYZPH+5vey2Hj5QF0gKeuwJIl8McfsMMOG+L46y/o3Zslj0/hhOXj+S8ty0RWvbp3eqyUMbIqERABEaiYgDyA8gCmxQNYVFRE/fqmBdVEIAMERo9mVcFF3LvFtQxYejl/LCr7320WYyIRmIE90JAiIAI5RUACMD8EoBltaXcA5wN9y7kDmIyxrzsCbteunY5+kyGmZypH4P33oVMnFu20H/cf8ihrNm4QiyFZvnz94W6teiWHHgYDV1/HmRfUpuvfJYcrN696iYAIiECOEbBj4MLCQh0B58i+WvFUS/1iR8DPAxv7ARvFwFr/np9FAVveDRODVtqtO7B7BVHAFeHREXBFhPTzyhGwRIBVq3pf8fb779C9O3z1FTz1FDNX70vHjvDtt38/0pSPGUVPNuUPzuV+Wt3UUh7Byu2AeomACOQwAXkAc8cDaOlaHvbFnpmsnZGZ8LP6Wq/7NjwQONcXhzNK5AGsrJlLAFaWnPqVT2DAAPj4Yxg3DurW/fvZNWvghhtgyBC4915m7t2dI47wrhJas7uAa1atpjcjuIFrmMTJFF0zlL7XW5YkNREQAREQASMgAZg7AjAoi9YRcFDkc31e8/aZe6+oCAoLYVsrTZ3QXngBTj0VunThwx63c9/DtWK5oS2W5KqrvOd24Hvu4QIOZAYPdHuNNU32iGWeadYs1+Hp/URABESgbAI6AvbY5FoUcLZtXh7AbBPPp/mKi+H888HE3pQpcMAB67/9d9/F7gXG3H6TJsH228d+fvPNf4tAc4Qfz3NMpzWrqR7LHf3iixKB+WRGelcREIENCcgDKAHo+rmQAHQlqP7lE1i7FoYNg0GDYMwYODGxUiFgqWIuugieecYrL3f00aWIwPWnaNkS/vMfgRcBERCB/CUgASgB6Gr9EoCuBNU/OQKTJ8Mjj8DTT5deB/jhh+HCCz3X3xVXxIJHzBM4cKAlPN1wiscfRxHCyZHXUyIgAjlIQAJQAtDVrHUH0JWg+qePwMyZ3r3BffbxvIWbbIJ96/774YEHwJyJ8WanyTNGvuMdLV97LWy0UfrWoZFEQAREIMQEdAfQ2xzdAXQzUnkA3fipd7oJWFWR006Dzz+PpYphv/1iMxx0ELz33t+T7bUXfDJhNpx5phdoYgqxRYt0r0bjiYAIiEAoCcgDKAHoapgSgK4E1T/9BCxVjJUEueUWuOceOP10zkRBeg4AACAASURBVDvP8wQmtljVkMtWw113eV7AU07x0stsumn616QRRUAERCBEBCQAJQBdzVEC0JWg+rsRWLQIfvoJzKVXslm4b7ducPLJfHjGHTQ/tBaWXzreataEt9/2IoI/mfYdNfucz05/zKTG+HHrgkncFqfeIiACIhBOAhKAEoCulqk7gK4E1d+NwNixXhTws88Sywhdsn3/vZcqpkoVRraYRO8hO673hAUXt2sHxxwDv/66ll71nqDP6Kbs2bmp27rUWwREQARCSkB3AL2N0R1ANwOVB9CNn3qng8Do0Z4ItEjgzp03HHHFCujTByZOZGLbMZw2vk0sMrhRI5g6Fe67z7sCGG8WIPLgg8oVmI6t0RgiIALhJCAPoASgq2VKALoSVP/0EJg2zbvDZ2XiLr649DEt98u55/JzpwIe2OEG2naoHjv+Le1+YI0aXurBK69Mz/I0igiIgAiEiYAEoASgqz1KALoSVP/0EXj3XWjTBs44A269NZYLcINm0cEnn+wFelji6G23jaWKad0afvllw8djgSImAs1laAElVpmkVq30rVkjiYAIiEAABCQAJQBdzU4C0JWg+qeXwNdfw2OPwXXXlZ4w2mZbtgx69/bOf+3ZVq3W5Qu00+TEQBGrMme6stmW8+CEE2DpUu98+LDD0rtujSYCIiACWSQgASgB6GpuCgJxJaj+wRGIVw/p398TjNWqlagj7C1t3Z3ApqvgzjthwAA49VTPy7jJJsGtXzOLgAiIQCUIKAjEg6YgkEoYT0IXeQDd+Kl30ARmzfKOhLfdFuyOYMOGsXLCJWsFb7GFV2Tk3HOhWYM53sXB2bNh5MgN6xMH/U6aXwREQAQqICAPoASg64dEAtCVoPoHT2DJEk/Z/fe/sXuBMxu0KPNOYL16XsRw11PWwrhx8PPPcMklwb+DViACIiACKRCQAJQATMFcSn1UAtCVoPpnh8CcOV7C6EMPLX0+KxRsyq5fP7j6ama2voL7H6zK009vGByy8cbw2mtKE5OdjdMsIiACmSAgASgB6GpXEoCuBNU/OwQs4vecc2DMGDjppLLntJBgOxLebTcYO5aZP2wRKyFn+aYtdiTerGzw8OESgdnZPM0iAiKQbgISgBKArjYlAehKUP2zR2DKFK80nNUItijgslpREZx9NrzzDkyYAP/6VyxjjJ0S22mxZZexcsPr3QtsVmKwV1+FQw5Rypjs7a5mEgERSIGABKAEYArmUuqjigJ2Jaj+2SXwv/95td/MG2hJ/qqUEQdmR8J33+0lARw8OHY0PPPDKrETYtN2iW3dvcCu/ndXr4Z//xsWL/ZSxtif1URABEQgJAQUBexthKKA3QxSHkA3fuodBIEvvoBjj4XDD4dHHilbBNrazAto5eX+8Y/YszO/25S2bb3rhImtdm14882EI+GVK+H2271yIj16EMsv06BBEG+rOUVABERgAwLyAEoAun4sJABdCap/MAQWLIBXXvGOhCtqv//uVRf56CMYP56ZGx0Suxdo2tHKDMebHRFbXeH12jffeGfHn33mpYzp0KGi2fRzERABEcg4AQlACUBXI5MAdCWo/tEgYEfClgT66qvh2mvhssvo1LkqTz319/I7dYJJk0p5Hev76KPw0ENegkErNKwmAiIgAgESkACUAHQ1PwlAV4LqHy0CM2ZAly7QuDGzLh3D4Sc3ZNEi7xXq1IFRo6Br/C5gyTczIVjWncNoUdBqRUAEIk5AAlAC0NWEJQBdCap/9AhYlLAd6772GrcfMI5+045a9w7KERi97dSKRSAfCUgASgC62r0EoCtB9Q8XgTfeALvz1759+esyb96oUay+uC9DV/Xl6pUDWE31WB+L+7DSwkm3L7+EunW9cnRqIiACIpAFAhKAEoCuZiYB6EpQ/cNFIJ4rcNgwz8tXUZs9m1+O6sJnCzenG4/zI9vFsstY9pikm3W48UavCslll4G5EdVEQAREIIMEJAAlAF3NS3kAXQmqf/gIWD4XyxVYUODlAKzg3t5NVy+l4U0X0YFnOYNHeG3jdqmXirN0M5deCpaiZuBA6NlTwSLhswytSARygoDyAHrbqDyAbuYsD6AbP/UOKwFL22K5Ao86iljOl3Iid616nKUUbPfn49zHeYzmbJZeeyvXDK4Zezv7uTkW7VS5WcmKIYnvb8fK9uDll3vftSTShx0WVkJalwiIQIQJyAMoAehqvhKArgTVP7wELNvzccdBkyZl5Hf5e+nxUnENl3zF0zW6sMtu1ag7ZTwzF++6LnF0o0YwdWoS9YMtibSFEx94IDRvHl4+WpkIiEBkCUgASgC6Gq8EoCtB9Q83AYv4nT07qXJu5ukrLIT2rVfwj8cvi2WKfvKYBzj5yS7r3rHUZNHhJqDViYAI5CABCUAJQFezlgB0Jaj+uUvg2WdZ1eMsHl/RifNW3MFy6rDlljB9ehJewPKoKJ9g7tqM3kwEskRAAlAC0NXUJABdCap/bhOYO5dvDurK8p+L6MIEPmXv1NPEJBJaswZatPCCVC68EDbaKLf56e1EQAQyQkACUALQ1bAkAF0Jqn/OExg/diXfnj6AC7mLy6oM5bBx59K1m0P82csvexHDf/zhpY+x0iNVq+Y8R72gCIhA+ghIAEoAulqTBKArQfWPJoGxY2HFCi9dSwXNEkNbZpcjeYWxnMYvOx3Ei51H0eqUzcuPCi5vXPMEjhsH11wDW20FQ4bAkUdWtBT9XAREQARiBCQAJQBdPwoSgK4E1T+aBF5/HU44Afr08cp+lJMr0IJD2rYFCypustmv3PHn2TQtfp8+m4/j6pdaVF4EGrnly+Guu2DoUPjwQ1UTiaY1adUikHUCEoASgK5GJwHoSlD9o0vgk0+8XIH2de+9UN0rBVdai0cImwi8//61nM+9DOFSXm/Wh+PeGeie9Pmvv3QfMLqWpJWLQNYJSABKALoanQSgK0H1jzaBefO8XIE77QTjx3s1fctpJgSPOQZ+/RX2ZjaTqp3CDnttTN3Jj8POO0ebhVYvAiIQGQISgBKArsYqAehKUP2jT2DRIjjxRNhsM3jqqQrf57zzvOIi1jZiOa83v4TmX4yD++7zAjrS2eyI2ITpaaeV66FM55QaSwREIPwEJAAlAF2tVLWAXQmqf24QsICQH3+EXXap8H2sakj37mBxHBa8a7EcXetMhrPP9i4L3n03bLxxheMk9cDnn3s16Ox4+rbboE2bCmsbJzWuHhIBEYgsAdUC9rbOIRdDZPc+nQuXBzCdNDVWXhCIRwXHX9b+3+JIYgLSPHU//ACmEq0UXDqalZYzl6NNtM8+XsRwusZOx/o0hgiIQNYJyAMoAehqdBKArgTVP+8IJEYFb7EFdOwIViKuWTNg9WrPU3f99XDttXDZZVCtWnoYWVm7W2+FO+/0XJDxc+j0jK5RREAEIkRAAlAC0NVcJQBdCap/XhIwEWj6y64MWkBIo0YwdWpCibj33vNEWsOGMGaMF2SSrmaBKx984B0Nq4mACOQlAQlACUBXw5cAdCWo/rlNYPBg76Lf1VdvcPeuzKPgOJGlS6F/f+84eORIOPVU3d/LbWvR24lA1ghIAEoAuhqbBKArQfXPbQIff+yliTFv24gR6x3nlnsUnEhlyhQvQOToo+Gee2DTTTPHzPIJ1qyp0nKZI6yRRSAUBCQAJQBdDVEC0JWg+uc+gblzvWTRTZrA449DnTrr3rnCo+D4kwsWeCJw1izvSLhFi8xws2iUF17wAkWOOCIzc2hUERCBwAlIAEoAuhqhBKArQfXPDwK//w4dOsCqVVBYCJtvvu69KzwKjj+5dq1XccQCQy64wAsUqVUrvfyWLYPbb/eCRUxk2n/33DO9c2g0ERCBwAlIAEoAuhqhBKArQfXPHwJ2vGqBHTVqePf6/JZ4FFyvHjzwQAX5oD/7zLsPaILwscdgr73Sz3DhQi9tzEMPQY8eMHAgbL11+ufRiCIgAoEQkACUAHQ1PAlAV4Lqn18ELM3LkiWwySbrvbfpQUsFYz/aICK4NELFxV7yQEsabV66goLMBIh88QVceaVXv85KmKiJgAjkBAEJQAlAV0OWAHQlqP4igOdsMydbvK1LDl0Rndde85JH7703PPxw5rx05m2sorz5FW2Hfi4CUSEgASgB6GqrEoCuBNVfBIDEY+CkPICJ1KwWsd0JfOklGDUKTjhBTEVABESgXAISgBKA5RnI/sBdwCrAShH0B94t0UECUL9kRCAdBFatYubH1SicWoXddoMvv/Qyx8SqgyTbLMLYhGDnzl4gR926yfas/HNDh0LLlrC//bpQEwERiAoBCUAJwPJstSGwFPgT2Bt4CPinBGBUPt5aZ6QI9OoVE2wzuw+jbfuq/PRTkncBS77k99/D6afD/PkwbhwcdFDmMNix8FVXeaXlrJ7djTfCDjtkbj6NLAIikDYCEoASgMkaUxPgEeBfEoDJItNzIpACgW++ieUKnF3rAA745FGK8dK7JH0XMHEqCzSxPH5WhcRSxlgVEos8zlQz0XnNNV5duwsv9IJGSgS5ZGpqjSsCIlA5AhKAEoDJWI79zTENuB14XgIwGWR6RgQqQWDhQpa2bMuHX9Xj+OJnqNeowfr1gVMd0i4WmjfQKntY8mgLFMlks/rCl14KH30EVst4550zOZvGFgERcCAgAZhbArALUADsB9QDTLitKWEfg4CegN3de99//hP/GcvxYGMsAk70v1cVsIRl0/0j4JLmpjuADh9AdRWBDQj8+Sc/HdqZ5V//yKzbnqfDBY3cIK1YAQMGeOlizJ3Yt+965ejcBi+ltx0Lv/46HH64oobTDlcDikD6CEgA5pYAbAVsBlidqVGlCMBLgd7AccA3wADgdMCOd5eVYlaW82GsLxTN+1dakwBM3+dRI4lALBq4Q5uVDJzfC+rU5R9vjEgtEKQshm+95SV0btgQHnkEGjcWbREQgTwmIAGYWwIwbspWwPOVUgTgHGA4MMJ/0CJ7fwL6AY+V8jkwb+BoP/LXxGCiZzD+uARgHv8C0aunn8Df+QDXUoOVXDOoZizfc1ra0qVwxRWeALztNi+xc7Zz+91yC5x4Iuy+e1peSYOIgAhUjoAEYP4IQBNqJuAOAd5JMBc72p0FXFI5E4odJRcVFBRQ0+4ZAa1bt459qYmACKROwCkfYLLT/ec/cOaZsMceMHo0bL99sj3dnrPjaEtTY+Xr2rXzgkWUPsaNqXqLQAoEpk+fjn1ZKy4uZuTIkfbHBsDiFIbJmUdzMbV9aR7A7YC5gFV1/yJh98b7G9+rkjsqD2AlwambCJRFwERgYaGnkVLKA5gK0qIi7z7g00/DXXd51USy5Q2cOxeGDfOSVh92mJdKxv6brflT4aRnRSBHCcgDKA9gWjyARUVF1K9vWlBNBEQgowSsWHC9esz8sApTplQiWXTJxZnSPOccOOQQuO8+745gttovv3g5BM0L8cYbmY9SztZ7aR4RiAABCcD8EYBmjqXdAZwP9C3jDmAyJrzuCLhdu3Y6+k2GmJ4RARcCHTrwa9Wt2P/te/hhfnVSLhtX2ty//eYdzb7yiicCLalzNtuyZVDHYtfUREAEskHAjoELCwt1BJwN2GXMsRVwoB+5+zswA1josB5L2WKpX+wI2PL1bQystqN+YK1/z8+igNv4YtCulncH7DZ2aVHAySxFR8DJUNIzIpAuAj/8wMIDjuPtX3bhFMaznDqVSxZd2nomTPCE4LHHwogRsOmm6Vq1xhEBEQgZAXkAg/EAWo49q6trVTWs1FqRfwnT/gn8NjAUeKYSttIDeNgXe9bd7jea8DsSeN0fbyBwri8OTXBa3sB4HsBKTOkFgegIuDLo1EcEKkfg49f+YNkxJ7C2eCXnbD2Vsc9tnr67glZCzo6E7SKi3dE7zrJGBdTWrPHE6PHHe2vKRm3jgF5V04pAtglIAGZfAFp6FhNNll7lBeDbhE3fyc/Rd7YfmNEy2wZRifl0BFwJaOoiAq4EPnz7L2qddSo7L/+Ejf77Auxkvz7S1CyZ88MPe0EiXbp4ARsb24FClpsJwMmT4aab4Ntv4eKLoXdveSazvA2aLvcI6AjY29NsRwGfBDydhDmZl7AyXsAkhk7rI/IAphWnBhOBFAhYzd+LLoLttvNSqqS7WY1fSxdj4styBx5ht0sCaCZIX34Zbr4ZZsyA88+HSy6BLbcMYDGaUgRyg4A8gNkXgLlhOX+/hQRgru2o3idaBEwcxf4pu+G/Ze0U1zlS2LxwFqVrAtOOYc0bV7t2cIzefhssmfTw4bDLLsGtQzOLQMQJSAAGLwCtWnpXYFv/Pt5uQHXgs4jYlgRgRDZKy8wvAmlPKP3ll14puT/+gDFj4KCD8guo3lYEcoyABGCwAtDu+E0B3vIrdNglm8OAK/xI3SiYm+4ARmGXtMa8I/B3STnv1e3/nUvK2ZHzkCEweDD06+cN6FcACg3gX3+FLbYIzXK0EBEIIwHdAfQPTgLcnPeAG4DJwB+A5VywsxXL17dNgOtKZWp5AFOhpWdFIEsEZk//kWPP3IYf51dNT67AxHV//DGcfrr3HbubFxbBZcfhVmPYSttZdZGWLVVdJEv2pmmiR0AewGA9gFabdxPfbCwP4Gb+n+NiMAoWJQEYhV3SGvOLgAmhFi34ve723HPgQ7Q5sWb60sTESRYXezV9zzgjXCLr99/h7ru98naNG3tC0GrqVbU0qWoiIAJxAhKAwQrAT4H2wNdAXADuAUwCmkbETCUAI7JRWmaeEfj5Zy9/3mabefV+g0jjEiTyP/+EBx6AoUM9BiZW99svyBVpbhEIFQEJwGAFoCWDPhW43Bd9bYHbgCeAu0NlKWUvRncAI7JRWmYeErC6wZ06gdXcfe452Hrr/IOwYgU8+qhX3m7zzfPv/fXGIlAKAd0B9KBkOw9g4lbYmYSVY+vjJ4deDtznl2zzczuE3nblAQz9FmmBeU3AjmrPPhvefBNeeAGaNMlrHHp5ERABj4A8gMEKwEQ7tLrAdifQ6vZGqUkARmm3tNb8JGC5/CyPnx2BdutWaQZpyStY6dkz1NFE8YEHhieQJUOvqWFFoCQBCcDwCMCoWqcEYFR3TusWgRQIpD2vYApzZ+xRC5axI3ITgb16Qf/+XlUVNRHIAwISgMEKQEv6fBdgGVVLFtqsGRH7kwCMyEZpmSLgQiAjeQVdFpTOvlZezsrMTZsG3bvD5ZfDbvbrWU0EcpeABGCwAvBtYB7wOLC0hJlNj4jZKQgkIhulZYqAC4Gc9ACWBPLZZ3DrrTB+PEyeDK1buyBTXxEILQEFgXhbE2QQyGI/99+q0FpJxQuTB7BiRnpCBMJLwJI67703VKtW4RpNBBYWemn1mjWr8PHoPvD997DVVsHWPI4uPa08IgTkAQxWAFoJuC7ADxGxl9KWKQEY4c3T0vOcgAWH/POfXuUMy5NX2woRqYmACOQDAQnAYAXgPsDNwFhgQQmDez0iBigBGJGN0jJFoFQCVjnDXHpVqsCUKV7SZLWyCVgd5D33hJNOSsprKpQiEFYCEoDBCkDz/o0G6pQwEMsBWPF5TDisSgIwHPugVYhA5QksXw5du8KXX3oRsTvsUPmxcr3nPffALbd43tIrroBTT4WaUYnZy/XN0fulQkACMFgBOBcYCjxSShDI6lQ2MsBnJQADhK+pRSBtBFatgt69YepUeP55aBqVapRpI5D8QPE6yCYETTz37evVRN500+TH0JMiEDABCcBgBWAR0CBgG3CdXlHArgTVXwTCQsDy4lk6lMMPh0MPDcuqwruO1au9Ost33OHlELRjYTURiAABRQF7mxRkFPB4v+bvmxGwl7KWKA9ghDdPSxcBEUgTARPPdo9STQQiQkAewGAFoCWB7g48BcwvYTNWIzgKTQIwCrukNYqACARDYPZsqFVLiaWDoa9ZyyEgARisAPxvGXtjQSAtI2K5EoAR2SgtUwRcCeRkLWBXKBX1HzIErrkGjjgCLrgA2raF6tUr6qWfi0DGCUgABisAM77BWZhAAjALkDWFCARN4OuR0znqxpbMnV+DRo28WJGcTgadTuALFsDo0XD//WBHxVZ3uGdP2GabdM6isUQgJQISgOEQgI0Ay7tgpeGi1iQAo7ZjWq8IpEqguJj5Ox7MRwu2ohNPspR6WG3g66JyUSXV983U8xY0YvWG770X6tWDSZMyNZPGFYEKCUgABisAt/DrAB8NLAfqAp2Bw4ALK9y9cDwgARiOfdAqRCCjBD76v8UsPvokNiou4uyG03j0+a3kAXQhbml3dBTsQlB9HQlIAAYrAB8DrA7wVcBswJJIbQW8ATRx3NtsdZcAzBZpzSMCARP48N1iqvU8gyZ/vEutV6fDrrsGvKIcnH7FCvj0U52v5+DWhu2VJACDFYBW/m0XYBnwOxCvwbQI2CRsxlLGepQHMCIbpWWKQFoIWP3gyy6DMWO8qiH775+WYTWIT+C996BFC9h3Xy9o5OSTYaONhEcE0kpAeQA9nEEmbpoHNAb+ShCAJqhmATumdbczN5g8gJljq5FFILwErCTascfCLvZvWLW0Eigq8gS23RVcuBDOOgvOPVce17RC1mDyAAYrAO0I2ETg5QkCcLAfEHJGRMxTAjAiG6VlioAIRIyARQy/9hqY2J4+HebNg403jthLaLlhJSABGKwAtOjf/wD1gK2B74AawCGlJIYOqw1JAIZ1Z7QuERCB3CGwZInEX+7sZijeRAIwWAFoRlATaAPsBtidwKeBP0NhHcktQgIwOU56SgREQAQyQ2DOHNh5Z5WiywzdnB1VAjA4AWjC7xmgo38HMKpGJgEY1Z3TukUg3QTsyNISHnfvrsCFdLMtazzLLbjbblC7thc0ctppUN9+LauJQPkEJACDE4C2MwsBSwW/OsKGKgEY4c3T0kUgrQSWLoWjjvLE37PPwiZRSWaQVgrZH2z5cpg40bsr+MknngA//3zYb7/sr0UzRoaABGCwAvAe4B3g0chYzIYLlQCM8OZp6SKQdgLLlkGXLvDdd/Dcc7D99mmfQgOWQ+D9973o4ccfh7FjoaMdMqmJwIYEJACDFYATgA7ADOBbYE3CFp0eEYOVAIzIRmmZIpA1AlbloqDAK3v2/PPQtGnWptZEPoE//oBataBOHSERgVIJSAAGKwAfLscuz4yIzUoARmSjtEwRyCoBuw94440wdCi89BI0b57V6TVZOQQWLfIiiqtVE6Y8JiABGKwAzAXTkwDMhV3UO4hApgg8+SS0agUNGmRqBo2bKoGLLoIpU7zk0mefDVtZBVK1fCMgARisAJzmp4ApaXdTgPYRMUYJwIhslJYpAiIgAjECK1dCYaEXNPLGG949QQsa+fe/lUomj0xEAjBYAbgYKC1eP7EucNjNUbWAw75DWp8IiIAIlEXgiy/gvvvgkUfgxBPhoYfEKg8IqBawt8lB1AJu6dtXIdC2xBp2B65QLeA8+ATqFUVABEQgLAQsenvBAtV2Dst+ZGEd8gAGIwDj0b5rS4g/+//5wFXAmCzsfzqm0BFwOihqDBGIGIGZM71rZO3bQ7NmKS6+uBiuvhquuAI23zzFzno86wTWrPGOjS2qWC1nCEgABiMA4wY0G9gn4tYkARjxDdTyRSBVAib+2raFn36CRo1g6tQURaAlLu7WDT77DF54AXbaKdUl6PlsEnjtNTj5ZOjZ0wsc2XHHbM6uuTJEQAIwWAFYw67jlrK39k/i3zK05+keVgIw3UQ1ngiEnMCgQTBw4N+LtP+/7roUF20lzC6+GJ56yksYnbIbMcX59HjlCZgH8JVXvKARU/utW3tl5+y/VatWflz1DJSABGCwAvBdvxbwDwlWcBAwSXcAA/1caHIREIFyCDh7AONjW67A227z8gVauphjjhH3sBOYNw8efBAeeADq1oWPP1ay6bDvWRnrkwAMVgDeC3QCTgVeBAqAW4ABwPCI2JQ8gBHZKC1TBNJJwESgZRJp1y4NzrvHHoNeveDFF71UJGrhJ2B3Av/3Pzj88PCvVSsslYAEYLAC0DblNGAEMAuwizCnAG9EyF4lACO0WVqqCISWwIwZ8I9/QPXqoV2iFpYCgV9+gS23TKGDHs02AQnA4AXgLoAlhG4MPAn0AIqzbQgO80kAOsBTVxEQARHIOQJ2tL/HHl7UcPfuXsDPdtvl3GtG/YUkAIMVgO2AR4HRwF3AE8BGwEnA3IgYlwRgRDZKyxQBERCBrBFYsgSefRbGjfMCSA47zBODVnVEZQGztg3lTSQBGKwALALO9j1/tk929jEM6AZExXcuARiKj7IWIQIiIAIhJTB/Powf74lBSydj+R/VAicgARisANwD+LwUK+gCTAjcOpJbgARgcpz0lAiIQKoEFi3yvEZ33gm77ppqbz0fRgKW/qdatTCuLO/WJAEYrACMG5yVo9varwISFiPcxL+baPcR6wJ3Ao+VsjgJwLDsmNYhArlGwPLP9e8PFiU8bRo0b55rb6j3iRP4/HN4/HFP8DdpIi5ZICABGKwArAPcAZwOrPaF1gl+dZAbs7D/FU1hGT6tbJ2JvM+AbSUAK0Kmn4uACKSdwO23e5mmJ0yA449P+/AaMAQEZs/2sotboul994XTToMuXWCrrUKwuNxcggRgsAJwJLAbMMj3tpnXbXvg+ZCViDPhNwo4TgIwN38R6K1EIPQEJk6EM8+Eu+6Cs+3qtFpOEvjjDy8puN0XtDyDRx/t3R+sb34ItXQSkAAMVgBaBZD9gN/9r838zf0D2DSdG13JsbYAngL2Aq70RWDJoXQEXEm46iYCIpAiAatJ26GDVzrukENS7KzHI0fg++89j6CVnatiN6XU0klAAjBYAbgAsORIqxIEYG3gG6BRihttgSNWScQEZT3A6gzb8W1iM09jT/9I933/+U/8B84DbIxFwIkl+pkQtOdtbPt5YpMATHGj9LgIiIADgQULYGu7Mq2W9wR+B+Y6QgAAIABJREFU/x023VTisJKGIAEYrAAsBF7ycwCaF9A8gOcDrfxcgKlsq/Wx/nav0I5rSwrAS4He/jGuCUwrN2d3D+227bJSJqqZkJDaxpwJ7AuskABMZVv0rAiIgAiIQEYIHHEEWMWReLLpnayYllqyBCQAgxWAlgbmdeAr4EDg/4BmgJ1tfJnsJpZ47gjglVIE4By/vrCVnbNmcfg/Af3KiO61cLuhvneylh8FPKmUNckDWMmNUjcREAEREAEHAkuXwpQp3n1BqyNt1wJMDFquQfMMqpVLQAIwWAFom7O574mzYBA7En4YsLuBlW2lCUATaXZ0a8LynYSBp/s1iC+p7GT+cXJRQUEBNWua0xBat24d+1ITAREQgawRUH65rKEO5UQLF3pR4iYGDz7Yyx2ptgGB6dOnY1/WiouLGTnSYlFpACzOR1y5drO0NAFo9wyttNyewBcJmzze3/ReDhsvD6ADPHUVARFIA4Fff4V//xseeUTBIWnAGfkhVq2C6lZYS608AvIABu8BNMF2ELBxiY26rpKmG4gHsKioiPoK06/klqmbCIiAMwHzZFx+uZc0+gRLp6omAiUImJfwjju8Y+K9LLlFfjcJwGAF4GDAiiJ+CCxNMMW1QMtKmmYqdwDnA33LuAOY7PQxD6AdAbdr105Hv8lS03MiIALpJ/DMM14C4SFD4HyLp1MTgQQCc+bAVVfB5Mmw556eEOzaFbbZJu8w2TFwYWGhjoAD3HkTYJZy5e00rMGqdljkrwlASyRtHkWrLmKl3ExQ2j0/iwJuA1hAiHkYuwO7lxEFnOySdAScLCk9JwIikHkCb70F7dpBr15w001KEZJ54tGbYfFiePpp776g5ZZs2RIeegi2La3YVfReL9kVywMYrAfwV2BLX6Alu2dlPdfDDyAxsWfN7jban4/0I43tewOBc31xOKNEHsDKzi8BWFly6icCIpAZAl98AW3behUkDjggM3No1Nwg8OOPYFVmCgrAD2TMjRer+C0kAIMVgHf74qy09CoV7144ntARcDj2QasQARFIJFBcnHd/ocsAMkDAvIUbb5xznmQdAf/tKcuA1SQ15BNAB+BNPydfYidL0hyFJg9gFHZJaxQBERABEUidQOfO8NFH3n3BU0+FXXZJfYyQ9pAHMFgPoOX8K6udGVKbKbksCcCIbJSWKQIiIAIikCKB5cu9esR2X/D55+HAAz0x2KULbG5pfKPbJACDFYDRtZy/Vy4BmAu7qHcQgXwhYPVjN7OqmWoikCIByzc5aZInBi1gxO4ORrhJAAYvAK0k2z+B7YEJwEZ+8EbJmrthNTPdAQzrzmhdIiAC6xNYsMBL//Hgg9Cpk+iIQOUJRPyOqe4AelsfZCWQnYGpgP3XInbrAif59wJ1B7DyH031FAEREIHSCdhxnuV+u/566NNHlEQgvQT++gsGD4ZTToF9903v2GkeTR7AYAWgib9ZwDWApYSx6tX2NRPYKc17nanhdAScKbIaVwREIDME3n0X2rSBHj3gttugqqVRVROBNBAwL3P//mBJyRs39u4LdusG21lF1nA1CcBgBeAvQCNgJfA7EL+YUuQXZw6XtZS+GgnAKOyS1igCIrA+ga+/hmOPhebNvRrCtWqJkAikj8CSJfDss959wVdegcMO8/JSbrVV+uZwHEkCMFgB+B2wn5VSSxCAlhj6HSAqsea6A+j4IVR3ERCBgAhYbVhL7XH33bDHHgEtQtPmPIH58z2P4HnnhcbbrDuAntUFeQfwXv/e33nAPL8qyH1+abaLI/KhkAcwIhulZYqACIiACIhAnIA8gMEKwAbAs8Ahfh1fi/ydDbTyvYJRsFQJwCjsktYoAiIgAiIgAgkEJACDFYDxrdgfaAwsAN4A1kTISiUAI7RZWqoIiIAIiIAIGAEJwHAIwChbowRglHdPaxcBESidwKxZ0LSp6IhAzhKQAAxWAD5UhmX9BXwPTALmhNz6FAQS8g3S8kRABFIkMG8e7LUXXHstXHIJVAnyqniKa9fjIpAEAQWBeJCC/GRb5Y8TgY8AiwjeEfgHUOhHAe8JtAdeTGI/g3pEHsCgyGteERCBzBH44AM4/njo3Bluvx2qWdEmNRHIHQLyAAYrAB8E/gckegLPBP4FnAP0BboBzUNschKAId4cLU0ERMCBwLffwnHHwd57e/ncatd2GExdRSBcBCQAgxWAlvx5ixJBH/bPTEsQbUmhrS7wzyFPCi0BGK7PtFYjAiKQTgK//Qbt23vHwFOmwGbxfP3pnERjiUD2CUgABisA7Z5fR2BGwtYfCDwN7OALwPl+ebjsW0dyM0oAJsdJT4mACESVwPLlcOmlcM01sPXWUX0LrVsE1iMgARisALwC6A+M9oM+7A7gWcDtwM1AZ/8o2PIChrVJAIZ1Z7QuERABERABESiDgARgsALQtuV04DRgW+BHYCwwJkIWqyjgCG2WlioCIiACIiACigL2bCDIKOBcsEJ5AHNhF/UOIiACIiACeUVAHsDsC8A6fq3figwt2ecqGifTP5cAzDRhjS8CIhBOAmvWwDPPwEknKVdgOHdIqyqHgARg9gWgJXa2O352zFtUyt6YoLJUMBf7uQDDbsASgGHfIa1PBEQgMwR++AEOPhjatYMRI6B69czMo1FFIAMEJACzLwB3BW4DWgPvA7N9IdgA2BuwKGBL/HxJBKqAmElKAGbgg6khRUAEIkJg7lwvYfROO8H48VCvXkQWrmXmOwEJwOwLwLjNmRDs4As+SyxlOQFNED4LfB0hw5QAjNBmaakiIAIZILBoEXTsCPbfqVNhm20yMImGFIH0EpAADE4ApncngxtNAjA49ppZBEQgLASKi+Gcc+DVV+G//4VddgnLyrQOESiVgASgBKDrR0MC0JWg+ouACOQGgbVrYdQo6N5dZeNyY0dz+i0kACUAXQ1ceQBdCaq/CIiACIiACGSRgPIAerCVB9DN6OQBdOOn3iIgAiIgAiKQdQLyAEoAuhqdBKArQfUXAREQAREQgSwTkACUAHQ1OQlAV4LqLwIikNsE/vwTrrsOBg6E+vYrU00EgicgARicAGwMnAg0B+JpYGb4aWC+DN40kl6BBGDSqPSgCIhAXhJYsgQ6dYKff4Zp02BbK/2uJgLBEpAAzL4ANOE3HDgaeA/4OCERdFPgIOBloF9E8gFKAAb7GdbsIiACUSCwciWcdx68+CI89xw0tV/3aiIQHAEJwOwLwO+AYcBYYFEpW28VQXoAfVQKLrgPhmYWAREQgbQTsDQxN94IQ4bAk09Cq1Zpn0IDikCyBCQAsy8A6wDLktigZJ9LYqiMPiIPYEbxanAREIGcIzB2rOcNfO01ONCqf6qJQPYJSABmXwAm7nINYGUp27458Fv2zaFSM0oAVgqbOomACOQ1gVmzYJ99oIoykeW1HQT48hKAwQrAd4GOwA8JNmB3ACcBOwZoF6lMLQGYCi09KwIiIAIiIAIhICABGKwAvBfoBJwKvAgUALcAA/xAkRCYSIVLkACsEJEeEAEREAEREIFwEZAADFYAmjWcBowAZgE7AacAb4TLTMpdjQRghDZLSxUBEQg5AQsU0bFwyDcpN5YnARi8ANwFmAZYepgn/Qjg4giZl2oBR2iztFQREIEQE/j9dzjuOLjvPmjWLMQL1dKiTkC1gL0dDPIGbjvgUWA0cBfwBLARcBIwNyIGJg9gRDZKyxQBEQg5AfP+3XablypmwgRPDKqJQIYIyAMYrAAsAs72PX+2xdX9HIHdgC0ztOfpHlYCMN1ENZ4IiEB+E3jiCejZE+64A845J79Z6O0zRkACMFgBuAfweSm72wWYkLFdT+/AEoDp5anRREAERABefx06dIDzz4cbbtC9QNlE2glIAAYrANO+oQEMKAEYAHRNKQIikAcEPv8cjj8eHn4YjjgiD15Yr5hNAhKA2ReA/f37fqUlgI7vvSWIvsg/Ds6mPVRmLgnAylBTHxEQARFIhsCyZVDHCkOpiUB6CUgAZl8A3g+0AcYB04HZgN0FtBrAewOt/dQwFhl8bnq3OyOjSQBmBKsGFQEREAEREIHMEZAAzL4AtN38B9AHOAEwARVvS4DJwO3Ah5nb9rSOLAGYVpwaTAREQAREQAQyT0ACMBgBGN/ZqsBuwGbA78BXwJrMb3taZ5AATCtODSYCIiACSRD47TfY3MrGq4lA5QhIAAYrACu3a+HqJQEYrv3QakRABHKdwJ9/QuPGMGCAFyWsJgKVICABGIwAfBVokbBfVgv4sUrsXxi6SACGYRe0BhEQgfwi8NZb0L49nHUW3HILVLUDJTURSJ6ABGAwAnBxibt/dvxrx8BRbBKAUdw1rVkERCD6BL76yqsWcsAB8OijsJEVklITgeQISACGQwD+AWya3JZl/aktgC+BS4CHSpldAjDrW6IJRUAERMAn8MsvniewWjWYPFn3AmUYSROQAAyHAAyzB9BqFO8ATJEATPpzpQdFQAREIHsEli/3SscVFMC//pW9eTVTpAlIAAYjAFcAtyZYzqXAkBKWdF0ILGtP3/P3PTBPAjAEO6IliIAIiIAIiEAaCEgABiMALQhkbTn7Zz9rmYb9dR3iab8iydnADxKArjjVXwREQAREQATCQUACMBgBmInd7wIUAPsB9QArJ1cyp+AgoKcfgPK+//wn/mLOA2yMRcCJfkUSi1S+EhggAZiJLdOYIiACIiACIhAMAQnA3BGArfxIYisaOaoUAWjHzL2B44BvfFF3OtAEWFaK+V0FHA3YcXVjYLnvDTTvZWJTEEgwn13NKgIiIAIVE3jtNTj0UC9IRE0EEghIAOaOAIxv6xHAK6UIwDnAcGCE/6D9NvgJ6JdEDkK7j6g7gPrVIQIiIAJRIrBiBTRrBnvsAePGQR3zD6iJgEdAAjA/BKB56exo9xDgnQTjnw7M8gM9KvuZiHkACwoKqFmzZmyM1q1bx77UREAEREAEAiZgJeM6dICVK6GwELbcMuAFafogCUyfPh37slZcXMzIkSPtjw1MDwa5rqDmrhLUxBmatzQP4HbAXMCier9ImHe8v+m9HNaiI2AHeOoqAiIgAhkn8NdfcMYZMGMGPPccNLGbP2r5TkAeQHkA0+IBLCoqon5904JqIiACIiACoSOwZg1ceSWMHg1Tp8LBB4duiVpQdglIAOaHADSrKu0O4HygbxJ3AMuzynVHwO3atdPRb3Y/v5pNBERABFIjYAKwRQvYddfU+unpnCJgx8CFhYU6As6RXbVK4Jb6xY6Anwc2BlbbMb+fc9BKuVkUcBtfDFpgR3dg9zKigJPFoiPgZEnpOREQAREQAREICQF5AHPHA9gDeDghwbTdbbSE0kcCr/v2NhA41xeHM0rkAaysSUoAVpac+omACIiACIhAQAQkAHNHAAZkQugIOCjymlcEREAEREAEKkFAR8AetFyLAq6EKTh1kQfQCZ86i4AIiEDABNauhaFD4fTToWHDgBej6bNFQB5ACUBXW5MAdCWo/iIgAiIQJIFVq6BHD3jrLXj+eS9xtFrOE5AAlAB0NXIJQFeC6i8CIiACQROwNDHXXgv33gvPPguHHx70ijR/hglIAEoAupqY7gC6ElR/ERABEQgLgQcegL59YdQo6No1LKvSOtJMQHcAPaC6A+hmWPIAuvFTbxEQAREIFwE7Bu7SBUwMnnJKuNam1aSNgDyAEoCuxiQB6EpQ/UVABEQgbAQ+/hh22AE22SRsK9N60kRAAlAC0NWUJABdCaq/CIiACIiACGSZgASgBKCryekOoCtB9RcBERABERCBLBLQHUAPtu4AuhmdPIBu/NRbBERABERABLJOQB5ACUBXo5MAdCWo/iIgAiIQBQKWKsaCQ84/H1q2jMKKtcZyCEgASgC6fkAkAF0Jqr8IiIAIRIXAww9D795w//3QvXtUVq11lkJAAlAC0PWDIQHoSlD9RUAERCBKBF5+GTp2hEsvhauvhiq6SRWl7YuvVQJQAtDVbhUE4kpQ/UVABEQgagRmzYLjj4fWrb3qITVqRO0N8nq9CgLxtl//dHH7GMgD6MZPvUVABEQgmgR+/BHatIEzz4SLL47mO+TxquUBlAB0NX8JQFeC6i8CIiACUSWwZAlstJE8gBHcPwlACUBXs5UAdCWo/iIgAiIgAiKQZQISgBKAriYnAehKUP1FQAREQAREIMsEJAAlAF1NTgLQlaD6i4AIiECuESgqgvr1FSEc4n2VAJQAdDVPRQG7ElR/ERABEcg1Ai1aQNOmcPvtUL16rr1d5N9HUcDeFioK2M2U5QF046feIiACIpB7BL77zosQ3mknGD8eNt44994x4m8kD6AEoKsJSwC6ElR/ERABEchFAosWwcknwy+/wNSpsN12ufiWkX0nCUAJQFfjlQB0Jaj+IiACIpCrBFauhAsugOeeg8JC2H//XH3TyL2XBKAEoKvRSgC6ElR/ERABEchlAmvXwpAhUKuWEkaHaJ8lACUAXc1RAtCVoPqLgAiIgAiIQJYJSABKALqanASgK0H1FwEREAEREIEsE5AAlAB0NTkJQFeC6i8CIiACIiACWSYgASgB6GpyygPoSlD9RUAERCBfCbz7LmyzDWy/fb4SCOS9lQfQw648gG7mJw+gGz/1FgEREIH8JXDZZTBunJcmRhHCWbUDeQAlAF0NTgLQlaD6i4AIiEC+ErAI4aFDYfBgeOwxaN8+X0lk/b0lACUAXY1OAtCVoPqLgAiIQL4TeOop6NEDbrwRLrpINYSzYA8SgBKArmYmAehKUP1FQAREQATgnXc8D6AJwdtuE5EME5AAlAB0NTEJQFeC6i8CIiACIuARsBrCX30FrVqJSIYJSABKALqamASgK0H1FwEREAEREIEsE5AAlAB0NTkJQFeC6i8CIiACIiACWSYgASgB6GpyEoCuBNVfBERABERABLJMQAJQAtDV5CQAXQmqvwiIgAiIQPkELEXMwoXQp48ihNNkKxKAEoCupiQB6EpQ/UVABERABMonYBVDLEK4Y0e4806oXl3EHAlIAEoAOpoQEoCuBNVfBERABESgYgLffw9t2sAOO8D48VDf/vpRqywBCUAJwMraTryfagG7ElR/ERABERCB5AgUFcHJJ8OCBTBtmmoIJ0dtg6dUC9hDolrAlTQgv5s8gG781FsEREAERCAVAitXQu/e8MEHYEfDVfTXeCr44s/KAygBWBm7SewjAehKUP1FQAREQARSI2A1hC0opGHD1Prp6XUEJAAlAF0/DhKArgTVXwREQAREQASyTEACUALQ1eQkAF0Jqr8IiIAIiIAIZJmABKAEoKvJSQC6ElR/ERABERCB9BCwo+Fly6Bu3fSMl8OjSABKALqatwSgK0H1FwEREAERSA+BRx6B4cNh6lQvXYxamQQkACUAXT8eEoCuBNVfBERABEQgPQQsQvjCC2HyZCgshAMPTM+4OTiKBKAEoKtZSwC6ElR/ERABERCB9BGwY2DzAg4cCGPHQocO6Rs7h0aSAJQAdDVnCUBXguovAiIgAiKQfgLPPAOnnQaDBkG/fsoXWIKwBKAEoOuHTgLQlaD6i4AIiIAIZIbAe+95AvDJJ2GjjTIzR0RHlQCUAHQ1XQlAV4LqLwIiIAIiIAJZJiABKAFYnsn9BbzlP/AScHMpD0sAZvlDq+lEQAREQAREwJWABKAEYHk2NBeoKI5eAtD1U6j+IiACIiACIpBlAhKAEoDlmdwS4D1gGXAV8LE8gFn+hGo6ERABERCB9BP46y9480046qj0jx2RESUAJQDLM9XNgd+AA4BxwJ4SgBH5ZGuZIiACIiACZRN4+21o1cpLFZOnEcISgLkjALsABcB+QD2gBrCmhPUPAnoCdmz7vv/8J/4z5wE2xiLgxFI+NR8ArXxBmPhjHQHrl6wIiIAIiED0CMyYAe3awQknwIgRUL169N7BYcUSgLkjAE2cbQbUAUaVIgAvBXoDxwHfAAOA04Em/hFvSTOyQorLfRG5I/AfoLE8gA6fNnUVAREQAREIF4G5c6FtW2jUCCZOhPrm08iPJgGYOwIwbrFHAK+UIgDnAMOBEf6D1YCfgH7AY6WYe3PgfmAxYP8ssjuAr0sA5scvBr2lCIiACOQNgcWLoUsXmDcPXnkFttwyL15dAjA/BKD9k8aOdg8B3kmw7OnALOASB2uPHQEXFBRQs2bN2DCtW7eOfamJgAiIgAiIQCQIrFoFDz0EZ58N1cw/kptt+vTp2Je14uJiRo4caX9s4Dt7cvOly3mrKjn2xqV5ALcDLKWLBXF8kfC+4/1N7+XAQHcAHeCpqwiIgAiIgAgEQUAeQHkA0+IBLCoqon4e3Z0I4sOqOUVABERABEQgXQQkAPNDAJq9lHYHcD7Qt4w7gMna2Loj4Hbt2unoN1lqek4EREAEREAEAiJgx8CFhYU6Ag6If7qnreoHftgR8PPAxsBqO+YH1vr3/CwKuI0vBq8DugO7lxEFnOz6dAScLCk9JwIiIAIiEC0CCxfCVVfBsGHQwK7K5U6TBzB3PIA9gId9sWcWancbTfgdmRC9OxA41xeHM0rkAaysVUsAVpac+omACIiACISbQGKE8NSpsKNlRcuNJgGYOwIwKIvUEXBQ5DWvCIiACIhA5glYhPBFF8HTT0NhITS3LGnRbjoC9vYv16KAs22V8gBmm7jmEwEREAERyC6BtWvhjjvg2mthzBg46aTszp+B2eQBlAB0NSsJQFeC6i8CIiACIhANApMnQ/fu8OabsO++0VhzGauUAJQAdDVgCUBXguovAiIgAiIQHQI//gjbbhud9UoAlrlXOgJ2M2PdAXTjp94iIAIiIAIikFUCugPo4ZYAdDM7eQDd+Km3CIiACIiACGSdgI6AJQBdjU4C0JWg+ouACIiACESfwPLlULt2ZN5DAlAC0NVYJQBdCaq/CIiACIhAtAksWgT77AN33RWZCGEJQAlA1w+d7gC6ElR/ERABERCB6BOIRwgPGAD9+0OV8N4w0x1Az9zCu0PR+DjIAxiNfdIqRUAEREAEMk3g/fehXTvva8QIqFEj0zNWenx5ACUAK208fkcJQFeC6i8CIiACIpA7BH74Adq2hYYNYdKk0NYQlgCUAHT90EkAuhJUfxEQAREQgdwisGSJlzDajoIPPzyU7yYBKAHoapgSgK4E1V8EREAEREAEskxAAlAC0NXkFATiSlD9RUAEREAERCCLBBQE4sFWEIib0ckD6MZPvUVABERABEQg6wTkAZQAdDU6CUBXguovAiIgAiIgAlkmIAEoAehqchKArgTVXwREQAREQASyTEACUALQ1eT+v717D73/nuMA/sQIYyRZLkutXDOMyNqyFvNLLmWRFk1JTMPaMtrcyU+MlTuZWxItWiatH5rcI9sf5A/X2M/tH/0wZC6j1/Y59dvX+d7O+5z357NzHqdWy877ch7v1+fn+ftc3h8BsFVQewIECBAg0FlAABQAW0tOAGwV1J4AAQIECHQWEAAFwNaS8xRwq6D2BAgQIECgo4CngG/B9hRwW9E5A9jmpzUBAgQIEOgu4AygANhadAJgq6D2BAgQIECgs4AAKAC2lpwA2CqoPQECBAgQ6CwgAAqArSUnALYKak+AAAECBDoLCIACYGvJCYCtgtoTIECAAIHOAgKgANhacgJgq6D2BAgQIECgs4AAKAC2lpwA2CqoPQECBAgQ6CwgAAqArSVnH8BWQe0JECBAgEBHAfsA3oJtH8C2onMGsM1PawIECBAg0F3AGUABsLXoBMBWQe0JECBAgEBnAQFQAGwtOQGwVVB7AgQIECDQWUAAFABbS04AbBXUngABAgQIdBYQAAXA1pITAFsFtSdAgAABAp0FBEABsLXkBMBWQe0JECBAgEBnAQFQAGwtOQGwVVB7AgQIECDQWUAAFABbS04AbBXUngABAgQIdBYQAAXA1pITAFsFtSdAgAABAp0FBEABsLXkBMBWQe0JECBAgEBnAQFQAGwtOQGwVVB7AgQIECDQWUAAFABbS867gFsFtSdAgAABAh0FvAv4FmzvAm4rOmcA2/y0JkCAAAEC3QWcARQAW4tOAGwV1J4AAQIECHQWEAAFwNaSEwBbBbUnQIAAAQKdBQRAAbC15ATAVkHtCRAgQIBAZwEBUABsLTkBsFVQewIECBAg0FlAABQAW0tOAGwV1J4AAQIECHQWEAAFwNaSEwBbBbUnQIAAAQKdBQRAAbC15ATAVkHtCRAgQIBAZwEBUABsLTkBsFVQewIECBAg0FlAABQAW0tOAGwV1J4AAQIECHQWEAAFwNaSEwBbBbUnQIAAAQKdBQRAAXCnkntYkkuT3DnJjUmeNufLAmDng9ZwBAgQIECgVUAAFAC3q6FjkhxK8uwkR3YoNAGw9SjUngABAgQIdBYQAAXA7UrutCQXJfl3knsl+WSSTzgD2PkINRwBAgQIEFiBgAAoAG5XVs9NclmSk5L8I8k3kpyd5GdbGjgDuIIDc9EuDx06lAMHDizaXLslCliLJWIuoSvrsQTEJXVhLZYE2diNALg+AbAC23lJHpXkbknumOSmLfXxpiQvSlKh7drh+z8evnNukurjT0meleTMJC9Nctbw39+Z5LtJPi8ANh51K2x+4YUX5rLLKrf7jC1gLcZegVuPbz2msx7WYhprIQCuTwCswFaXau+a5PI5AbAu574syVOT/CLJG5Kck+TBSf4+pxzvnuSbSR4/XAb+WpKXJ/mhADiNg3feLPzBOp21sRbTWYuaifWYznpYi2mshQC4PgFwVlGnJ7lmTgD85XBJ933DF++Q5Hf152KST29TjnUmsP57ffeLSd4253s3XwI+fPhwjjuu/tVnTIFLLrkkBw8eHHMKxh4ErMW0SsF6TGc9rMU01qIC4AknnFCTuUeSv0xjVn1ncbu+w618tHkBsJJZXdo9Jcn3jppBPeX7oySvbJjV/ZP8pqG9pgQIECBAgMA0gkf1AAAG50lEQVR4Ag9I8tvxhh9v5E0IgLW41yepff1+chT1Z4fU/+IG/vK7X5IbGvrQlAABAgQIEOgvULd71dXA//YfevwRNyEArvIM4PgraAYECBAgQIAAgX0KbEIALJJ59wD+PskFO9wDuE9KXydAgAABAgQI3DYE1iUA3n548KPuAbw6SZ3W/U+Sfw6ndus+v3oKuF7nVmHw9Umen+Qh2zwFfNtYPbMkQIAAAQIECCwgsC4B8AVJPn7Udfz6XXVN/4xhE+eieWOSlwzh8Adb9gFcgO7mJjvtLbhon9rtT6C29HndEORn615PbT9vf9349gICu+2/+cgk703y2OFBrI8Mx8wCQ2myB4Hd1qP2Rq2N7esNR7NjpR6Om+2HuochfGUPArVjRJ1seGCSvyb5epJXbXlg0LGxB8glfWUv67GRx8a6BMAl1cm+utnv3oL76tyX9yxQAfBJSZ645xa+uCyBnfbfrA3Zf5rkY0nePOy5WWfna1P1dy9rAvq5lcBu+6HW/8nVsVL7mvqsTuCtST437DJRe9N+MMnDk5w8DOnYWJ39vJ53W49qs5HHhgC4eCEusrfg4qNpuZ2AADh+bczbfqnOyr99eEp+9laeVwwbqj9o/Cmv9Qy22w+11uHJw16paw0wsR9Xb6i6bnhZwZ+TODbGXaCt6zELgBt3bAiAixWiJ4sXc1tFqwqAdY9nvdGl/vlOktck+dUqBtPnXIF5gaPeyVdbL9Xbd2afutz4rWHj1bo05rMagZ0C4B+G+6V/neRDw5uTVjMLvc4E6vJvvW70xOF/cGyMWxtb12MWADfu2BAAFyvEVe4tuNiMNrdVXVqpfRgPJ7lvkkuTPCFJ3WMz7zV/myu1ul8+L3DUKxmPTXL2UcM+dLjfrLbfr723fFYjsF0ArHui6y9I9YBcXS6utyBdnOTDq5mGXoczrlcO75X/yiDi2BivNOos39b1qNls5LEhAC5WiM4ALubWo9Wd6vV8SZ6R5Ks9BjRGnAGcVhFsFwC3zrJ2Q3hKktOmNf21mc3Tk3xquOR71VG/yhnAcZZ4u/WYN5uNODYEwMUL0d6Ci9utsuUsAD4zyexv3KscT9+ZGwDPSfKOLfcAnj9sx+QewNVWzX4C4IEkp652OhvZe+1CUO+ef86cv4g6NvqXxE7rsV0AXPtjQwBcvBDtLbi43TJb1h+w1yT5Y5Ljh0vAdUbjpCR/W+ZA+vo/gZ3236zLv/XqxXoKuJ7Cq9D3pSTv8hTwyippp/V49LD1S73/fPbE42eGPVHfv7IZbWbHtedsPfleVyG+PYegngJ2bPSrjd3Wo57Oriy0cceGANhWhKvYW7BtRpvX+gvDPX8VOI4M+z7WvoB1htZntQK77b/5iCQfGPYBrMvytR3GW1Y7pY3ufaf1qNtW6oxs3b9c+wDWQyC1NrU3o89yBSpg/yvJjUO3sz0X64GoWSB0bCzXfKfedluPujS8kceGANivCI1EgAABAgQIEJiEgAA4iWUwCQIECBAgQIBAPwEBsJ+1kQgQIECAAAECkxAQACexDCZBgAABAgQIEOgnIAD2szYSAQIECBAgQGASAgLgJJbBJAgQIECAAAEC/QQEwH7WRiJAgAABAgQITEJAAJzEMpgEAQIECBAgQKCfgADYz9pIBAgQIECAAIFJCAiAk1gGkyBAgAABAgQI9BMQAPtZG4kAAQIECBAgMAkBAXASy2ASBAgQIECAAIF+AgJgP2sjESAwfYH7JLlueDn8e4bpvjrJuUkek+TI9H+CGRIgQGB3AQFwdyPfIEBgswROSfLlJGcmuUuSq5KcPgTDzZLwawkQWFsBAXBtl9YPI0CgQeC8JBcnOSbJa5Nc3tCXpgQIEJicgAA4uSUxIQIEJiBwbJLrk9yQ5MQkN01gTqZAgACBpQkIgEuj1BEBAmskcEWSeyY5frgcfNEa/TY/hQABAhEAFQEBAgRuLXBBkvOTnJzk3km+n+SFSa4ERYAAgXUREADXZSX9DgIEliFwapKrk5yR5Nqhw7OSfDTJ45L8fBmD6IMAAQJjCwiAY6+A8QkQIECAAAECnQUEwM7ghiNAgAABAgQIjC0gAI69AsYnQIAAAQIECHQWEAA7gxuOAAECBAgQIDC2gAA49goYnwABAgQIECDQWUAA7AxuOAIECBAgQIDA2AIC4NgrYHwCBAgQIECAQGcBAbAzuOEIECBAgAABAmMLCIBjr4DxCRAgQIAAAQKdBQTAzuCGI0CAAAECBAiMLSAAjr0CxidAgAABAgQIdBYQADuDG44AAQIECBAgMLaAADj2ChifAAECBAgQINBZQADsDG44AgQIECBAgMDYAgLg2CtgfAIECBAgQIBAZ4H/AZPLPLL8KAEZAAAAAElFTkSuQmCC\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\extrapolation.py:280: RuntimeWarning: invalid value encountered in absolute\n",
" return np.maximum(np.abs(a1), np.abs(a2))\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\extrapolation.py:280: RuntimeWarning: invalid value encountered in maximum\n",
" return np.maximum(np.abs(a1), np.abs(a2))\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\extrapolation.py:443: RuntimeWarning: invalid value encountered in less_equal\n",
" converged = err <= tol\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\extrapolation.py:446: RuntimeWarning: invalid value encountered in absolute\n",
" old_sequence[-m+1:]) * fact)\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\extrapolation.py:355: RuntimeWarning: invalid value encountered in absolute\n",
" abserr = err1 + err2 + np.where(converged, tol2 * 10, np.abs(result - e2))\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\limits.py:146: RuntimeWarning: invalid value encountered in less\n",
" outliers = (((abs(der) < (a_median / trim_fact)) +\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\limits.py:147: RuntimeWarning: invalid value encountered in greater\n",
" (abs(der) > (a_median * trim_fact))) * (a_median > 1e-8) +\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\limits.py:148: RuntimeWarning: invalid value encountered in less\n",
" ((der < p25-1.5*iqr) + (p75+1.5*iqr < der)))\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\extrapolation.py:441: RuntimeWarning: invalid value encountered in absolute\n",
" err = np.abs(np.diff(new_sequence, axis=0)) * fact\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\limits.py:146: RuntimeWarning: invalid value encountered in absolute\n",
" outliers = (((abs(der) < (a_median / trim_fact)) +\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\limits.py:147: RuntimeWarning: invalid value encountered in absolute\n",
" (abs(der) > (a_median * trim_fact))) * (a_median > 1e-8) +\n",
"c:\\pab\\workspace\\git_numdifftools\\numdifftools\\limits.py:149: RuntimeWarning: invalid value encountered in absolute\n",
" errors = outliers * np.abs(der - median)\n"
]
}
],
"source": [
"gev = ws.genextreme.fit2(Hs)\n",
"fig, axes = plt.subplots()\n",
"gev.plotesf()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCZhV4x/HP+1pmVHaNxVKIUJJi63IvoVkDSXJFkX6k73FviRrKGSnEJUlRIkSCZUSrSqpGVpV839+c89lmmbm3nPPvefcO/f7Ps88LfMu53ze350+vWsJlERABERABERABERABNKKQIm0elu9rAiIgAiIgAiIgAiIABJABYEIiIAIiIAIiIAIpBkBCWCadbheVwREQAREQAREQAQkgIoBERABERABERABEUgzAhLANOtwva4IiIAIiIAIiIAISAAVAyIgAiIgAiIgAiKQZgQkgGnW4XpdERABERABERABEZAAKgZEQAREQAREQAREIM0ISADTrMP1uiIgAiIgAiIgAiIgAVQMiIAIiIAIiIAIiECaEZAAplmH63VFQAREQAREQAREQAKoGBABERABERABERCBNCMgAUyzDtfrioAIiIAIiIAIiIAEUDEgAiIgAiIgAiIgAmlGQAKYZh2u1xUBERABERABERABCaBiQAREQAREQAREQATSjIAEMM06XK8rAiIgAiIgAiIgAhJAxYAIiIAIiIAIiIAIpBkBCWCadbheVwREQAREQAREQAQkgIoBERABERABERABEUgzAhLANOtwva4IiIAIiIAIiIAISAAVAyIgAiIgAiIgAiKQZgQkgGnW4XpdERABERABERABEZAAKgZEQAREQAREQAREIM0ISADTrMP1uiIgAiIgAiIgAiIgAVQMiIAIiIAIiIAIiECaEZAAplmH63VFQAREQAREQAREQAKoGBABERABERABERCBNCMgAUyzDtfrioAIiIAIiIAIiIAEUDEgAiKQaAIXAs/maWQDsBqYBbwEvJboB4ii/slADnCUk3d/4FTgIWBdFOXjmWV3YBHQHRjtsuJbgE+BT1yWU3YREIE0IyABTLMO1+uKQAAETACfAc4AlgHlgAbACcBZgMnXicDmAJ4t3OTezm/mOr+GpXVP4Befn8uLAG4H7gQG+fzMak4ERCDFCEgAU6zD9LgikIIEwgK4VwEydRrwOjAcuDqJ3s1G30YCBT1zoh9TAphowqpfBEQACaCCQAREINEEihJAa/tN4FigKrDJeZhdgFuBM4G6zsjh08AQZ6rWsh3ujB6eAhwDnO2UnQD0AbLzvJjJZS+godPGQmek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gATQMzJlEAERCAGBG4G7gSrAvcC4EJRZRRQBEQgRAQlgiCpbRRUBEXBNoDbwI7AdOArIdp1TCUVABEQgCQhIAJOgknSLIiAC5U7gFaAe0NTpDr6j3O9AFxQBERCBMiQgASxDuDq1CIhAUhK4FRgMHA80AuYC1wGTk7I0umkREAERKIKABFBhIQIiIAJ5BE4B3gHOAOY5v74EeAboCnwvWCIgAiIQBAISwCDUosogAiIgAiIgAiIgAh4ISAA9wFJSERABERABERABEQgCAQlgEGpRZRABERABERABERABDwQkgB5gKakIiIAIiIAIiIAIBIGABDAItagyiIAIiIAIiIAIiIAHAhJAD7CUVAREQAREQAREQASCQEACGIRaVBlEQAREQAREQAREwAMBCaAHWEoqAiIgAiIgAiIgAkEgIAEMQi2qDCIgAiIgAiIgAiLggYAE0AMsJRUBERABERABERCBIBCQAAahFlUGERABERABERABEfBAQALoAZaSioAIiIAIiIAIiEAQCEgAg1CLKoMIiIAIiIAIiIAIeCAgAfQAS0lFQAREQAREQAREIAgEJIBBqEWVQQREQAREQAREQAQ8EPg/HF7oVupb8h4AAAAASUVORK5CYII=\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import wafo.kdetools as wk\n",
"fig, axes = plt.subplots()\n",
"wk.TKDE(Hs, L2=0.5)(output='plot').plot('g--')\n",
"plt.hold(True)\n",
"gev.plotepdf() "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analysis of yura87 wave data. \n",
" Wave data interpolated (spline) and organized in 5-minute intervals\n",
"Normalized to mean 0 and std = 1 to get stationary conditions. \n",
"maximum level over each 5-minute interval analysed by GEV"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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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5BG46y6Yd15ipfA9e17H7g/vzBEc37ZApPRRWZJ/MnKWrfnmSt+BW2/19JCi+8/nS0ACEugBAQVQAexB2ExSRQFMJVgP9cePhz33zDJ655wzsUUjjnuEpY7auG1u4D6cxZdM1fa96fmE83d5hO0uXKseWm8bJCABCUigmwQUQAWwmyHztcsVwFSC9VJ/wgT44gvo12+SFj1122v022Igr302B1tyHR8xy8TvX3klbLttvbyA7ZCABCQggXIJKIAKYLmx0tV1CmAqwUao//HHjJxjEPONeYGNuIWXWLCt1bFNTIwcL7NMI7yEbZSABCQggRIBBVABTP00KICpBBuk/tVXjOON7Q9p2ycwjo/7Mz9qa/laa8Hdd7d7ieeeg0UXbZC3spkSkIAEWpOAAqgApka+AphKsN7rx9Bwr+zAnJNOgpcPv4Az2I+9OIfLGNz293//e54F/OADWGghGDwYfv1rmHrqen872ycBCUigJQkogApgauB7FnAqwXquP24crLsuHHoorLdeW0vXWQfG330P17MFw9ijbZXwcj/ozd/+lr/Iiy/CNttk/3PNNfDd79bzG9o2CUhAAi1HwLOAsy73LOC00DcDmMav/mvHSo+f/Qziz002adsi5gc/gAXHP8+tbMgTLM2OXMaRJ07Hq69mycI9dh7D0lcdApdcAhdcAFttVf/vaQslIAEJtBABM4AKYGq4K4CpBBuh/k03waBBcOGFbct+Yyj48MNhVj7kRjZnOj5l8z4388a4udreZuaZYeut4ReL/IkFjts5u/iggxrhTW2jBCQggZYgoAAqgKmBrgCmEmyU+iNGZEfHnXkm/PSn7L03DB0KUzGW89iddbir7fi4f7D0xDeaaSb4y5WvscTi42H++RvlTW2nBCQggaYnoAAqgKlBrgCmEmyk+vffDwMHZieArLYaV10F558P6607gS9P+DU///REtudyhrPxxLf6znfghhvcKqaRutm2SkACzU9AAVQAU6NcAUwl2Gj1X3oJFljga0fAxdzARw65ge3vHMxRHMtpHDBxim0MCd9zjxLYaF1teyUggeYloAAqgKnRrQCmEmyy+iNOeJQlj9iYW9iIIQydeHxcjB5ff327l/3sM3j5Zfje95qMgK8jAQlIoP4JKIAKYGqUKoCpBJuw/tmHvsEqvx7If5iVLbi+7fi4qaaChx9ulwW8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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.09964304 3.71720793 -2.49446718])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.09957624 3.71723125 -2.49446718])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n"
]
}
],
"source": [
"import scipy.interpolate as si\n",
"xn = wd.yura87()\n",
"XI = np.r_[0:len(xn):0.25]\n",
"N = len(XI); \n",
"N = N-np.mod(N,4*60*5); \n",
"YI = si.UnivariateSpline(xn[:,0].ravel(), xn[:,1].ravel(), k=3,s=0)(XI[:N])\n",
"YI = np.reshape(YI, (4*60*5, N/(4*60*5))) # Each column holds 5 minutes of interpolated data.\n",
"Y5 = (YI-YI.mean(axis=0))/(YI.std(axis=0))\n",
"Y5M = Y5.max(axis=0)\n",
"Y5gev = ws.genextreme.fit2(Y5M,method='mps')\n",
"fig, axes = plt.subplots()\n",
"Y5gev.plotesf()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Section 5.2.2 Generalized Pareto distribution\n",
"-------------------------------------------\n",
"Exceedances of significant wave-height data over level 3."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydCbiNVfuHb/NYplRCg6/Jp4Em8ZXyJZROpZRGRaKiSfkXDZrrax5opDmVEjJEg6S5SKFBoqJQIYeQYzj/69nvu9lO+5yz91l773cPv3Vd56Jz3rXete717OPXs9bzPOVQEwEREAEREAEREAERyCkC5XJqtVqsCIiACIiACIiACIgAEoAyAhEQAREQAREQARHIMQISgDm24VquCIiACIiACIiACEgAygZEQAREQAREQAREIMcISADm2IZruSIgAiIgAiIgAiIgASgbEAEREAEREAEREIEcIyABmGMbruWKgAiIgAiIgAiIgASgbEAEREAEREAEREAEcoyABGCObbiWKwIiIAIiIAIiIAISgLIBERABERABERABEcgxAhKAObbhWq4IiIAIiIAIiIAISADKBkRABERABERABEQgxwhIAObYhmu5IiACIiACIiACIiABKBsQAREQAREQAREQgRwjIAGYYxuu5YqACIiACIiACIiABKBsQAREQAREQAREQARyjIAEYI5tuJYrAiIgAiIgAiIgAhKAsgEREAEREAEREAERyDECEoA5tuFargiIgAiIgAiIgAhIAMoGREAEREAEREAERCDHCEgA5tiGa7kiIAIiIAIiIAIiIAEoGxABERABERABERCBHCMgAZhjG67lioAIiIAIiIAIiIAEoGxABERABERABERABHKMgARgjm24lisCIiACIiACIiACEoCyAREQAREQAREQARHIMQISgDm24VquCIiACIiACIiACEgAygZEQAREQAREQAREIMcISADm2IZruSIgAiIgAiIgAiIgASgbEAERKErgHOCpYrCsAOqmGNkg4HqgQgzvPQJ4FzgSmBrD8/E8sgvwI3Au8GwpHU8ELgf2BrYBfgdmAI8Ck/y+4bkWHaoQOB94Mp7JFfPsFGAT8N84xzoBaALcF2c/PS4CIpAhBCQAM2SjNE0RSCEBE4AmProAvxZ57wbgixTOxV61E9AI+CyG99YE/g18A/wVw/PxPBKrALwEuB8YCowBVgP/AjoB3wNXRwjAycDFwLQiE5kHLItncsU8a2LYBGW8AtD+B+AoYOcEzEFDiIAIpCEBCcA03BRNSQQCJhAWgHsA8wOeS6yvLw/Y77ONsXYow3Ox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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:517: UserWarning: Upper bound is larger\n",
" warnings.warn('Upper bound is larger')\n"
]
}
],
"source": [
"gpd3 = ws.genpareto.fit2(Hs[Hs>3],floc=3)\n",
"fig, axes = plt.subplots()\n",
"gpd3.plotesf()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Exceedances of significant wave-height data over level 7,"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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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tMccU9GE35VYaj29wyCQbDfrLRF0pW1UD2Clifs+CUigdQJliCjucqRwyxk+8EDmEbz77uxYOI6HF120vnYy7gveeCM8/DCcckp9ra0OV6MHUAGYatYKwFSC9peABNIJxDFk5OQ7/njYddeSHUMmeQBbW1UklT7pJLjuuuzYNAJG6jGp9PR2tAwiPd14GnMEBaACMNXyFYCpBO0vAQmkEwhhEfcEDzssE1RR43S55dLHBUoSKdxyJpFU+k9/ypJKRxBFJJVea62SzLdmB4k96t8fVl45yy/Yr1/JhHrNrrmGJ6YAVACmmqcCMJWg/SUggdIRCE/gccfBuefCoYfCr39du1HDseqIdI48exHpHAEUIQTrIal0azva/L5g1Ib+zney+4LxU8F7naUztnyPpABUAKZasAIwlaD9JSCB0hOIo9af/jQb96GHkjxNnY4C7spqIro5SuNFUumll86EYD0klZ4ei7gvGFHEkWz65pszERxBMraKEVAAKgBTjc0o4FSC9peABMpDIBIY//e/SdVESn4HsL2VfvZZ5r2MIIo554Qjj8zuNNZDUunprT3Eb+xVRBDbKkLAKOAMs1HAaeamBzCNn70lIIEaJlCyKODOrjGSSsf9wEgqPWlS/SeVnh6f997LUv+st16SF7ez+BvheT2ACsBUO1cAphK0vwQkUHkCUamjA161insAW5II8VdMKh1iKO41RvLl3r0rz6wab4w8irvvnnlDi/cF44jclkxAAagATDUiBWAqQftLQAKVJ7DXXtmxY9TvnW++Nt9flijgzq44AihuuQXCJfnGG1m6m8gn2AER29lX1dzz4Q2Ne4LhEY1/rrZaFkW8774w44w1N928TEgBqABMtVUFYCpB+0tAApUnENG34U277Tb43e+ygJEePSo/j86+MYTgtdfC0UdnPaPKyI47Ns7xaNwXvOoqGDEi84zmYc86u8cVel4BqABMNTUFYCpB+0tAAtUjEELioINgttng7LOzZNJ5aHGEff75mSdwkUWynIIDBuRh5s6xRggoABWAqaZoFHAqQftLQALVJRApSUJARYWOKGO2yirVnU9n3v7FF/CXv2TBIhtskJWbi0TLjdz23hsWXjg7Jva+YKuWYBRwhsUo4LRfFHoA0/jZWwISqBUC77wD889fs8epbeYjHD0afv97OOecrMTcb3+beQYbsd1w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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gpd7 = ws.genpareto.fit2(Hs[Hs>7], floc=7)\n",
"fig, axes = plt.subplots()\n",
"gpd7.plotesf()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Simulates 100 values from the GEV distribution with parameters (0.3, 1, 2), then estimates the\n",
"parameters using two different methods and plots the estimated distribution functions together\n",
"with the empirical distribution.\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB5SURdaGH6KCKAJiQDHnrJj9jauiqxhR1xwBFVdXzK45Z10VI5gTaxYT6qqoqJgD5iwKgqIkyeE/71Q30ww9M1/P191fT/db53DQ6YpPVcPLrbr3NsHFBEzABEzABEzABEygogg0qajVerEmYAImYAImYAImYAJYAPoQmIAJmIAJmIAJmECFEbAArLAN93JNwARMwARMwARMwALQZ8AETMAETMAETMAEKoyABWCFbbiXawImYAImYAImYAIWgD4DJmACJmACJmACJlBhBCwAK2zDvVwTMAETMAETMAETsAD0GTABEzABEzABEzCBCiNgAVhhG+7lmoAJmIAJmIAJmIAFoM+ACZiACZiACZiACVQYAQvACttwL9cETMAETMAETMAELAB9BkzABEzABEzABEygwghYAFbYhnu5JmACJmACJmACJmAB6DNgAiZgAiZgAiZgAhVGwAKwwjbcyzUBEzABEzABEzABC0CfARMwARMwARMwAROoMAIWgBW24V6uCZiACZiACZiACVgA+gyYgAmYgAmYgAmYQIURsACssA33ck3ABEzABEzABEzAAtBnwARMwARMwARMwAQqjIAFYIVtuJdrAiZgAiZgAiZgAhaAPgMmYAImYAImYAImUGEELAArbMO9XBMwARMwARMwAROwAPQZMAETMAETMAETMIEKI2ABWGEb7uWagAmYgAmYgAmYgAWgz4AJmIAJmIAJmIAJVBgBC8AK23Av1wRMwARMwARMwAQsAH0GTMAETMAETMAETKDCCFgAVtiGe7kmYAImYAImYAImYAHoM2ACJlCTwCHAHbVgGQu0LzKyc4CzgWYRxt0KeBnYGng1Qv1cqiwDfA8cCtxdT8PdgROAVYEFgdHAB8DNwKBU2/Rca3Y1G+gB3J7L5Gqp+wowC9g2x752A5YHrsmxnaubgAk0EgIWgI1kozxNEygiAQlAiY/uwC81xp0BvF/EuWioTsBSwNsRxm0DrA58BkyMUD+XKlEF4HHAtUA/4AngL2AFYGfgK+C0DAH4EvBP4N0aE/kWGJPL5GqpKzEsQZmrANQ/AP4GLJ2HObgLEzCBEiRgAViCm+IpmUDCBNICcCXgu4TnEnX4poD+PJsZtUED6kUVgD8C76QEdF3D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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.34847708 1.19360282 -5.94834482])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:117: RuntimeWarning: divide by zero encountered in log\n",
" loglogP = log(-log(-expm1(logsf)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.34847789 1.19366352 -6.90775528])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.34847474 1.19359554 -6.90775528])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35499767 1.23279902 -1.15129255])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35494524 1.23277614 -2.110703 ])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35495493 1.23276739 -3.07011346])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35497638 1.23281073 -3.07011346])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35499767 1.23279902 -4.98893437])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35499767 1.23279902 -5.94834482])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ 0.35496599 1.23285957 -6.9060821 ])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n"
]
}
],
"source": [
"Rgev = ws.genextreme.rvs(0.3,1,2,size=100)\n",
"gp = ws.genextreme.fit2(Rgev,method='mps')\n",
"gm = ws.genextreme.fit2(Rgev,method='ml')\n",
"fig, axes = plt.subplots()\n",
"gp.plotesf()\n",
"plt.hold(True)\n",
"gm.plotesf('r--')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Similarly for the GPD distribution"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB5RURdqGH0FRWRVcI5jXiDm7Zl3F0VVUEBNGzDomMGPOOcuac0DMiglRjGvOiFkXE/5mQAyAwH/eqdvQDD0z3X27597ufuucOShzq27VU9XMO199YQbcTMAETMAETMAETMAEaorADDW1Wi/WBEzABEzABEzABEwAC0AfAhMwARMwARMwAROoMQIWgDW24V6uCZiACZiACZiACVgA+gyYgAmYgAmYgAmYQI0RsACssQ33ck3ABEzABEzABEzAAtBnwARMwARMwARMwARqjIAFYI1tuJdrAiZgAiZgAiZgAhaAPgMmYAImYAImYAImUGMELABrbMO9XBMwARMwARMwAROwAPQZMAETMAETMAETMIEaI2ABWGMb7uWagAmYgAmYgAmYgAWgz4AJmIAJmIAJmIAJ1BgBC8Aa23Av1wRMwARMwARMwAQsAH0GTMAETMAETMAETKDGCFgA1tiGe7kmYAImYAImYAImYAHoM2ACJmACJmACJmACNUbAArDGNtzLNQETMAETMAETMAELQJ8BEzABEzABEzABE6gxAhaANbbhXq4JmIAJmIAJmIAJWAD6DJiACZiACZiACZhAjRGwAKyxDfdyTcAETMAETMAETMAC0GfABEzABEzABEzABGqMgAVgjW24l2sCJmACJmACJmACFoA+AyZgAiZgAiZgAiZQYwQsAGtsw71cEzABEzABEzABE7AA9BkwARMwARMwARMwgRojYAFYYxvu5ZqACZiACZiACZiABaDPgAmYgAmYgAmYgAnUGAELwBrbcC/XBEzABEzABEzABCwAfQZMwAQaE9gDuLEJLKOAv7cyspOBk4C2ebx3Q+BpYCPguTyeL+SRRYD/AXsCt7TQcVugD7AMMDvwPfAWcBUwOOqbmWvjoSYD+wI3FDK5Jp59BpgE/KvAsbYB/gFcXGA/P24CJlAhBCwAK2SjPE0TaEUCEoASHz2Bbxq99y/gzVaci17VGVgQeDWP984GLAu8D4zN4/lCHslXAB4KXAJcBzwI/AYsDmwJfAwcmyUAhwKHAK83mshnwE+FTK6JZyWGJSgLFYD6BWATYOESzMFDmIAJpJCABWAKN8VTMoGECWQE4JLA5wnPJd/XtwH079nEfDsU8Vy+AvAL4LVI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sC6/PPjhyU8vVzv6aH4ZOJidFnmZQ1Z5nq2u7wEPPhiqf5SryUq4+eYwbBj07QuHHgpzCJWbCZiACZiACSRPwALQAjDuKUxGAGrWCtDYccdQwk2ZzV97DWaaafr1KFBEVUKWW44B/7qWB097m6P+dxCrDTkX1i/SEpgPNV1VDx0KJ58cIkPt1pgAACAASURBVIkVMazI4dmVocfNBEzABEzABJIjYAFoARj39CUnADXzrbaChReGF18M18CyuuVqX33Fn8utykFjz+fGyXsy2wy/8cwsm7HaMxfDmmvGZRD6KzhFNYn3339akSch+OSTQQh+/DG8/TYsqOp8biZgAiZgAiaQDAELQAvAuCev9YNAsmesGr5XXQWq0jHrrM2u5YiVnmTEu6O5j+0anttliZe57cctgpVulVXicoAffwz5Aj/9FC69FHr0mLausITgyy8H30HXG47P2yOYgAmYgAkURcBBIAGbg0CKOj5TOiVrASxg7gMGwK67goKD27SJysJ9dR6cfz4880yILI7bJPKULkaVQmRZVMDIYovFHdX9TcAETMAETKCkBGwBtACMe6AqRgBqoRKBqugmt8Gdd46WfuqpcOWV8NxzsNRScXmE/j//DMceC7ffHq5+jz66+XEzwnH77aF9+9LMwaOYgAmYgAmYQBMELAAtAON+OCpKAOZcrMSXEjxLrEkENmOxk4C8+urg5jdFQDZHUL6Jyh+oGsLNtR9+CP6LI0cG4SiF2sKVdtyNc38TMAETMIHaJWABaAEY9/RXvgAUAYnAww+Hhx4KInChhabjkvMKOWNFjEsxMwe9XyXmvvsuiNJ99w3VTtxMwARMwARMoIQELAAtAOMep2SDQJqavfzwFGihOr7NNeUDHD48lHqTCFSlj6efhmefhU6dpumpCiL660wruqJIS8TlpKh5SQiqDJ3m59QxLVHz903ABEzABPIk4CCQAMpBIHkemCYeS5cF8L77QpoVRdr26gXvvw+dOze9QomrddeFSy6BPfcMESK9e8Prr4fAkHnmmdK35BbAO++EZZeFFVfMPT/NRdfHLjkX74S6twmYgAmYwHQEbAG0AIz7sUiXAJSgW331IALPOAPGjIEHHmg+7YrSwHTrFqxum24KqjKyyy4hZ5++N+ec04jA6YJIiiV42mkhd2F9fQgUmW22YkdyPxMwARMwARMoiIAF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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Rgpd = ws.genpareto.rvs(0.4,size=100);\n",
"gmps = ws.genpareto.fit2(Rgpd, method='mps')\n",
"gml = ws.genpareto.fit2(Rgpd, method='ml')\n",
"fig, axes = plt.subplots()\n",
"gmps.plotesf()\n",
"plt.hold(True)\n",
"gml.plotesf('r--')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Return values for the GEV distribution"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.09964304 3.71720793 4.9932272 ])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.09957624 3.71723125 4.9932272 ])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [ -0.09961102 3.7171997 10.41365265])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n"
]
},
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydB5QUVfbGPxEBAwJiGBF00RUxgRgQ1oAYwEBQ0T8iusZ1dA24GHAwrOjKOK6yssZZ866KGFCCIiYUUUcMI0YwRxwTAioMSPifb6qK6Wm6p7vrveqq6v7eORyUqfvq1e/emv76vvfuWwtqIiACIiACIiACIiACRUVgraJ6Wj2sCIiACIiACIiACIgAJAAVBCIgAiIgAiIgAiJQZAQkAIvM4XpcERABERABERABEZAAVAyIgAiIgAiIgAiIQJERkAAsMofrcUVABERABERABERAAlAxIAIiIAIiIAIiIAJFRkACsMgcrscVAREQAREQAREQAQlAxYAIiIAIiIAIiIAIFBkBCcAic7geVwREQAREQAREQAQkABUDIiACIiACIiACIlBkBCQAi8zhelwREAEREAEREAERkABUDIiACIiACIiACIhAkRGQACwyh+txRUAEREAEREAEREACUDEgAiIgAiIgAiIgAkVGQAKwyByuxxUBERABERABERABCUDFgAiIgAiIgAiIgAgUGQEJwCJzuB5XBERABERABERABCQAFQMiIAIiIAIiIAIiUGQEJACLzOF6XBEQAREQAREQARGQAFQMiIAIiIAIiIAIiECREZAALDKH63FFQAREQAREQAREQAJQMSACIiACIiACIiACRUZAArDIHK7HFQEREAEREAEREAEJQMWACIiACIiACIiACBQZAQnAInO4HlcEREAEREAEREAEJAAVAyIgAiIgAiIgAiJQZAQkAIvM4XpcERABERABERABEZAAVAyIgAiIgAiIgAiIQJERkAAsMofrcUVABERABERABERAAlAxIAKZCZwA4K6Ey34H8BWA8QCuALA0cxdrXDEQwNYA/uXDNk4mlwO4DECTiA367+641rY0LsYInzExTti1Fzt/BPCppXul66YtgOEA+gPoCKApgG8AzARwJ4AZCYYcJ8eWqj0G4EgAb7l97JTmOsbvxwDoY74HUWsnus/9BwBf5ji4lRF+rhwfRZeLQGoCEoCKDBHITIAflPwAPcr9QG0J4AgAfwVwA4BhmbtY4wp+AB8AYEsftnEysS20bD17OwDtAcyy1OF0ABST+yb158XOtgELQIq0aQBWAbgRwOsA+EVlOwDHA/gTgBIA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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"T = np.logspace(1, 5, 10)\n",
"sT = Y5gev.isf(1./T)\n",
"ci = []\n",
"t = []\n",
"for Ti, sTi in zip(T, sT):\n",
" try:\n",
" Lx = Y5gev.profile_quantile(sTi, i=2)\n",
" ci.append(Lx.get_bounds(alpha=0.05))\n",
" t.append(Ti)\n",
" except Exception:\n",
" pass\n",
"fig, axes = plt.subplots()\n",
"plt.semilogx(T,sT, t, ci,'r')\n",
"plt.hold(True)\n",
"N = np.r_[1:len(Y5M)+1]\n",
"Nmax = max(N)\n",
"plt.plot(Nmax/N, sorted(Y5M, reverse=True), '.')\n",
"plt.title('Return values in the GEV model')\n",
"plt.xlabel('Return period')\n",
"plt.ylabel('Return value') \n",
"plt.grid(True) "
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAA3AAAAKACAYAAADdD5p6AAAgAElEQVR4XuydB5QcxdWFPwSILAEmG5GzyMmAMZhgRBLJYMAmmQziNxljTE7GmAwiB5NxIIokk7HJYDKYZIKwyAiJIBAI/nO3u2E0zOx2z0xN92zfOmcPi7a6qvqrnn5zq169NxEuJmACJmACJmACJmACJmACJmACHUFgoo4YpQdpAiZgAiZgAiZgAiZgAiZgAiaABZwfAhMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfARMwARMwARMwARMwARMwARPoEAIWcB0yUR6mCZiACZiACZiACZiACZiACVjA+RkwARMwARMwARMwARMwARMwgQ4hYAHXIRPlYZqACZiACZiACZiACZiACZiABZyfgTIQ2Ba4qM6NfgRM32YIhwGHAhOn6HdV4C7gp8C9KepnqTIn8CqwHXBJDxduBOwNLARMA7wLPA6cDQyPr03GWt3UN8BOwIVZBlen7t3A18DqGdvaEJgHODnjda5uAiZgAs0SqLZBnwHvxe/QK4G/NdtBC66XndG7Onm3LgHovX8qIDvZzpLFNlWPS/b1HkC2wsUEei0BC7heO7W+sQoCMp4SD5sC/6si8xXw7zbTmg2YHXg4Rb9TA4sAzwGfpKifpUpaI/kb4BTgfOB64FNgXmA94EXgwAoBdyfwf8CjVQN5Bfggy+Dq1K3+kpG2SQn4NYA50l7geiZgAibQIgLVNmiy+F2kd+gv4kW69YEvWtRfI81ocU7lP/F/E9E5H/DfRhps4pq0tqlWF1rgOzpeJG1iCL7UBIpNwAKu2PPj0bWGQGI858/BEDV6B30AfT7HN9pAiuvSGsnXgUdiAdxds8kO3JqAhFyIYgEXgqrbNAETCEmgOxu0MfB34Axgz5CDyNi2PDMuAPKwm2ltkwVcxkl19d5DwAKu98yl76Q+gbQCTgZLO3U/BvYC1gHk6qLdp+OAtYFjgQXiHbFdq3bv5LIht8g/AcfEhk8uinKXrHSROTz+N4m0pGjVUG1/DOwCDACWBaat40Ipo78vIDcXXatV06OAG+MGhwC/AhYE1E/y95sr+kxrJDUmuViqzVACLrl/8d4N+EEsGrX792RFp7UEnObjj7GbqVa2VV+ME9dO7b7pGZB7UPLOey12qfTnxgRMwARCE+jJBl0T2xe5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O0FplEPTDnTgu4RUD8I7SmiLiijSHs2H/zrwx3A+nq7PDqLXCG63qUhbGutK0YeLtidlHy7alpR9WOx1JuE9oS/k+4HWiuoZ0+yZk7ovd9v/hvX62Gdjqs9/bP0pPvNF6k7x+S5Sf5mf6aLPk7I/u0XqL7vfFak7RZ8rWn+Z/a5o3WX2OWtGDRTGBq4GQXATTMAETMAETMAETMAETMAETCCGgA1cDCXnMQETMAETMAETMAETMAETMIEaELCBq0EQ3AQTMAETMAETMAETMAETMAETiCFgAxdDyXlMwARMwARMwARMwARMwARMoAYEbOBqEAQ3wQRMwARMwARMwARMwARMwARiCNjAxVByHhMwARMwARMwARMwARMwAROoAQEbuBoEwU0wARMwARMwARMwARMwARMwgRgCNnAxlJzHBEzABEzABEzABEzABEzABGpAwAauBkFwE0zABEzABEzABEzABEzABEwghoANXAwl5zEBEzABEzABEzABEzABEzCBGhCwgatBENwEEzABEzABEzABEzABEzABE4ghYAMXQ8l5TKC/CTwU+B7wXuDMcCtvBV4PHAT8pr9vz603ARMwARMokYA1o0SYLsoEUhCwgUtB1WWaQP0IPAu4DDgE2Am4GHheMHb1a61bZAImYAImUCUBa0aV9F23CbQhYAPnLmICw0NgOfA24EHAqcBHh+fWfacmYAImYAIFCVgzCgJzdhPoFQEbuF6Rdj0mUD2BBwM3AXcCjwHur75JboEJmIAJmEBNCVgzahoYN8sEbODcB0xgeAh8BtgdeFiYTnnS8Ny679QETMAETKAgAWtGQWDObgK9ImAD1yvSrscEqiVwAnA8sBDYC/hP4G+Bi6ptlms3ARMwAROoIQFrRg2D4iaZQEbABs59wQQGn8DBwKXA84Hvhts9BjgPeBrwk8FH4Ds0ARMwAROIJGDNiATlbCZQFQEbuKrIu14TMAETMAETMAETMAETMAETKEjABq4gMGc3ARMwARMwARMwARMwARMwgaoI2MBVRd71moAJmIAJmIAJmIAJmIAJmEBBAjZwBYE5uwmYgAmYgAmYgAmYgAmYgAlURcAGriryrtcETMAETMAETMAETMAETMAEChKwgSsIzNlNwARMwARMwARMwARMwARMoCoCNnBVkXe9JmACJmACJmACJmACJmACJlCQgA1cQWDObgImYAImYAImYAImYAImYAJVEbCBq4q86zUBEzABEzABEzABEzABEzCBggRs4AoCc3YTMAETMAETMAETMAETMAETqIqADVxV5F2vCZiACZiACZiACZiACZiACRQkYANXEJizm4AJmIAJmIAJmIAJmIAJmEBVBGzgqiLvek3ABEzABEzABEzABEzABEygIAEbuILAnN0ETMAETMAETMAETMAETMAEqiJgA1cVeddrAiZgAiZgAiZgAiZgAiZgAgUJ2MAVBObsJmACJmACJmACJmACJmACJlAVARu4qsi7XhMwARMwARMwARMwARMwARMoSMAGriAwZzcBEzABEzABEzABEzABEzCBqgjYwFVF3vWagAmYgAmYgAmYgAmYgAmYQEECNnAFgTm7CZiACZiACZiACZiACZiACVRFwAauKvKu1wRMwARMwARMwARMwARMwAQKErCBKwjM2U3ABEzABEzABEzABEzABEygKgI2cFWRd70mYAImYAImYAImYAImYAImUJCADVxBYM5uAiZgAiZgAiZgAiZgAiZgAlURsIGrirzrNQETMAETMAETMAETMAETMIGCBGzgCgJzdsRHrvUAACAASURBVBMwARMwARMwARMwARMwAROoioANXFXkXa8JmIAJmIAJmIAJmIAJmIAJFCRgA1cQmLObgAmYgAmYgAmYgAmYgAmYQFUEbOCqIu96TcAETMAETMAETMAETMAETKAgARu4gsCc3QRMwARMwARMwARMwARMwASqImADVxV512sCJmACJmACJmACJmACJmACBQnYwBUE5uwmYAImYAImYAImYAImYAImUBUBG7iqyLteEzABEzABEzABEzABEzABEyhIwAauIDBnNwETMAETMAETMAETMAETMIGqCNjAVUXe9ZqACZiACZiACZiACZiACZhAQQI2cAWBOXtPCLwSOD9X0z3ARuBC4J3AHxO04nnA14FFwDfalH8/cHpoS4Km8CrgY8AYcFObCrYDlsH0NfsD+kxfH/idA6itdUjvAK4ALm9ojOIs9o8Jv38UcEO4n4+X0HDVq39Z2gz8N/BB4NO533ca0+NDjC4qoa0uwgRMoDkBa0KcJuh5KlZZ+hXwQ+DdwLoSO9e/An8FLCipTOnpacCD2mhWM52Wpuj5/YLQlmZ5UjynVe9zc/d/C/D9oDf/OUdbYpDtBvw98AVg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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.63422275 0.5 -2.110703 ])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.63409889 0.5 -5.94834482])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n",
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.63409889 0.5 -6.90775528])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n"
]
}
],
"source": [
"import wafo.stats as ws\n",
"R = ws.genpareto.rvs(-0.5,size=100);\n",
"phat = ws.genpareto.fit2(R[R>.5], -.5, scale=1, floc=0.5)\n",
"\n",
"phat.plotfitsummary()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"phat0_ci = [-0.87319166 -0.40162685]\n"
]
}
],
"source": [
"# Better CI for phat.par[i=0] shape parameter\n",
"Lp0 = phat.profile(i=0, pmin=-1,pmax=1)\n",
"fig, axes = plt.subplots()\n",
"Lp0.plot()\n",
"phat0_ci = Lp0.get_bounds(alpha=0.1)\n",
"print('phat0_ci = {}'.format(phat0_ci))\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAgAElEQVR4XuydBbgc1eG3X5KQIMEdiktTIFA0SLBCCG6F4tA/0CLBrVy0wS5QrEhwKRRtixULLkGCFwgEihaH4ClwQ274nl9m9mN7ubK7Z2Z2Zvd3nuc+tLlz7D1n77x7dAocTMAETMAETMAETMAEmorAFE1VW1fWBEzABEzABEzABEwAC6A7gQmYgAmYgAmYgAk0GQELYJM1uKtrAiZgAiZgAiZgAhZA9wETMAETMAETMAETaDICFsAma3BX1wRMwARMwARMwAQsgO4DJmACJmACJmACJtBkBCyATdbgrq4JmIAJmIAJmIAJWADdB0zABEzABEzABEygyQhYAJuswV1dEzABEzABEzABE7AAug+YgAmYgAmYgAmYQJMRsAA2WYO7uiZgAiZgAiZgAiZgAXQfMAETMAETMAETMIEmI2ABbLIGd3VNwARMwARMwARMwALoPmACJmACJmACJmACTUbAAthkDe7qmoAJmIAJmIAJmIAF0H3ABEzABEzABEzABJqMgAWwyRrc1TUBEzABEzABEzABC6D7gAmYgAmYgAmYgAk0GQELYJM1uKtrAiZgAiZgAiZgAhZA9wETMAETMAETMAETaDICFsAma3BX1wRMwARMwARMwAQsgO4DJmACJmACJmACJtBkBCyATdbgrq4JmIAJmIAJmIAJWADdB0zABEzABEzABEygyQhYAJuswV1dEzABEzABEzABE7AAug+YgAmYgAmYgAmYQJMRsAA2WYO7uiZgAiZgAiZgAiZgAXQfMAETMAETMAETMIEmI2ABbLIGd3VNwARMwARMwARMwALoPmACyRFYCzgWWA74FrgNOBj4uCyL+YE3O8nyB2Am4Kv4d1MD5wCbAZ8DhwPXd4h3KLBtnN+kCqvRB/g9sB2wBKB83gfuB84GnovTuRxYG5i3h3SnAS4A1gVmA84EDqywLH6sdgKbAgsBZ9SehGOagAk0MwELYDO3vuueJIHVgHuB24HzgVmAE2KhkxB+H2dWEkD97p8dCvAkIBFUkEjuBAwDlgaOARYHXo9//zNgTCxeoyusiGTtzlgYz4vLOx5YBNgB+GVcbiV3WSyA8/WQ9iFxPf8P+DfwAfBOheXxY7UTqLR9as/BMU3ABBqagAWwoZvXlcuQwD2AZGkAUBqNk/hJ6vaKpVDFKQngbsCl3ZTviXjE79T4mZeAP8ejbfqnvwOfxaN5lVbzYmB7YA1A6XcMmwC3xP9YqWDoOY18LlBpIXp4ri8wIaG0ipSMRmYnVlHgStuniiQzebRZ2zcTuM7EBKohYAGshpafNYGuCXwNXBGP2JU/9QnwDDA0/sdKBVBTsRcB58bxngKujCVwvTivn8fTw5W0y5zAfwCN/O1XQYRKBEOiqxHL0t8R/W/J4EPAYsDJwJpAP+BfwB+BkWV56/8fDQwETgNWBSTSm3dTvv3j8qs+SvMA4Op4CnuXsngSUo2yDgGmB14GhgM3dZK/yqqpa4nxp8AlwHFlz+nfNUW+JbAxoOnX3vEI7r6xiJce14itJFtt0wsYG6elkeFSKPUBPatyavR1jnj09cv437oru9pm5w7s34qnhJVHJew7Q6w0lbbqq2n8dYA24Np4KcN3HdiJhUaPJezPx8sUykejS9x+DawfL2eQ6M4MLByPag8G1JYaOVbf0FKHL8ryKS1F0FKIs4Bl4n6s8omp/rtPnKbaaNe4DUtJqK/vHjNV+TWCfjxwcwWfAT9iAg1NwALY0M3rymVIQC8tvTwlJOXh3ViQ5ukggBJDvQj/CzwIHAG8WBZR6+r0stOonKaAb40FSWKo51rj/CqtotYK/jUWUUlWT6ESAVwxlqql4pe7/p5opHK6WAgkM0fF0+CSHa0T3LBMAjWtrR+9lCVdj8ejpxLIzoJGTS+MxVgjoJKIPwAzxGJXEkBNj0u6P4w5jQO2BjRNLXkTS4VS/uKp+kooJTWSBj37l/i5kshoalvsrgMWjdPWCK/WSpbCn4BX4zpJEpWe6i4BuqtDH3gvHiHWyKye1e+1jrKnsi8Yr9dcPk5f3CVqKv9cFbLvjG9JAPVFQetNVR61sThdBZQLtr6cqJ307LSxxG4RLy/Q0gSFEjfV84541HqqeJRZSyY2iNtcI9mqk+RPAq4vAqWgdlG6Yq/RcK1XPRJYIf5ypHbQkgsJtEbIlc82cWSJuARSXzRGxetd1Vf12VO6DibQ1AQsgE3d/K58ggQ08qERsZXL0tRIzxvxCIk2WyhotEOjXnq56kWkKWPJn9YM6qUmeVCYOx7h0AtLI2unAC1xXImURk6qCdowImlUflqr11OoRACVhkYl9cLWhoRS0ItaI2MaBStteNFomORQaw4lLgoSC7GQcGnDS3dBf6veLpO00rMaLfxH/KIvCYpkcqM4//LRJDGfFVi2Q/6SPY3eloJGsyQaGmlVKImM5EICWwraSKP6a6RMo08dg8qsemuk6puykc3SCODTcZuXx6u07F21T6XsO2NdEkCNEktaS0FiptHTXwCvdRJRdVRdJX5iVPoSVOJ2Qzx62l37SoBXiqVS7SOZVVA9tRZ2deCR+N80YqzfvxKviy2tm9Uo8t6AJFP/pk1N+jyW+lt3+ft3JtB0BCyATdfkrnBKBEoycGI8VSWh0yieXkDaAKJRkq5CaUOHpif1Ei4PGhmRxGgnsCRLI4CrxCNM2gGqqTGNIup/dydRWQqgZFgjUnpplwcJn0YEZ4xFsCSAEiKNlHYXtBtZAlg+MqfnJR+a2tPoZkkAldbdgEYMS0F/6zR9rGlpjRhKREv5a/RIo4SloCllbYjRphuFksgofY0olcKU8W5vSazaXUHrPiVLkg6N5pX+xmoquJReSQAVT9OR5aHSsnclgJWy74y1+p7WpWpE84GyB9TvJH6aqhYbBUmvxFBfUDSSrSDp0jSuRvbKuUng1D7lQey0gWjHeF2spK2UhkarSzveVU9NIWsavxQUV/1LyyM0/VsKv4tHA9VXJPDKV/UZEU/5Phq3V2d197+ZQNMRsAA2XZO7wikS0Itfx75otE+jgZoq7B8ft6K1Ut0FHRmjF61GWboKmrqUSCiP0hoxjVLphfdwPL3Z2UiU0ktjCljpdjYCqBFGTWNq2rU8aC2WXsZa96YpvZKAaWNAew98NBWpKWKNwGmUqTzoZa/dzSUB1Jo0jSh19vdNkiLOkslS/hKK8mN0SuvgSqOaJQHsLG+N4kpWNGImkX8hHgnTmkJNj2pjhyRPI6+l9EoCKGHRiF95qLTsXQlgpew7w10SwCXjNZOlZ/TlRWtcNd2uKW6N0D0Wt4MES+v31H6qi76o/CqOWOKmdZjaIV8eNFonZvrMKC2lL343Ar8tG5Htqp5qL3GVRJdCqfyaFtbIu4IYa12gxFxtUVo3qPZ3MIGmJmABbOrmd+VTICD504v+o3hUSdOe2nGrl1p3oScB1EifprQ0rarpRG0K0cuxtElEa+K0lk4v6c6C1oZJSCRgSW0CUT6dCaBGoTQqJwEoD1qLpfVbHUcAOwpYZ+WvZgRQQqL1aSd1IYGSNI3KViuAPY0AlkagJDIqQyloNE07xDsKYGc7wSste3cjgJWw74xxpSOA+vKhPqRRuXJx1kYUiVdHAdRo4X0dMtRIp/q8vhSUgjYM6bkkBbCUtkZ9tXTi9Hi0uXypRgp/BpykCeSfgAUw/23kEhaXgEbn9JLTlG13Z/VJDiQlWiulKc6OQVKpXawHxevd9HsJoEaetDZQQSNgWrumqd6ughbuaxpPO3U1mtYxaINEaXdkyBpAlUmCoJEYSaeCpmq1RkwjPRrNU+hKwDorf2kNoOqo9X2loOnBv3VYA6iyaz2ZpnE1VdhVqFYAxbg0vak0tclAawdLU6Za96ipeK3z1Miggnbkqt4a8axEACstuzY+qO6aZi4PlbLvjElpDaDS1tFFpaA1qpJ3jWLqS4YkSqNqOri8JICSPm2QkeyWC6CETiOAHQVQGz+u6bDWUCzFtHxNZugIYMd6auRRB6Fro5KDCTQ1AQtgUze/K58gAcmGdnpq6lNBuxw1VauXpdZKlYIW6eulKQHTS1Av1cPiF5KkpbMNGtq8oR3BpU0JSkv/ppel1kBph7GmHJV/x6m28ipqKk9CqvVpWp+oF7bWwklMlJamybR2USFEADXaqLWKWrsocZD0SSgkAhIorc9TqEYA9bykQxKrqUZJX2kXsEaiJM+lNX8aLZRwa5RJ6yI1MiVZ0dSm1lSWnqtWACVx4qtjUTQSqylI7QLWCJeC1vip3pIdiYY28qj+mh6VAFcigJWWvSSbmkbVlwGN+mk3c6XsO+v6ne0CHhRPs2qkt8RNI2mahtd6QPUTsdDIruqptYKVjAAqrna4ax2g4minrziKUVICqD6uvqcpZt3Go3JqraZGh3Wkj4MJNDUBC2BTN78rnyABvfz1wtH1ajr3TiN2OresfHepstPLbY/4/DStD9SxF5IK3fzRmfzppSWZ0bqr0rompSOZU/oatdO1cxLNSq4F09o4jYBI+CREWnyvYzpUBqVXOopGL3a9yLVerbsgMdAIp2SsPGj0TxsuNNooHhIjCVdJ/koCqE0hWgNY6VV2Eh/tMtXGDZVV/1s3qqi8GiEthZJ8SYo1SibOel5Hu5Q2MpQ2pXTMX2lpA0upTprKltRpxE3Soul4cdSh2RrplMiXgsRCbal1jhot03mCKoPSKBdAtaWmjDs7DLySsutWF8mwvhRoSl1r2krpV8K+KwFUeVRWfXlR+2tNonhJ1MpHUyWeOoNPo53iqh3qkkCtsSwdi1Pi1tkIoL5oaElD6XxMfTHRMS5aLtFRADvrh5JNCbjasBQ6rgHUJhBNJ+uzqSlgrRXVGkNJub74OJhAUxOwADZ187vyJlB4AhrNlDSU71BNulLdiUzSedUzvc42UdSzPM7bBEwgRQIWwBThOmkTMIFECWhUTSNP2vH8VTyyo5EnTX/qbLjymyqSzLi0m7WzzQxJ5lPvtCyA9W4B528CGRKwAGYI21mZgAkEEdC0r87h03pIrenTkSOaUpYE9nSOYEjGHgEMoee4JmACuSRgAcxls7hQJmACJmACJmACJpAeAQtgemydsgmYgAmYgAmYgAnkkoAFMKxZxE879nTUgIMJmIAJmIAJmEBxCOg8SO0OL90nXZySJ1BSC2AYRJ2/lubao7DSObYJmIAJmIAJmEB3BHRzj47CarpgAQxrch1A++U777zD9NOX31UelmijxD788MM58USdu+rQkYDZdN0nzKZzNubiPlPLX1L3m86pffXVV8w7r85dn3xGpE4VaLpgAQxr8skC+OWXX1oAO+F44IEHcvrpOp/YoSMBs+m6T5hN52zMxX2mlr+k7jddC+AMM8j9LIC19CvHiS5DtwB20RP8h8cvrFr+SLjfWACr7TfuM/5bU22f0QigBbBaan6+nIAFsJv+MHLkSIYOLd305I5TTsBsuu4PZtM5G3Nxn6nlr6j7jUcAu+o3ngKu5RP1YxwLYBg/xzYBEzABEzCBzAl4BBAsgGHdzgIYxs+xTcAETMAETCBzAhZAC2Bop7MAhhJ0fBMwARMwARPImIAF0AIY2uUsgKEEHd8ETMAETMAEMiZgAbQAhnY5C2AoQcc3ARMwARMwgYwJWAAtgKFdzgIYStDxTcAETMAETCBjAhZAC2Bol7MAhhJ0fBMwARMwARPImIAF0AIY2uUsgKEEHd8ETMAETMAEMiZgAbQAhnY5C2AoQcc3ARMwARMwgYwJWAAtgKFdzgIYStDxTcAETMAETCBjAhZAC2Bol7MAhhJ0fBMwARMwARPImIAF0AIY2uUsgKEEHd8ETMAETMAEMiZgAbQAhnY5C2AoQcc3ARMwARMwgYwJWAAtgKFdzgIYStDxTcAETMAETCBjAhZAC2Bol7MAhhJ0fBMwARMwARPImIAF0AIY2uUsgKEEHd8ETMAETMAEMiZgAbQAhnY5C2AoQcc3ARMwARMwgYwJWAAtgKFdzgIYStDxTcAETMAETCBjAhZAC2Bol7MAhhJ0fBMwARMwARPImIAF0AIY2uUsgKEEHd8ETMAETMAEMiZgAbQAhnY5C2AoQcc3ARMwARMwgYwJWAAtgKFdzgIYStDxTcAETMAETCBjAhZAC2Bol7MAhhJ0fBMwARMwARPImIAF0AIY2uUsgKEEHd8ETMAETMAEMiZgAbQAhnY5C2AoQcc3ARMwARMwgYwJWAAtgKFdzgIYStDxTcAETMAETCBjAhZAC2Bol0tHANvaQD+dhWmnhd69f/qb9nb47387j9OvH+inszB+PEya9NPf9OoF/ft3Hsfl+5GL+UUs2ttp/+q/fPklfPHF//58Or4f+lEXXWABWHBBWGghmGMOmOK/7n8lfv78xh8r/30p/t+X7t45oW/dhOJbAC2AoV0peQHUH7+hQ+HBBzsv24svwhJL/PR3Y8bAkkt2HueYY+CPf+z8d0rrpZd++rvFFwel2VlQWsOHu3wi0GT87jvrRW769xK8/z58/vmPP3OMG8Pj4zvvf2fNvQ+jVjuDvn1689Zb8MYb8MEHMPXU8PykJVik7af9b9KAxen1svvf5A+ZP78//q3x37+IRd7/Pq+xBowc2fXAQ+ibN4H4FkALYGg3Sl4Av/oKZpgB3nkHplfyHYJHACMgHqH8sWOkNMKrgeHnn4d77oF774XRo2GOhaZlnaG9J4/izTTTjz8zTtfOzP3+y4wzRgPHU0wRFe+rtq+Y7ax5+eTIL5m+34/9+dtvmSyDb48Zz1tvTIr+99vRv+nn62960X+O/pNHCldZBbbYAlZaKWr2yaPjHiGPAHsEOuLgGZAf/x7U+/Ohd9i88zJ5OqCzd1joWzeh+BZAC2BoV0pPAHP+4QkF5/j5JPDxx3DXXXDnndF/v/sO1l4b1lsvGpjWFG41QQI4w0kz8OVh/yuA3aXxww/wySfRSOHrr0cCesst0LcvbLppJINrrhn9fwcTMIGcESgNYuT8HWYBtACGfnIsgKEEHb+uBCZMgMcei4RPMzb/+hcss8yPwqdRtymnrL2ItQhgZ7lNnAgPPQQ33AA33RQNfG28MWy+eSSmGhh3MAETyAEBC2AOGqGyIsQTNZU97Kd+QsAC6E5RSAKaZj3hBLj22kie1l03kr4hQ2C22ZKrUlICWF4iTU0/9VQkg/p5991IAiWDkkJNTTuYgAnUiYAFsE7gq8/WAlg9s/IYyQughjYGDYoWXHW1CzeszI7dxAS0zk7id8UVsOWWcMAB0Yjf5LV1KYTxE8Yz6OJBjN5tNP37drGrPCBfTRdrD9ONN0Yy+MIL0fSw6rbjjjDNNAGJO6oJmED1BAryDvMUsKeAq+/c/xsjeQEMLZHjm0AnBP7zHzjxRLj88mgN3dFHw4ABjYdKI5uaIpbgvvceHHww7Lmnv0s1Xku7RiYQRsACaAEM60FgAQwl6PipEtD0qMTvssuiDRQSP50g0ehBI4N33BGdVqSNJAcdBMOG5XpTYqM3ietnArkiYAG0AIZ2SAtgKEHHT4WARr9aW+GSS6J1cRK/ro6JTKUAOUlUInj33ZEIvvxyNOW9zz5MPq7GwQRMoHkJWAAtgKG93wIYStDxEyWgA5pPOgkuugg23DA6Q3jgwESzKGRiEsH7749EUDud99sP9t/fG0YK2ZgutAkkQMACaAEM7UYWwFCCjp8IgQ8/jMTvwguj3bwSv6WXTiTphktEl+wcdxw88QTsu280KjjLLA1XTVfIBEygGwIWQAtg6AfEAhhK0PGDCGhk69JLoxGtddaJxE+7eh16JvDII5EI6r9aH3jggTD77D3H8xMmYALFJ2ABtACG9uLkBVDX+GjxVktLru9RDAXn+OEEvv462uGqmzL++tdIAPMW2ia20TqqlZbBLfTr0y9vxZtcHp24JBHUFLFGA488EqaaKpdFdaFMIP8ECvIOswBaAEM/TMkLYEEO0QwF5/hhBJ57DrbeGn72M7jqKphzzrD00oqdxkHQaZX1ySdhr72iW0a0eUZ3EDuYgAlUSaAg7zALoAWwyp79k8ctgKEEHb8qApryPf/86Hy7ww6Dww+H3r2rSiLTh4skgAKjK+dOPz3aLPL738Pxx/uauUw7jDMrPgELYGHa0DeBhDWVBTCMn2NXQUB3q//ud9GatauvhjXWqCJynR4tmgCWML3yCuy6K3zwAVx8May1Vp0AOlsTKBoBC2BhWswCGNZUFsAwfo5dIQHdfasp30UXhSuvTPa+3gqLUNNjRRVAVVZ3Dp97bjTKuv32cMopPki6pk7gSM1FwAJYmPa2AIY1lQUwjJ9j90BAU75nnRVJyFFHwaGHpndvbxqNUWQBLPF4881o5FWjgjpmZ/310yDlNE2gQQhYAAvTkBbAsKayAIbxc+xuCHz+OeyyC2j079prYdVVi4erEQRQ1CXi2hiitZe6Uu+MM2DmmYvXHi6xCaROwAKYOuKkMrAAhpFMXgDb22HsWBgwIN+r+8O4OXYPBB5/HLbZJrrF4/LLi3tQcfukdsaOG8uAWQfQu1eOd6tU2CN1t7KO3tGO4REjYIstKozox0ygWQgU5B3mXcDeBRz6kUxeAENL5PiFJqB1Z9qFqgOddTadzqWbwl/TctWmGg3UJhzdIrL22nDOOT5AOlcN5MKYQAUELIAWwAq6SbePWABDCTr+/ycwYQJstx08/TRcdx2suKLh5JnARx/BPvvAfffBFVfABhvkubQumwmYQDkBC6AFMPQTYQEMJej4kwlI/rTL9z//gbvv9vqyInULHcS9++5wxBHR2YwesS1S67mszUrAAmgBDO37FsBQgo5v+WuAPvDss7DZZjBoEFx2mQ+PboAmdRUanIAF0AIY2sUtgKEEmzy+R/4apwN88glstRVo9/ZNN8GCCzZO3VwTE2g0AhZAC2Bon05eAAuygyoUnOM3x7Rvo+0C7qnffv89HHRQdD/z9ddHm0QcTKCpCBTkHWYBtACGfi6TF8CCnKEUCq7Z4zfLyF+jnANYbX/VNPDee8MJJ8B++3ldYLX8/HyBCRTkHWYBtACGfsosgKEEmzB+s8ifmrZZBVB111mOOidwnXXgggtg6qmbsLO7ys1HwAJYmDb3CWNhTWUBDOPXdLGbSf6aXQBV/w8+iCRw4kS44QaYd96m6/KucLMRsAAWpsWLLIBLAScBywBzAOsA93VBfjrgBUB/fqfUPe/dtJDSPRtYDvgCuAgY3sXzFsDCdPX6F7TZ5M8CGPW5tjYYNgz++U/4xz9g8OD690WXwARSI2ABTA1t0gkXWQAHALod9VngSWBINwJ4CTA3sG4PAtgfeBW4FDgWWAy4AzgV+HMn8C2ASffIBk2vGeXPAvhjZ9btIeedB4ccAqedBnvs0aAd3dUyAQtgYfpAkQWwHLJG9LoaAdwYOBJoAe7uQQB3Bk6OZbE0SrgvsA+wqAWwMP06VwVtVvmzAP60Gz70EGy5JWy+OZx9NvTtm6uu6sKYQDgBC2A4w4xSaHQBnAV4GlgfmD0eIexuCvh04Bfx86UmWBkYBcwAjO/QLsmPAGq+qLUVWlqgX7+MuoGzSYtAM8ufmLZNbKN1VCstg1vo18f9WUx024sEcNpp4ZZbYMYZ0+p9TtcE6kCgIO8w7wLO5y7gywCNxP1A5+V7APhVh27d1QjgdcBzQCuwRgUCeDEwLbBtWfqaah4Trx98P3UBrMPn1VmmQ6DZ5S8dqo2R6jffRIdGa5PIyJEw22yNUS/XwgSKQsACmE8BnAaYqptO9D3wdQUCuA1wEDAo3vSxJnAvoEmX9i7Sr2kEcNiwYfSN53KGDh2Kfhyam4Dlr7nbv5Laq49svz2MGQP33ANza5WygwmYQGoERo4ciX4UJkyYwLnnnqv/qdm9r1LLNMcJN/IUsEYStwS+i/lr6ldTtuNiMbyyk3bZCTilwxrA/YC9M1sDmOPO4qJVTmDPPeGxx+C++2DmmSuP5yebi4COh/nd70BrAyWBvj6uudrfta0fAY8A5nMEsJoeoUVFkthv4nV7mh6eGI/wyeo1nVsKqwCaEp4f+BT4tpOMtAv4lXgX8Amx9N0GnJbZLuBqau9nc0ng8svh4IPh6adhfvU2BxPohsCkSdFtITfeGEngAC06cTABE0iVgAWw2AKoV+ub8VrB8o6iM/t0hEvH0NkawO2A8+ORwdLzSwIj4nMAvwTOA47roicmvwkk1S7vxNMm8MwzsNpqcNNNMEQHEzmYQAUEdEzMEUfAxRfD3XfD0ktXEMmPmIAJ1EzAAlhsAay54ROMaAFMEGbRk/r0U1huueiMt8MOK3ptXP56ENABAKecAnfcASutVI8SOE8TaA4CFkALYGhPT14Ax4+HQYNg9GjorxlphyIQaG+H9dePmky3PUzRKKtrA+GPnzCeQRcPYvRuo+nf1/25EpznnAOHHx6NIv+q43kHlSTgZ0ygngQK8g6zAFoAQz8myQtgQQ7RDAXXaPE1fSfxe+IJmF69wmEyga/avmKGk2bgy8O+ZPp+BlNpt9A60r33huuugw03rDSWnzOBHBAoyDvMAmgBDP20WABDCTZA/Jtvhh13hMcfh8UXb4AKJVgFC2DtMP/+d9h5Z7jsMvjNb2pPxzFNIFMCFsBMcYdk5omqEHrRsTJffvnll0yf1LBPQT48YdgaJ/Yrr8CKK0aL93Wwr8P/ErAAhvWI22+P5O+ss2CXXcLScmwTyIRAQd5hHgH0CGDo58ECGEqwwPFLS100RaeF+w4/JWABDO8VDzwAm2wCxx8P++pmcgcTyDMBC2CeW+d/yuYRwLCmsgCG8StsbB3bsfXWMG4c3HUX9OlT2KqkWnALYDJ4tSdMm4x0vqQ2iDiYQG4JWABz2zQdC2YBDGuq5AWwIDuowrAVP/Zpp8GZZ0aHPc8+e/Hrk1YNvAs4ObLPPx+dLTlsGBx9dHLpOiUTSJRAQUnf3hYAACAASURBVN5hngL2FHBov09eAENL5PipE7j/fthoI9B/tf7PwQSyIqB7g1dfHf74R9hnn6xydT4m0HgELIAWwNBebQEMJViw+O+8Ex32fMIJ0R2uDiaQNQFNB2sk8LzzYPvts87d+ZlAYxCwAFoAQ3uyBTCUYIHit7VFoy8DB0a7fh1MoF4EdF3cZpvB9df7nMB6tYHzLTYBC6AFMLQHWwBDCRYovq5405q/hx+GqaYqUMFd1IYkoHMCf/vb6No43T/tYAImUDkBC6AFsPLe0vmTFsBQggWJf+mlcOihkQDOP39BCu1iNjyBiy6CQw4BHRXzy182fHVdQRNIjIAF0AIY2pksgKEECxD/qadgjTVAN36ss04BCuwiNhWBk0+G00+HUaNg0UWbququrAnUTMACaAGsufPEEZMXQC00a22Flhbo1y+0fI4fSEAnGmjN3+67w2GHBSbWhNHbJrbROqqVlsEt9Ovj/pxWF9DotNYDPvIIzDNPWrk4XROogEBB3mEWQAtgBb2520eSF8CCHKIZCq4o8Q84IJr21RRbr15FKXV+yumDoLNpCx1Mrl3pjz0GDz0Es8ySTb7OxQR+QqAg7zALoAUw9NNrAQwlmOP4Om5jrbXg2Wfh5z/PcUFzXDQLYHaNM3FidDvNe+/BPfdA//7Z5e2cTOD/E7AAFqYz+CaQsKayAIbxy23sCRNg+eWjF+oRR+S2mLkvmAUw2ybS7Jvupp5iCrj1Vq8iyZa+c5tMwAJYmI5gAQxrKgtgGL/cxtZBz9ddB9oA0rdvbouZ+4JZALNvoq+/hrXXjnarX3st9O6dfRmcYxMTsAAWpvEtgGFNZQEM45fL2GPHwrLLRuv+fNVbWBNZAMP41Rr700+jswFXXRUuvDAaEXQwgUwIWAAzwZxEJv6zEEbRAhjGL3exJ02CNdeMrns744zcFa9wBbIA1q/J3n03EsBtt4WTTqpfOZxzkxGwABamwS2AYU2VvAC2t4OGoAYM8NxNWNvUFPuCC6JTeF580YvoawLYIVL7pHbGjhvLgFkH0LuX5yKTYFpNGq++CoMHw8EHRweZO5hA6gQK8g7zLmDvAg79LCQvgKElcvyaCWj35OKLR2v/1luv5mQc0QRyRUC72DWqrVtDfvObXBXNhTGBuhGwAFoAQzufBTCUYE7i6xy1zTeH6aaDK6/MSaFcDBNIiMBtt0U72rWuVbvbHUyg2QlYAC2AoZ8BC2AowZzE//vfYc894eWXYdZZc1IoF8MEEiRw2mnRlXFPPOHbQhLE6qQKSsACaAEM7boWwFCCOYj/+efwi1+AXpDbb5+DArkIJpACAY1y77orvPACPPggTDNNCpk4SRMoCAELoAUwtKtaAEMJ5iD+brvB+++Dpsl8XEYOGsRFSI2ADopeZ51oBPCaa9zfUwPthHNPwAJoAQztpMkLYEF2UIWCy0v8++6DTTeNdv3q4FyHZAl4F3CyPJNI7eOPo/MtNRp41FFJpOg0TKCMQEHeYRZAC2Do5zZ5ASzIGUqh4PIQ/9tvYeBA2Hff6McheQI+BzB5pkmkqGlgnRF42WXw618nkaLTMIGYQEHeYRZAC2DoZ9YCGEqwjvEPOyzaFfnIIz5yMa1msACmRTY83Vtuida8aj2gbr5xMIFECFgAE8GYRSI+CDqMsgUwjF/dYutsNI2AaEfkkkvWrRgNn7EFMN9NfPLJcPbZ8OSTMNdc+S6rS1cQAhbAgjSURwBDG8oCGEqwDvEnToRBg2DDDeHYY+tQgCbK0gKY78bWzuDf/ja6fEij4VNPne/yunQFIGABLEAjRUX0CGBYU1kAw/jVJfapp8Ill8Bzz0G/fnUpQtNkagHMf1N/9x386lew4ILw1796Z3D+WyznJbQA5ryBfiyeBTCsqSyAYfwyj/3667DUUjByZHRHqkO6BCyA6fJNKvWPPoIVVoA99oDDD08qVafTlAQsgIVpdgtgWFMlL4A6qKu1FVpaPDwV1jY/ia3priFDYLHFYMSIhBN3cp0SaJvYRuuoVloGt9Cvj4db89xNNCK+2mpwxRXRtYgOJlATgYK8w7wL2FPANfXvskjJC2BoiRy/SwJ6sWl0Y8wYmGEGgzIBE+hI4MYbYaed4OGH4Ze/NB8TaFwCFkALYGjvtgCGEswovs7808jfKafAtttmlKmzMYECEjjxRDj//GiH/JxzFrACLrIJVEDAAmgBrKCbdPuIBTCUYEbxtfHj6qvhqaegV6+MMnU2JlBAAloqseOOoPWy998PU01VwEq4yCbQAwELoAUw9ENiAQwlmEH8L76AhRaK7j4dOjSDDJ2FCRScgHYGr7EGLL54dFuIgwk0GgELoAUwtE9bAEMJZhBf6/4efxzuvddHXGSA21k0CIH33oNlloGTToJddmmQSrkaJhATsABaAEM/DBbAUIIpx3//fVh00eiQWx1z4WACJlA5gXvugc02g0cfjY5PcjCBRiFgAbQAhvbl5AVw/PjomorRo6F//9DyNX18nWv26afwt781PYq6ABg/YTyDLh7E6N1G07+v+3NdGiEw0+HD4aqrovWz0+svnoMJdEegIO8wC6AFMPSDnLwAFuQQzVBwWcR/5RVYeml4/vloB7BD9gR8EHT2zJPOsb0d1lsPZpoJrrvOyyiS5ttw6RXkHWYBtACGfvYsgKEEU4y/1VYw88xwwQUpZuKkuyVgAWyMDvLxx9F6QJ1Pv/fejVEn1yIlAhbAlMAmn6xvAgljagEM45da7CefhDXXhH//G+aeO7VsnHAPBCyAjdNFRo2KdtF7PW3jtGkqNbEApoI1jUQtgGFULYBh/FKJrXPM1lkHVlwxulXPoX4ELID1Y59Gzn/6E5x7LjzzTDS67mACPyFgASxMp7AAhjWVBTCMXyqx77oLttkG3ngDZpwxlSycaIUELIAVgirIY5MmRbuC9SXr5pt9qHpBmi3bYloAs+UdkJsFMAAekLwAFmQHVRi29GLrBbX88tF1b4cckl4+TrkyAt4FXBmnIj31+eew7LKw555w6KFFKrnLmgmBgrzDvAnEm0BCPw/JC2BoiZo8/rXXRuL36qsw9dRNDsPVN4GUCJTW2N55J6y2WkqZOFkTSJGABdACGNq9LIChBBOMP2FCdHWVdiruumuCCTspEzCBnxDQWsATT4Rnn4XZZzcgEygWAQugBTC0x1oAQwkmGH/ECDjnnOjcvz59EkzYSZmACfyEgNYBaq3tZ5+BRgJ79zYkEygOAQugBTC0t1oAQwkmFF/LThZZBM4/P1qk7mACJpA+ga+//nHN7R//mH5+zsEEkiJgAbQAhvYlC2AowYTiH3883H47PPKIbypICKmTMYGKCGjEfZVV4MYbYciQiqL4IROoOwELoAUwtBNaAEMJJhD/k09g4YXh1lth9dUTSNBJmIAJVEXgssvgD3+I1gPOM09VUf2wCdSFgAXQAhja8ZIXwLa26PRi7WTo1y+0fE0R/4ADol2/t93WFNUtVCXbJrbROqqVlsEt9Ovj/lyoxquysP/3f/Daa3DffTDllFVG9uONQ6Ag7zALoAUw9EOXvAAW5BDNUHBJxX/7bRgwAEaPhqWWSipVp5MUAR8EnRTJ/KfzzTcwaBCsvz6cckr+y+sSpkSgIO8wC6AFMPQTYAEMJRgYf+edQYc/X3llYEKOngoBC2AqWHOb6CuvwAorgM7j3GCD3BbTBUuTgAUwTbqJpu2bQMJwWgDD+AXFfuGF6L7fl16CBRcMSsqRUyJgAUwJbI6TvfxyOOww0OdzttlyXFAXLR0CFsB0uKaQaqgAXlphmXap8LmiPWYBrGOLbbwxLLQQ/PnPdSyEs+6WgAWw+TqIzgfcaiuYODHaGTxF6Fum+RAWu8YWwMK0X+hHs3zirS+wOfA88CawALA0cAOwTWGIVFdQC2B1vBJ7etSoaIrp9dc9ypAY1BQSsgCmALUASX76KQwcCMceC7vtVoACu4jJEbAAJscy5ZRCBbC8eBcBTwD6bynoo78i8PuU61Gv5C2AdSCvEYbBg2HoUDj66DoUwFlWTMACWDGqhnvw7rthiy3gmWdg0UUbrnquUFcELICF6RtJCuBngFZ8tJfVXpcDfQLMXBgi1RU0eQFsb4exY6Otrb5bqdPWuPde2HpreOst6N+/ugbz09kSaJ/UzthxYxkw6wB69/JdYdnSr39uOqLp0UdBI/Y+Gqb+7ZFJCQryDvMu4GR3Ab8N/AYYXdbJBgF/A+bLpONln0nyAph9HQqX43rrRcdNDB9euKK7wCbQVAS++y66Ku7Xv/bntakavgCVtQAmK4CHAIcB2hhSWgOozR86EapRT4WyAGb8Qde1U5I/nf83++wZZ+7sTMAEqibwr39FV8Xdcw+svHLV0R3BBFIhYAFMVgDVSNsBvwV+BrwL/AW4KpXWy0eiFsCM22GnnWCaaeD88zPO2NmZgAnUTOC002DECHjuOZhuupqTcUQTSIyABTB5AUyscQqSkAUww4Z6911YZJHofDEvKs8QvLMygUACOqx9nXWi8zovuSQwMUc3gQQIWACTF8C5gR3iNX9aE3g18F4CbZXXJCyAGbbMIYdEx77coIOFHEzABApF4J13ousaJYDaHexgAvUkYAFMVgB13Ms9wBvAa8DC8c868fEw9WzrtPJOXgALsoMqLaBdpfvllzDvvHDnndF6IodiEPAu4GK0U1alvO462GuvaBR/bg0XODQegYK8wyyAyQrgg8DNwOllPfqA+HDo1Ruvl0+uUfICWJAzlLJuz1NPjW4VeOSRrHN2fiEEfA5gCL3GjLvjjvDxx3DHHdCrV2PWsalrVZB3mAUwWQH8FJgDmFjW+acEPvI5gFX8OSjIh6eKGgU/OmFCdOXbOefAZpsFJ+cEMiRgAcwQdkGy0mi+poIPPhj22acghXYxKydQkHeYBTBZAdTU79rxETClzrIgcH98LVzlHag4T3oEMIO2uuIKOP746HxsjxhkADzBLCyACcJsoKQeegjWXx+eeAKWWKKBKuaqgAWwML0gyZtATgbWA46I1wFqDeCxwF3AHwpDpLqCWgCr41X107r2bemlYdgw2H33qqM7Qp0JWADr3AA5zv7ww6Np4Mcfh379clxQF606AhbA6njV8ekkBVAf4VMBHf48NfBdfCj0QUBbHeuYZtYWwDTpAiNHgtYM6eDnqdWrHApFwAJYqObKtLBa2qGDoXU8zMkaPnBoDAIWwMK0Y5ICWKq00pwVGAf8UBgStRXUAlgbt4pj6eWwxhpw1FEVR/GDOSJgAcxRY+SwKFrWoavibr0V1lwzhwV0kaonYAGsnlmdYiQtgEpvhbJzAJ9KUQKXAk4Clok3n+i4mfu64Kiz518A5gW0MWVSN7z1O41eajOL6iOJ1QVGYzqJk7wAtrVBayu0tDT9vMgzz8Bqq0Wjf7PqK4VD4Qi0TWyjdVQrLYNb6NfH83yFa8AMCqwbQvQnT9c8zjRTBhk6i3QJFOQd5k0gyW4CmQu4BVgW+BzQR/kZYFPg/RR63ABgVeBZ4ElgSDcCqLPnderUuhUKoDazaPNKTyF5Aewpxyb6/fbbRy8E7f51MAETaEwCWue74YYw44xwta4OcDCBDAhYAJMVwGvjEbM9gc/io1/OBXTS09Ypt6dG7boaAdwYOBJoAe6uUAC7G00sr4oFMKWG1ajfYovBSy/BwtpO5GACJtCwBD78EBZfHC691Ec9NWwj56xiFsBkBfAD4OfAV2XtPAPwCjBnym3flQDOAjwNrA/MHo8QVjIF/GEsirrO7nzg4i7KbwFMqWEPOAB09+/f/pZSBk7WBEwgVwSuvBIOPRTGjIGZZ85V0VyYBiRgAUxWACVNiwDjy/qK1t7pWjgdEF1puAzYOV5719kaxQeAX3VIrCsBvA54DmgF1qhQANcCHgXa42nlq+LRwws6qYAFsNJWreK5zz+H+eaDe++FFXXBoIMJmEDDE9BU8MYbwyyzwF/+0vDVdQXrTMACmKwASra+B/aKRwE1+qfVW1r5/Zsq2noaYKpunlceX1cggNsAOoJmULzpQ3vM7gX6xnJXaZGOjtcODrYAVoos7LmTTorOB3tQlws6mIAJNA0BjfovuWS0FnCDDZqm2q5oHQhYAJMVQG2yuA0YGK8B1CaQF4GNgPdSbt/ORgA1krhlvKNX2WvqVyN2Op5GYnhlhWWSAA6NN5x0jDJ5BHDYsGH07SuvhKFDh07+caiNgDaQLbAAXHhhNBrgYAIm0FwELrkEjjkmmgqeQcMIDiaQEIGRI0eiH4UJEyZw7rnapoB6WfnStYRyy38ySR8Dow0fGnH7GfAO8EQPR66EEtLoourwTbzOT9PDOr5F07dq1GnLMlgF0Cjl/IDuLf62k8x1pIzS05ExkkrtBr4GkARO7ikdQvJTwOPHw6BBMHo09O8fyqdw8S+7DE45Jfrj72vfCtd8Pynw+AnjGXTxIEbvNpr+fZuvPxe/BbOvgaaC9R269EUw+xI4xyACBXmHeQQw2RHAoD5TQ2SJ3JudnDM4PL6CrmOSna0B3C7e5CGRU9Bo5SmxwEoktQlkBHBRF+VLXgALcohmDe3VY5RJk2DgQDjwQNh11x4f9wMFIOCDoAvQSDksok4B0FTwjTdGN4U4FIhAQd5hFsBkBVBf7zW1qmX72vxRHlYvUPetpqgWwGpo9fDsbbdF4qc//r4bNEGwdUzKAlhH+AXPWgdEazbgxRebcjKkuK1nASxM2yU5BXw98EvgJuC/HQhoVK4RgwUwwVZday0YMgR0SbxDYxCwADZGO9ajFpoRWHttWGIJHwZfD/4152kBrBld1hGTFEDd/qHbOT7KuhJ1zM8CmBD8p56K7gJ95x1fB5UQ0lwkYwHMRTMUthCvvw5LLw233w6rN+o8UmFbp4uCWwAL06JJCqDW4+kg6AmFqX14QS2A4Qwnp7D11jDXXHDmmQkl6GRyQcACmItmKHQh9DdB10HqruBpdEiYQ74JWADz3T5lpUtSAH8fC+AhKe/8zRPc5AWwIDuokmyEN96AX/wCXnkl2vnn0DgEvAu4cdqyXjVpb49G/1ZaCU47rV6lcL4VEyjIO8ybQMI3geiolx/KOsZc8WHQOmuvPMxXcecp1oPJC2Cx6p9IaffdFz75BK7RgTsOJmACJtCBwNixsNxycM89sPLKxmMC4QQsgOECqCvbKgmNerGPBbCS1u/mmU8/ja59e+ih6A+8gwmYgAl0RkA7gnVO6LPPwlTd3RVlfCZQAQELYLgAVoC5oR+xAAY27wknRHf+3ndfYEKObgIm0NAEJk6EVVaJdga36nZ3BxMIIGABDBdArdh6K26DhbppizcC2inPUS2AAa2jtT1a86fbeDbZJCAhRzUBE2gKAjoTcMUVoxmD5Zdviiq7kikRsACGC+DXZYc+6+o0rQcsbSwp/W/9t3dKbVjvZC2AAS2gg59///vo4Oc+fQISclQTMIGmIXDccfC3v4GOjoqvYG+auruiyRGwAIYL4Lzxnb9qFV3N1lXQlWqNGCyAAa262WbR1W/6g+5gAiZgApUQ+P77aBRw003hj3+sJIafMYGfErAAhgtgs/er5AWwrS1a4NLS0tD3oX3wAcw/P7z6qo9+aeQPUdvENlpHtdIyuIV+ffo1clVdtwwJPPdctB7wsceig6IdckSgIO8wC2C4AO5SYbe7tMLnivZY8gJYkEM0QxtKjvvAAzByZGhKjp9nAj4IOs+tU+yyHXUUaBnJ6NEw5ZTFrktDlb4g7zALYLgA6vaPnoLWAHa3QaSn+Hn+vQWwhtbRHZ+LLgonnwxbbllDAo5SGAIWwMI0VeEKqoEmHR21ww5w2GGFK37jFtgCWJi2TfImkMJUOsGCWgBrgKljX7bdFt5914u4a8BXqCgWwEI1V+EK++ijMGQIaHfwggsWrviNWWALYGHaNQ0BVJpzAh8UhkLtBbUA1sBum21g3nnhT3+qIbKjFIqABbBQzVXIwu6+O7zzTjQdPEUab7RCUqljoS2AdYRfXdZJflx0TfeZwE5AOzAtsCmwJHBCdcUqzNMWwCqbatw4mGee6GL3n/+8ysh+vHAELICFa7LCFfjzz2HAADjnHNhqq8IVv/EKbAEsTJsmKYDnAosCw4HbgBkBHRNzRyyBhYFSRUEtgFXA0qNnnAE33QQPPlhlRD9eSAIWwEI2W+EKfdVVcPDBoDuDZ5ihcMVvrAJbAAvTnkkK4DuANuR/Fv/MHFP4HJipMESqK2jyAqjrMfRXTF9pezfW+dk//ABLLAGHHx4t3HZofALtk9oZO24sA2YdQO9ejdWfG7/1ilND/W1Zd91oVkEjgQ51JFCQd5h3AYfvAi7vZR8CPwMmlgng1MDrwNx17I5pZp28AKZZ2jqn/cgjsNFG8P77MLV6hoMJmIAJJETgtdeiMwHvvz86KNrBBLojYAFMVgD/CdwNnFUmgHsCQ4AtGrQrWgCraNjf/hammw7OPruKSH7UBEzABCokoFuFbrgBnnzS10tWiKxpH7MAJiuAA4CHgH8Duqb7YWAZYGXg1QbtZRbAChv2iy9g7rnh8cdhqaUqjOTHTMAETKAKAjobUKOAumP8wAOriOhHm46ABTBZAVQHmiXeBazNIJoSvqzsruBG7GAWwApbdcQI+MtfolP7HUzABEwgLQK6YWjjjWHMGJhvvrRycbpFJ2ABTFYAJUNfddIpdDxnJTeGFLE/WQArbLVll4W99oLddqswgh8zARMwgRoJaLmJZh104oCDCXRGwAKYrADeBawHTCqDPQcwKj4ephF7YfICWJAdVNU05tNPw5prwgcfQP/+1cT0s0Un4F3ARW/BYpZf541qR/Cll8KmOo3WITsCBXmHWQCTFcAb49s/9op7mk5jegC4Dzgou96XaU7JC2BBzlCqhvIee4Du/73wwmpi+dlGIOBzABuhFYtZB8nfMcfASy9Fm88cMiJQkHeYBTBZAdTNHxrtuxy4IN4R/Aawc0bdrh7ZWAB7oD5+fLT54557fDRDPTpovfO0ANa7BZo3f50NqJmH5ZaD009vXg6Z19wCmDnyWjNM8iBolUE3fzwWjwTqLuDNOkwJ11rOvMazAPbQMvoW/uc/w3PP+Z7OvHbiNMtlAUyTrtPuicDLL0cCqDNIl9GZFA7pE7AAps84oRxCBfBXnZRjJWAY8Hvg2/j3mgZuxGAB7KFVV14Ztt8e9t67EZvfdeqJgAWwJ0L+fdoEjjwS7roLHnus4S5XShtdbelbAGvjVodYoQJYvuGjq+L/ADTqHVAWwG467YsvwgorRDd/zNSolwHW4UNbpCwtgEVqrcYs67ffwsCBcMABMExDEw7pErAApss3wdRDBTDBohQyKQtgN822//7w2WdwxRWFbFsXOgECFsAEIDqJYAIaAdxqK9CUsNYkO6RIwAKYItxkk7YAhvFMXgB1lH1rK7S0QL9+YaWrY+zvvoN55onO4VpttToWxFnXlUDbxDZaR7XSMriFfn2K25/rCtGZJ0Jg221BJ5Rcf30iyTmRrggU5B3mXcDhu4CPAE6I+8Gx3Xwijm7QT0vyAtggoK6+Go49NvrGPYW/ZjRIq7oaJlBcAh9+CAMGwDXXwPrrF7ceLnkyBCyA4QJ4O7BB3Bz3d9EsWgPY2WaRZFqxvqlYALvgv9ZasOGGcPDB9W0g524CJmACJQLnnQennBJdEzfNNObSzAQsgOEC2Mz9R3W3AHbSA/79b1hySXj3XZhttmbvIq6/CZhAXgjoQPpVVgF9QdVKG4fmJWABtACG9n4LYCcEDzsM3njDa21CO5fjm4AJJE/gX/+ClVaCZ56BX/wi+fSdYjEIWADDBfBhQFO8PYXVe3qgoL+3AHZouO+/h3nnhSuvhCFDCtqqLrYJmEBDE9hvv+iKOO0O9hrlhm7qLitnAQwXwGMq7DrDK3yuaI9ZADu02A03ROv+XnsNevUqWnO6vCZgAs1A4IsvYLHF4PzzYYstmqHGrmNHAhbAcAFs9l6VvADq8txBg2D0aOjfv3B8tbtu8GA4QvvDHZqewPgJ4xl08SBG7zaa/n2L15+bvgEbGICuqRw+PDqpwBtCEmzogrzDLIAWwNBen7wAFuQQzc7Avf02LLoovPlmdAaggwn4IGj3gbwS0IYQXVW53nqRCDokRKAg7zALYLICqGvhOlsP2Aa8DfwVOAX4PqFulodkLIBlrXDMMfDss3DLLXloGpchDwQsgHloBZehKwJPPglrrAG6tnKhhcwpEQIWwEQwZpFIkkf0HgDsAZwFvAUsAOwDXBJL30GALgVrpMlBC2DcS3XC/gILwIgRsPHGWXRd51EEAhbAIrRSc5dxt91g3Ljo1iKHBAhYABOAmE0SSQrgE8AOwKtlRV8sHvlbEVge0CU8jfQ9ywIYN/add8Kuu4Kmgfv0yabzOpf8E7AA5r+Nmr2En3wSbQjRDSGaDnYIJGABDASYXfQkBfBLYBZgYlnxpwQ+jQ9M1j+PBxppJbgFMG7snXeODn0+9dTsOq9zyj8BC2D+28glhLPPhnPOgRdegL59TSSIgAUwCF+WkZMUQI0A3lx2N7Dq0QJok/0KwM+A0UAjbQ9IXgALsoOqvJN+9x3MPjvcdx8sr3FeBxOICXgXsLtCEQhMnAjLLgs77ACHHlqEEue4jAV5h3kTSLKbQDTNq7uBJwDvAPMC+i6lu4Ilh7oPeAAwIsddt9qiJS+A1ZYgB8/feCMccgjoCjgfqpqDBnERTMAEqibw4IOw0UYwdqxPMagaXgEjWACTFUB1gRkAbQGYG3gPuBXQ1HCjBgsgsPXW0fEvxx/fqM3sepmACTQDgW23jQ6wv+qqZqhtc9fRApi8ADZbj2p6AdRov6Z/n3gCllyy2Zrf9TUBE2gkAu++G90PfNttsHqjXmDaSA0WUBcLYPICuG98FMx8wH+AC+JjYSq5LzigKesWtekFUDvnTjghOkfLTo8SjQAAIABJREFUwQRMwASKTuCkk6IdwU8/7RMNit6W3ZXfApisAOqcvwOBPwGvAYsABwNnAo26N7TpBXDTTWHFFX31WyP/oXTdTKCZCLS1wcCBsN9+MGxYM9W8uepqAUxWAMcC2wHPlHWjZYDrAJ0H2IihqQXw889hzjlhzBhYRLrvYAImYAINQOCOO2C77eDVV6PjrRwaj4AFMFkB/AKYGdCVcKXQC/gMmLHxus/kGiUvgPr62doKLS3Qr1+useky9fPOA12n5GACnRFom9hG66hWWga30K9PvvuzW9AEyglsskn0BffCC82lKgIFeYdZAJMVwKeAVuAfZZ1lc+BIYLmqOlBxHk5eAAtyiKaaaN11YehQOEiT/w4m0AkBHwTtblFUAq+/Hk0FP/SQzzetqg0L8g6zACYrgBsCN8RHv7wOLAzo37aM/62qPlSQh5tWAD/+ODor6403YF6d+OhgAhZA94EGI3DUUXD33fDoo9HxMA4VELAAVgApH48keROIaqQbP3aND4HWYdCXxodA56O2yZeiaQVwxIhop9zDDycP1Sk2DgGPADZOWzZjTb75JjoWZvhw+O1vm5FADXW2ANYArT5RkhbA+tSifrk2rQDqjCwdAO1dcvXrfEXI2QJYhFZyGbsj8Pe/R3/ntCFkBl114NA9AQtgYXpIqADqerdKwn2VPFTAZ5pSAHVY6oILgv47xxwFbDUXOTMCFsDMUDujlAj88AMMGRKtBzzjjJQyaaRkLYCFac1QASzf8dtVpXUIdO/CEKmuoE0pgKefDjomQWtjHEygOwIWQPePRiDw0kuw3HLw1FOwxBKNUKMU62ABTBFuskmHCmCypSleaskLYHt7dBv5gAHQO5/erIOf99gDdtmleA3mEmdLoH1SO2PHjWXArAPo3Suf/TlbIs6tqAQOPBCefz764juF35xdN2MB3mEqvHcBJ7sLuKif65ByJy+AIaXJIK6ORlh8cfjwQ5hppgwydBYmYAImkAMCX3wBiy4KOv90441zUCAXIYiABdACGNSBUjkIOrREKcc/8UR4/HG45ZaUM3LyJmACJpAzAjr94M9/hhdegL59c1Y4F6cqAhZAC2BVHaaTh5tuBFALoXVJia5JcjABEzCBZiIwcSIsvTT8/vfRXcEOxSVgAbQAhvbephLAF18Erf/TIdD9+4eic3wTMAETKB6BO++MvgC/9hrMrMtPHQpJwAJoAQztuE0lgDoV/5VX4PrrQ7E5vgmYgAkUl8D668Nii0XTwQ7FJGABTF4AVwF0XvpcgJbJLgtMA4wqZhfpsdTJC2BOd1DpLCz9wTv5ZNhiix65+AETmEzAu4DdERqRQOlYmOeeg5//vBFrGFCnnL7DOtbIApisAG4NXAhcB2wTb5BYHjgFqPTA6IBeV5eoyQtgTs9QevppWGst+OgjmHrqurB2pgUk4HMAC9hoLnJFBHQ7yH/+A//8Z0WPN89DOX2HWQB/2gWTPM3oBWB34FHgc0CHhPQDdCfw7A3a+5tGAA85JFr795e/NGhLulqpELAApoLVieaAwLhxsMgioKvi1lknBwXKSxEsgHlpiR7LkaQAfgHMGOf4GaDlsUr/0/h/91iYAj7QFAI4aRIssABccAFo7YuDCVRKwAJYKSk/V0QCp50WfSl+9tncntufPVYLYPbMa8wxSQF8Dvg/4FmgJICaAj4f0H8bMTSFAD7yCGyySXT485RTNmIzuk5pEbAApkXW6eaBQFtbdDXcoYdGR8M4TL5iA2aYAb78EqbXKzKfwWsAk10DuBNwLHACcBqwF3AU8Efgmnx2geBSNYUA7rMPTJgQjQA6mEA1BCyA1dDys0UkcOON0dWY//53rn0nO7QWwOxYB+aU5AigiqIdwAcAiwIfANokf1ZgGfMcveEFUAefzjMPXHtttAnEwQSqIWABrIaWny0iAZ2QoL+NK60EJ51UxBokXGYLYMJA00suaQFMr6T5TDl5AdScQmtrdN1GP+2hqW+45x7YcUd4912vcalvSxQz97aJbbSOaqVlcAv9+tS/PxeTokuddwJaA7jqqjBmDCy4YN5Lm3L5cvYO66q2ngIOnwLuVWFXmlThc0V7LHkBzBmB3XaDaaf1gac5axYXxwRMIGcEdtkFxo/3Qfk5a5Yui2MBDBdAid0PFTR47wqeKeIjDS2AWvc3xxxw++2w8spFbB6X2QRMwASyIfDBB9Fh+XfcAYMHZ5Onc6mdgAUwXADXqBD/gxU+V7THGloAb70V9t4b3nwTpvBigaL1TZfXBEwgYwLHHw833wyjR0OvSufHMi6js4sIWADDBbCefWkpQEtulwHmAHQU530dCvQAoLGrtvhMQo1WHhofTdNV2ZXu2cBygM42vAgY3sXDDS2AO+wAP/uZFzbXs5M7bxMwgeIQ+Pbb6Gq4E06I1k475JeABTBcAFcHHoqbuLvr3jqKWRK9YgCwanzu4JPAkE4E8P64fMdUmGF/4FXg0vhIm8WAO4BT4x3NHZNpWAH85pto+vfhh+GXv6yQnh8zARMwgSYncPXV0bmAr7wSrZ92yCcBC2C4AH4NTBc3b1cbPTTqlvYaQOXd2QigBPBh4OgKu+DOwMnA3ECpPvsC+8RH2zSNAOp6oyOPhJdf9vRvhX3Hj5mACZgAOhZGa6Z1a9IxlQ49mFvmBCyA4QKYeaN1kWF3ArgkoNUYHwE3A8cD/+0indOBXwDlF55pCnkUMAMwvkO85EcAtY1s0KBoEUl/DUjWJ2y5JSy5JPxRx3g7mECNBMZPGM+giwcxerfR9O9bv/5cY/EdzQRqIvDYYzBkSDQKqHNUmyrk5B3WE3MLYLgA/geYLwY9Ir79oyfuPf3+MkAjcRo57Gzrgdb1dZxu7koAVwLGxmv5BgJ/AV4Btu2iEBcDGrQv/72mmscA8wLvpy6AOThEU0XQ9O8zz8AvpMMOJlAjAR8EXSM4Rys8gW23hb59o7uCmyrk4B1WCW8LYLgAfg7MBkzUphogiYv/pgGm6qYBvwc09VweuhLAjslozeI98bS1NoZ0DDWNAA4bNoy++qQDQ4cOnfxTc8jBh+fKK0GXnD+n250dTCCAgAUwAJ6jFprA229HX6AfegiWX77QVamu8Dl4h3VV4JEjR6IfhQkTJnDuuefqf2p2T/7SdCH0cI/bgdmBl4BtgGu7IKh7gtMM1QqgRPW7Tgqkcp7SYQ3gfsDema0BzMGHZ8MNYbXV4LDD0mwyp90MBCyAzdDKrmNXBI44IhJA/TTNUVo5eIdV0iM9Ahg+AjgjsAewcDxte1UX4P+vkgap4RndLSWJ/SZet6fpYY1GtsdiqiNitAlEv18CuBx4C9iqi7y0SElTxNoFfEIsfbcBp2W2C7jOHx5lP+us0eaPhdWqDiYQQMACGADPUQtP4OuvYdFFYcQI2GKLwlensgrU+R1WWSF9DqA4hY4AlrO+F1i7UvgJPDc/8GYnN5HozL5j47WJfwN0lIt2IX8I/KPDJpDt4jMBy6eutWlE6xl1DuCXwHnAcV2UN/lNIHX+8PztbzB8OLz4YgIt5CSanoAFsOm7QNMDuOACOP306G/qlFM2AY46v8MqJewRwGQFsJz7rMC4ShuiwM8lL4B13kG1007RrrXW1gK3ioueGwLeBZybpnBB6kRg4sToRIX99oM996xTIbLMts7vsEqragFMVgD13UZn6P0emBr4Nr5F4w9ab1lpoxTsueQFsI4A9IdKu391BZzv/q1jQzhrEzCBhiJw002w++7w2mswXenk3IaqYfEqYwFMVgA1ZrQxcCTwGrBIPBWrNXQtxeseFZW4oQRQC5W32grefx96p310d0V4/ZAJmIAJFJ+ADofWxrp11vHZqnlpTQtgsgL4OrAuoP+WgrYR6NiVBfPS6AmXo6EE8JBD4NNP4VJtgXEwARMwARNIjMCjj8K660ajgHPOmViyTqhGAhbAZAXws3jnrXbhloKmhXUDx8w1tlHeozWUAOoS85NPhs02yzt2l88ETMAEikfg17+G2WeH87S10KGuBCyAyQrgQ4B23Z5d1qrD4vMBV6trS6eXecMIoK4sWnrpaATQF5in12GcsgmYQPMSePXV6O+sDtnXF26H+hGwACYrgLoz9+74HD1NAy8EqItrWvix+jVzqjk3jAD+6U/wwANwm1ZsOpiACZiACaRCYK+94MMP4YYbUkneiVZIwAKYrAAKu+7L3T7+7zvA1YDuC27UkLwAtrVFZ7C0tEA/nXOdTVh9ddh++2inmoMJJEWgbWIbraNaaRncQr8+2fXnpMrvdEwgaQIffQSLLAJ33gmrrpp06jlIr07vsGprbgFMTgB1Ee6ZwIFdXLFWbdsU5fnkBbAOh2iOGxctStbdlToD0MEEkiLgg6CTIul0GonAscdGAvjIIw14RVwd3mG19A0LYHICKP7aBNKomz266l8NIYBXXAFnnw1PPlnLx8hxTKBrAhZA9w4T+CkBnZWsUUBtBtl88wYjZAEsTIMmeRXcNfFduyMLU/vwgjaEAOrsv4ED4eijw4E4BRMoJ2ABdH8wgc4JNOwVcRbAwnT5JAVQu39/C9wS39E7qYxCo6pF4QVQyzVmnRUefhh++cvC9FsXtCAELIAFaSgXM3MCpSvi9t8f9tgj8+zTy9ACmB7bhFNOUgDv76JsPwC/SrjceUmu8AI4ciT87nfR+r8pkuwNeWkhl6OuBCyAdcXvzHNOoCGviLMA5rzX/Vg8v/LDmqrwArj33qBris49NwyEY5tAZwQsgO4XJtA1gYa8Is4CWJgun5QArg4sBzwBPFKY2ocXNHkBbG+HsWNhwIDUL+TVH5/554eLLoKhQ8NhOAUT6EigfVI7Y8eNZcCsA+jdyxdMu4eYQEcCDXdFXIbvsJDe5F3AyewC3gW4GPgUmCleB/jXkIYpUNzkBTDDyus0el1QrmNgMjxyMMMaOisTMAETyD8BXxGXfRtZAJMRwOeBk4GrgB2BfYEVsm/OuuRYaAHUWVTPPw9//3td2DlTEzABEzABwFfEZd8NLIDJCOAX8cifNntojucDYPbsm7MuORZaAFdYAfbZB3baqS7snKkJmIAJmEBMwFfEZdsVLIDJCOBXgESoFJrpQOjCCuB770Xr/3QnpY6BcTABEzABE6gfgYa/Iq5+aDvN2QKYjAC2xVPAJciHAH/qQNznAOas8+sQ0quugoceylnBXBwTMAETaFICWpajo7lGjfKxXGl3AQtgMgL4AKDp366CzwGspidntINqo41gjTXgEOm6gwmkRMC7gFMC62QbkkBDXBGX0TsstANYAJMRwNB2KHL85KeAMzhD6b//hVlmgX/9C37+8yLjd9nzTsDnAOa9hVy+vBEo/BVxGbzDkmgzC6AFMLQfFVIAdfr8H/4Ar7wSWn3HN4HuCVgA3UNMoDoChb8izgJYXYPX8emkDoKuYxXqmnUhBXDXXWGmmeDUU+vKzpk3AQELYBM0squYOAF9Sdf9wK+/DtNOm3jy6SZoAUyXb4KpWwDDYBZOALU8Y665orP/Vtf9LQ4mkCIBC2CKcJ10wxLQLU2rrAKbbAItLQWrpgWwMA1mAQxrqsIJ4GOPgTaA6MiBPn3CKu/YJtATAQtgT4T8exPonMD998MWW8Abb0QzNoUJFsDCNJUFMKypCieA+jb57rtw5ZVhFXdsE6iEgAWwEkp+xgQ6J7DuurDssnDSSQUiZAEsTGNZAMOaKnkBbGuD1tZo3D+FC3qXXBKOOQa22iqs4o5tApUQaJvYRuuoVloGt9CvT79KovgZEzCBmMBTT0XHdb32WrR0pxAh5XdYUgy8C9i7gEP7UvICGFqibuJrQfEvfgHjxsH05Xe3pJinkzYBEzABE6idwJZbwuyzw4gRtafhmD8lYAG0AIZ+LgolgGeeCbffDnfdFVptxzcBEzABE8iCwMsvR9PAL74ICy+cRY7NkYcF0AIY2tMLJYBrrw2bbw577x1abcc3ARMwARPIisAuu8CECfDXv2aVY+PnYwG0AIb28sII4OefR9MIWksy//yh1XZ8EzABEzCBrAj85z/RrU1PPAEDB2aVa2PnYwG0AIb28MII4DXXwMknw3PPhVbZ8U3ABEzABLImcMAB0cHQt9ySdc6NmZ8F0AIY2rMLI4DbbRetHznuuNAqO74JmIAJmEDWBD75BBZaCEaOjA6JdggjYAG0AIb1IEheAMePh0GDYPRo6N8/tHyT43//Pcw2G9x9N6ywQiJJOhETqIjA+AnjGXTxIEbvNpr+fZPpzxVl7IdMoAEJ6AivBx6IfqbI6yFuKbzD0mhKC6AFMLRfJS+AKRyied99sMMO0QHQvXqFVtnxTaByAj4IunJWftIEeiKg14NGAbUZZL31enq6Tr9P4R2WRk0sgBbA0H5VCAHcf3/45hu48MLQ6jq+CVRHwAJYHS8/bQI9ETjtNLjqKtAh0bn8Qm8B7KkJc/P7vA4i5wZQDwXJvQDqUnGt/TvrrOgOYAcTyJKABTBL2s6rGQh8+y0suiicfjr85jc5rLEFMIeN0nmRLIBhTZV7ARwzJlr39+mnMPXUYZV1bBOoloAFsFpift4EeiZw0UVw6qmgv+99+vT8fKZPWAAzxR2SmQUwhF4am0AS/vDoWuHHH4ebbw6rqGObQC0ELIC1UHMcE+iewMSJsPjicOihsNtuOaOV8Dssrdp5DaDXAIb2reRHABPeQaXjAnbdNfpxMIGsCXgXcNbEnV+zELjuOjj4YPj3v2GqqXJU64TfYWnVzAJoAQztW8kLYGiJyuJ/9BHMMw+89x7MMUeCCTspEzABEzCBuhKYNAmWXz464eHAA+talEJmbgG0AIZ23FwL4KWXgtaKPPZYaDUd3wRMwARMIG8E7rwzEsA33oDp9TZyqJiABdACWHFn6eLBXAvg1lvDEkvA0UeHVtPxTcAETMAE8kZApzysuWb0M3x43kqX7/JYAC2AoT00twKo6YHZZ4d//hNWXjm0mo5vAiZgAiaQRwKPPgpDh0ajgLrxyaEyAhZAC2BlPaXrp3IrgE8/DWuvDePG5fCYgFDqjm8CJmACJvD/CWy8MSyyCJxxhqFUSsACaAGstK909VxuBfCkk6LrhG+8MbSKjm8CJmACJpBnAs8/H10h/8orMN98eS5pfspmAbQAhvbG5AWwrQ10eF9LC/TrV3P5NPr361/DXnvVnIQjmkAwgbaJbbSOaqVlcAv9+tTen4ML4gRMoMEJbL99dBzMJZfUuaIJvcPSroUF0AIY2seSF8AEDtHUvb8zzQQvvhhdGeRgAvUi4IOg60Xe+TYbgddfhyWXhGefhQED6lj7BN5hWZTeAmgBDO1nuRRAHQ2wxx7w5pswhe96CW1jxw8gYAEMgOeoJlAlgT33hM8+Ax0SXbdgAawb+mozth5US+x/n8+lAB50EOgzqDMAHUygngQsgPWk77ybjcC770azPlr/vdRSdaq9BbBO4KvP1gJYPbPyGLkUQH3wjzwSfvObsMo5tgmEErAAhhJ0fBOojsD++8Nbb8FNN1UXL7GnLYCJoUw7IQtgGOHcCeCHH0bXv338McwyS1jlHNsEQglYAEMJOr4JVEdA74CFF4YHH4yuiss8WAAzR15rhhbAWslF8XIngH/9K5x5Jjz1VFjFHNsEkiBgAUyCotMwgeoI/OEP8MILcPvt1cVL5GkLYCIYs0jEAhhGOXkBbG+HsWOjbVy9e1ddup13hrnnjk6ScTCBehNon9TO2HFjGTDrAHr3qr4/17v8zt8EikhAFwAstBBoQ+Aqq2Rcg8B3WFal9S5g7wIO7WvJC2BAiXQvpKZ/r7oK1lorICFHNQETMAETKDSBo44CXRN3772FrkZqhbcAWgBDO1euBHDMGFhxxegYgIAzpEOZOL4JmIAJmECdCXzxBSy4INxwgwcEOmsKC6AFMPQjmisB1Nq/kSPhjjtCq+X4JmACJmACRSdw/PHRNPDDD/tM2I5taQG0AIZ+vnMlgBtuCLoC7sADQ6vl+CZgAiZgAkUn8PXX0SiglgUNHVr02iRbfgugBTC0R+VGACdMgJlnhsceg4EDQ6vl+CZgAiZgAo1A4E9/guuvhyee8ChgeXtaAC2AoZ/v5AWwxh1UOvNpm23g/ff9IQ9tVMdPjoB3ASfH0imZQC0EdDe8dgRfeCFsskktKVQZp8Z3WJW5BD9uAbQAhnai5AWwxjOUdPPH22/DlVeGVsnxTSA5Aj4HMDmWTskEaiVw1llw6aXwzDPQq1etqVQYr8Z3WIWpJ/aYBdACGNqZciOAgwbBsGGw006hVXJ8E0iOgAUwOZZOyQRqJfDdd9EdwaefDlttVWsqFcazAFYIqv6P+SDosDbIhQB+/jnMOiu88050CLSDCeSFgAUwLy3hcjQ7gQsugD//ObohpIY7BirHZwGsnFWdn7QAhjVALgTwH/+AY46BF18Mq4xjm0DSBCyASRN1eiZQGwFtFPz5z+G442CHHWpLo6JYFsCKMOXhIQtgWCvkQgD32AOmnhrOOCOsMo5tAkkTsAAmTdTpmUDtBC67DE48EV5+Gfr0qT2dbmNaAFMCm3yyFsAwprkQwIUXhrPPhg02CKuMY5tA0gQsgEkTdXomUDuBiRNh8cXhsMNgl11qT8cCmBK7jJO1AIYBT14A29qgtRVaWiq6z+2NN2DAANA6wGmnDauMY5tA0gTaJrbROqqVlsEt9OvTL+nknZ4JmECVBK6+Gg4/HF59Ffr2rTJyJY9X+Q6rJMk0nvEuYO8CDu1XyQtglSXSwt5rroEHHqgyoh83ARMwARNoOgI6pm/ppaNTI/bcs+mq//8rbAG0AIb2/roL4JZbwjLLwBFHhFbF8U3ABEzABJqBgDYO7rsvvPZatH68GYMF0AIY2u/rKoD6JjfbbNFl3yuuGFoVxzcBEzABE2gGApMmwXLLwc47w/77N0ONf1pHC6AFMLTn11UAdbfjeuvBJ5+kfK5TKCXHNwETMAETyBWBW2+FXXcFrSNvxvXjFkALYOgHsq4CeMIJ8Oyz8Pe/h1bD8U3ABEzABJqJwA8/wMorw+abwx/+0Ew1j+pqAbQAhvb6ugrgmmvCttvC7ruHVsPxTcAETMAEmo3A3XfDNtvAm2/C9HqbNVGwABZbAJcCTgKWAeYA1gHu69B/tTd2ZaCNqK4/AIcC53fTzycB3wETy+IojTGdxEleAMePB13sO3o09O/fZTH12Mwzw9ixsNBCTfSpdVULRWD8hPEMungQo3cbTf++XffnQlXKhTWBBiGgUcA11oAhQ+CooxKqVIXvsIRyqzkZC2CxBXAAsCrwLPAkMKQTAbwfeAg4popeIgFcG1DcnkLyAljhKeq33w777AOvv95TEf17E6gfAR8EXT/2ztkEKiHw4IOw6abRKOBMM1USo4dnKnyHJZBTUBIWwGILYHnjS9o6GwGUxD0MHF1FT+kqrc6SqJsAHnAAfPstnN/dWGYVlfajJpAGAQtgGlSdpgkkS2DttWHwYBg+PIF0LYAJQMwmiUa5CaQ7AVwS6AV8BNwMHA/8txu8SutDYErg7Xi6+OIunq+bAC6xBBx7LPz619l0FOdiArUQsADWQs1xTCBbAg8/DBttBG+9lcAooAUw28YLyC2PAngZsHO8Xq+z8mld36861LkrAVwJGAt8AQwE/gK8AmzbDbO1gEeB9nha+SqgBbigkzh1EcD33oP55oNx4xL4sAZ0Hkc1gZ4IWAB7IuTfm0A+CKyzDqy6agKjgBbAfDRoBaXIowBOA0zVTdm/B76uUAA7JrM6cA8wXbwxpAJEk6eP1wUGdyWAw4YNo298qeLQoUPRT82hgg/PX/4CI0ZE+0QcTCDPBCyAeW4dl80EfiSQ2ChgBe+wenEfOXIk+lGYMGEC5557rv7nDDoVpl5lqme+eRTAWnhUum6vJIAaudNO30qCBFBGpw0nHUPyI4AV7KDaYQdYYAE4XpPZDiaQYwLeBZzjxnHRTKADAY0CrrJKtLyo5lDBO6zmtBOM6E0gxd8E0i8+quUbYH1A08M6vkXTt7PHR8RoE4h+vwRwOfAWsFUX/UhHykiKXwBKu4GviTeRTP6q0CEkL4A9dHBt259rLrj+elhdOutgAiZgAiZgAgkQGDUKNtww2hGsY8YaOVgAiy2A8wNvxmsFy/up9jHp+8t8wN+AxYDe8caOf3TYBLJdvMmjdATmRsApwM9ikdQmkBHARV18EDIXwOefj76hffYZxLPOjfwZdd1MwARMwAQyJKAzAVdaCY47LsNM65CVBbDYAliHLlP/EcDTToP77wfd4+hgAiZgAiZgAkkS0CjgBhtEO4IbeRTQAmgBDP3cZD4CuN56sP76sN9+oUV3fBMwARMwARP4KYFmGAW0AFoAQz/7mQrgd99F38ieegoWXzy06I5vAiZgAiZgAj8l8Mgj0UBDI48CWgAtgKGf/UwF8L77YMcd4d13YYpG2b8d2gKObwImYAImkDiBddeFFVds3NMmLIAWwNAPTfIC2NYGra3Q0gL9tMn5x6B/+uADuFx7mR1MoAAE2ia20TqqlZbBLfTr87/9uQDFdxFNoGkJPPooaMmRdgTPMksVGLp5h1WRSuqPWgAtgKGdLHkB7OYQzeWXB90BvP32ocV2fBPIhoAPgs6Gs3MxgTQI6E4DvXdOOKGK1HN8EHR5LSyAFsAqenWnj2YmgJ9+CrPPDu+/D3PMEVpsxzeBbAhYALPh7FxMIA0CGgWUBGotYMWjgBbANJoilTS9kiwMa2YCqIOf9S3sX/8KK7Bjm0CWBCyAWdJ2XiaQPIGqRwEtgMk3QkopWgDDwGYmgL/7HcwwA5x6aliBHdsEsiRgAcyStvMygeQJPPYYaEOI1gLOOmsF6VsAK4CUj0csgGHtkIkA6vq3BReECy6IhuMdTKAoBCyARWkpl9MEuiagzSDLLgsnnlgBJQtgBZDy8YgFMKwdMhHAN96ZTBFPAAAW5ElEQVSAAQPgiy9gmmnCCuzYJpAlAQtglrSdlwmkQ6CqUUALYDqNkEKqFsAwqMkLYHs7jB0bGV9vXWEcHfty8cWgK3ocTKBIBNontTN23FgGzDqA3r2i/uxgAiZQPAIaBVxmmeiUsm5DJ++wPNbWu4C9Czi0XyYvgJ2UaJddYM45Kxx+D62R45uACZiACZhABwKPPw66Iq7itYA5J2gBtACGdtFMBHCRReDss6OreRxMwARMwARMoB4E9A5aemk46aR65J5snhZAC2Boj0pdAHXu37zzwmefRbuAHUzABEzABEygHgRGj4a1145GAWebrR4lSC5PC6AFMLQ3pS6A110Hp5wCTz8dWlTHNwETMAETMIEwAhtsAEstVfxRQAugBTDskwCpC+CwYTDllHDmmaFFdXwTMAETMAETCCPQKKOAFkALYNgnIQ0B7LCDauBAGD4cttgitKiObwLZE/Au4OyZO0cTSJuARgH1bjr55E5y8i7gtPEnlr6PgQlDmfwIYNkZSp9NnH7yyesffVT89RZhmB27qAR8DmBRW87lNoGuCTzxBPzqV12sBfQ5gIXpOhbAsKZKVQBveWB6DjsMXnoprJCObQL1ImABrBd552sC6RLYcENYYolojfr/BAtguuATTN0CGAYzVQE8+Njp+frr6Ao4BxMoIgELYBFbzWU2gZ4JlEYB33qrwx3BFsCe4eXkCQtgWEOkKoArrjM9++0H228fVkjHNoH/197ZAFtVnWf4kV8FimhRayK0aQygMcHECBg0SDXR0GgSoOmIYjWCrVFIvBYNFsTUEaxNVGzNqIlJlFAS0ZLWnwSidgaQCaMRx78SKxhKFFItEQKWy2/nvWcdOHM859697z7nnn32fteMI8pee631fN/a6z3f+msUAQvARpF3uSZQfwK6HeSUU+Dmm0vKsgCsP/galWABmAxk3QTg9je2MmBw/7bzlnQOoJMJNCMBC8BmtJrrbALRCKxaBRKBigIeeWTIYwEYDV4KnrIATGaEugnAny/ZzuVX920TgE4m0KwELACb1XKutwlEI3D22TB6dOG0irZkARgNXAqesgBMZoTaC8DW1rbbtme3zmLDGz144IFkFXRuE2gkgdY9rcxbOY+Zp8+kd4/ejayKyzYBE6gDgeXL4fzzC1HAAQOAMIYxcyb0Tm+f9zmAPgcwaXeovQAMNRozBiZPhilTklbR+U3ABEzABEygfgTOPLNwRdzs2fUro9ZvtgC0AEzqU3URgPoBpXt/X3gBhgxJWkXnNwETMAETMIH6EXjqKZg4sRAF7K9RsQmSBaAFYFI3rYsAXLmy0Jk2bYJDPEmf1EbObwImYAImUEcC+/fDGWeAzgbUzG8zJAtAC8CkfloXATh3LqxZA4sXJ62e85uACZiACZhA/QksWwaTJhWigP361b+8pCVYAFoAJvWhughAbavXL6lp05JWz/lNwARMwARMoP4EFAU87TSYMAFmzKh/eUlLsAC0AEzqQzUXgHv2FM5TWrEChg9PWj3nNwETMAETMIGuIfD443DJJYUoYJ8+XVNmZ0uxALQA7KzvFPPVXAD+csW7jBuznTc37KH74RXi6H37Qvfu76333r2wY0fl9mgrfrXt+Nu3w759783XrVv1OL52qeifSsn1K1AxvzYM23dt5/SFZ7Hyimfo16uCP9v/Cv7i/nvwa+Lvy0EWTdY/FAU881N7mbD520xf99VUzwVbAFoApk4A3j5vJ8dc/2Umsahy3V56qXADd3l6+WU46aTKeebMgRtvrPx3etcrr7z37048EfTOSknvOnDqZ9kDrl8BiPkdcIwbx0DL0q30711he6D9r8DJ/ffgh8Tfl4MsmrR/fJMWrtw8h8OOSe+WYAtAC8DUCcDx5+1m9KPXcc3Glsr76R1hc4St3GtTHOHVTSBH3TmIt2ZVEYBNFuE4gN4R3oNemGL/a6uk63fQVl0wfuzfuo0Rg9/k4ls/wrQZhyUdY+uW3wLQAjCpc9V0Cljh86MG7uPRLZ9k1NZlzXOgUlKKzp9ZAr4KLrOmdcNMoDKBbdt4+PBLmX7sYtat78ahh6YTlAWgBWBSz6ypANRM7Kmn7ud37/am19a3LQCTWsf5G07AArDhJnAFTKBrCWzbxr7DB/DRE3Zz5bTuXHFF1xYftTQLQAvAqL5S7bmaCsC774bFi/bw5PKesHWrBWBS6zh/wwlYADbcBK6ACXQtgW3b2q6y+vH3djBjTh9eew169eraKkQpzQLQAjCKn7T3TE0F4IUXwpA/aWXOTz4Oq1enegdVUnDOnw8C2gU88rsjWT1ldeVdwPnA4FaaQH4IaF3vyJHsXbWak0b1o6UFpk5NX/MtAC0Ak3plzQSg1v8NGgQLFsDYsUmr5fwmYAImYAIm0FgCCxfCrFnw6qvQs2dj61JeugWgBWBSj6yZAHz9dRg6FN55J/0HaCaF5vwmYAImYALZJ6CLDXQilu4HvvTSdLXXAtACMKlH1kwA3n8/3HMPrFqVtErObwImYAImYALpIKCx7aabYO1a6NEjHXVSLSwALQCTemPNBOCUKTBwINxyS9IqOb8JmIAJmIAJpIPA7t0wbFjhLoLJk9NRJwvAgh0OSY85mrImNROAQ4bAHXfAuHFNycGVNgETMAETMIGKBO67D269tXDpVKWbTBuBzRFAC8CkflcTAbhpExx3HGzZ0rZ73skETMAETMAEMkNg1y5QkGPePLjggnQ0ywLQAjCpJ9ZEAD74YKFjrFkD6CJ0/YdWzeoKIycTaGICrXtambdyHjNPn0nvHvbnJjalq24C0QhUGcO0xv3OO+HFF0E3KTY6WQBaACb1wZoIwGnTCh1i/vy2lamFMKAPgk5qG+dPAQEfBJ0CI7gKJtCVBKqMYdKFxx8Pt98OEyd2ZYUql2UBaAGY1AtrIgCHD4cbboAJEywAkxrE+dNFwAIwXfZwbUyg7gTaCWLcdRfce29htqvRUUALQAvApH0hsQDUuj/t/t28GY4+2gIwqUGcP10ELADTZQ/XxgTqTqAdAbhzJ5xwAixZAiefXPeatFuABaAFYFIPTCwAH3kEZswonJHUljwFnNQmzp8iAhaAKTKGq2ICXUGggzFMU8FpWN5uAWgBmLQ7JBaA115buP1DYXELwKTmcP60EbAATJtFXB8TqDOBJgliWABaACbtCYkF4KhRcNVVcNFFFoBJjeH86SNgAZg+m7hGJlBXAhaAdcVby5f7IOhkNBMJwO3b4YgjYN06GDw4VGTv3sJ8sI5OT8uJmckYOXeOCezdt5e1b69l2MBhdO/WPcck3HQTyAmBJhnDHAF0BDBpj0wkAJ94Ai67DDZsSFoN5zcBEzABEzABE4hKwALQAjCqr1R7LpEAnDMH1q+HBQuSVsP5TcAETMAETMAEohKwALQAjOordRGAY8fCpEkwdWrSaji/CZiACZiACZhAVAIWgBaAUX2l5gJQW+EHDIDnn4ehQ5NWw/lNwARMwARMwASiErAAtACM6is1F4BPPw3jxxcOgD7EW3GS2sH5TcAETMAETCAyAQtAC8DIzlLlwU6vAbzlFnj2WXjoobI3N8kOqqTgnD8fBLwLOB92ditN4ACBJhnDLAAtAJP22k4LwHHj4NxzYfr0sio0yRlKScE5fz4I+BzAfNjZrTSBAwSaZAyzALQATNprOyUA9QNJ5/8tX17hPsQm6TxJwTl/PghYAObDzm6lCVgANp8PePVZMpt1SgA+9xxoB/CWLRXOes6QAFy6dCnnnHNOMsIZzZ0XNp0RgHlhE9e1zaU6MbNJEZsmGcMcAXQEMO43uPz5TgnA+fNh2TJ47LEKxTdJ54kCrqWlhdtuuy3Ko7l7Ji9sOiMA88ImrtObS3ViZpMiNk0yhlkAWgDG/QbXRABOmAAjRsB111kAJjVAs+bPy4BlAVg7D82Lz3SGmNlYAMb1GwtAC8C4PlNRAG7cuJH+/RUM7Djt3w8f/CAsWgQjR1YRgIMGwcaNEPGdHZfamCeuv/565s6d25jCU15qXthIAA66bRAbWzbSv3e0PpIXNnFd1FyqEzObFLFRBLAJxjAJwEGqJxwObIvbH7PwvNcAJrPi+4HfJHuFc5uACZiACZiACTSIwHHAGw0qu6HFWgAmwy9+7wN+n+w1zm0CJmACJmACJtDFBP4AeBPY38XlpqI4C8BUmMGVMAETMAETMAETMIGuI2AB2HWsXZIJmIAJmIAJmIAJpIKABWAqzOBKmIAJmIAJmIAJmEDXEbAA7Jj1N4ApgLYw/hK4Eni5nWyXAC3AnwLbgR8BX+u4mKZ8IiobbbV6pWydRS+gO3AMsKUpW99+paOy0Vs+AdwKnAzsAVYAVwP/nUEualIcNsMAHSZ5KoVTC/4N+GroW1nC85fh2zIc6Af0BPa108ABwF3An4fndKroVcDWLEEJbYnL5qbA5cPAauBTGWRSbFIcNkcB/xh4DATeDuPTjcCuDDKKw0bN17flFEDrAjV2/wyYkdHxqc3cFoDte72Mr4/qZ4F1wBzgYmAI8G6FrNcAXwEmA78AegNDgecz2LnisilH8DDQA/h8ztmoD24GFgLXBp/5HqCdaaNzzkYfYv3Yuj+IxiOAxcD/AhMyxubTwJFAH+C7EQSgBJ9EogY5+dCPgR3AFzLGRc2Jy+avgrg5F5CgzrIAjMPmA8Ff5CuvhyDFEuDJELTImuvEYaO2fwR4FWgNR8PcHfrYxKyBKbbHArB9y64P0Yd/Do8pYqUdQ4rwacAuTcXdRPogP55VhylpVxw25Th0fI4+QJ8DlmWQVRw2iuRI0Cj692JgoajOg0DfnLPRAP5QiIgVUZwFLAX+OKNHN4wBnupAAA4Gfg18FHgpgNGf9UNTf5fVo6misCntMvrBLn/JsgAstjcum2I+RdM1a/WxDH5rkrDRj02N+xKF6luZTBaA1c2qKd93gNPCNELxSQ0+Gqj/tiyrLr2V8FNk7G/ClPEaQPd9vJAx74nLprz5fw9cAHwoY1zUnM6wuTNwkK8oavwd4P9CtDlLiOKyUeRdET/9uCoe0/AZ4KfA+UClyxSbnVeUgVxt19ISRQtL005A0YpHmx1ClfpHYWMB2P7SgXK06kOagbgsoz6jZsXxG91coFk/LcPQLJ9m/P41q2wsAKtbVlNwWoN1AvCrksf04dWp4ZeXZb0QWBDWbykK+LswbSUH0jRwls4KjMumFJWmfTcA3wrR1az1rc6wUYRC0w0SxOqTiuRI/LyVMThx2eiE/rXAD0Jf+kPgX4DTgYuARRnjE3WwUtu1luvYsvZrINfshBhlMcUZyNV+RwDb94LZIVih9bWa2cpqius34qA1/IqMagYiawGcA3a2AKzu8nGjFeeFRaSatipOa3YLwm98mLbKSgeLy6a03V8Cvh/WuEkkZy3FZXN8WOc2HdDaPwnkrwP6QaHpB0UCs5LislG7tYZLYkf/1gaHbwaxrIj7z7MCpqQdUQYrRwCjRbksAKt3EG2UUXBCU+SvZbAflTYpSp+qhEDC+N/DWLU3i4wsANu3aqW1XJvCDs3yNYDF6EapANSaQUULsyYARS0Om1LK/xHW/305ix0qtCkOG/nGfYDWnBSTpjwldnRb9DMZ4xSHTaWma9PQDzN8A0+UwUrr/LSGVqK4uAZQf34urI30GsCC51gAVv54aPe4NkhI/G3M2PelUnOi9KlK+bQJbzmg3dNZPKnCu4A7cH6t89N6AC3K18B1Q5h60pRupV3A2tmqaSpFuTSA6wOkHcGaRta28iyluGzU9hPDgDUCeDZLMMraEoeNBvP/DEebKDKqnZ1aC6ipPP1d1o71iMNGWD8epoG1M++TYUewFmfraJgsJc0WyPYarLTGUT8CFHXQ8RyVrql6JDyvSLF+yGs6XN+YL2YJSmhLXDaKouufWYHn2eE98qGspThsFJB4IGxqEJPfZg1GWXvisNHym5OAJ8KsncZ4zcjoHdoHkMnkCGDHZtUZSX8dPsgSLcVzAItn2yni93R4jRaO3hEifvp4K3qjAU9n4GUxxWGj9muzwyhAAjDrKQ4bfYy1MUZn3mmw1yYjDV4rMwopDhtFK7Sm9tAQ9ZLwk1DOWtLRJWpXUezp26w/jw3t1jek9Fuj3eMSwtpJr+ckCPVjVTMOWUtx2Yij8pSzlADKWorDRmuNNQMjIazzRpWKfqblGVlLcdjoaDfNxOjsSP140BmJOgdQ36r/yRqYYnssALNqWbfLBEzABEzABEzABKoQsAC0a5iACZiACZiACZhAzghYAObM4G6uCZiACZiACZiACVgA2gdMwARMwARMwARMIGcELABzZnA31wRMwARMwARMwAQsAO0DJmACJmACJmACJpAzAhaAOTO4m2sCJmACJmACJmACFoD2ARMwARMwARMwARPIGQELwJwZ3M01ARMwARMwARMwAQtA+4AJmEBWCehaNd18oJP999WwkcX36uq1e4AZEd+tKyV/BBwGzA1XS0bM6sdMwARMoLYELABry9NvMwETSA+Bzl4CX9oC3eetq/rOKPmfxfdKWBavG+sFzAf+DDgWeAd4DJgZ/lz6TonSFRaA6XEU18QE8kjAAjCPVnebTSAfBGolAM8CdI9qMVV6bx/g74AHgFeBo4GF4W7e8WW4LQDz4X9upQmkmoAFYKrN48qZgAl0QEBi6iXgfcCngc3ATcACoCjUvhSmXP8IWA3okvhN4b1fAa4ABgM7gCeArwFbgEnA94FuwM4Q7ftsmFJ+CujZwdTy54EfAEdYANqPTcAE0kbAAjBtFnF9TMAE4hCQABwB/AXwM+Ac4CfAmYCmZfX3isRJ5Ol791Pgv4BLQyFfBF4EXgMGAQ8C64ELw99rCjhKBLBSnb8NDAvTwqV/7whgHAv7WRMwgboQsACsC1a/1ARMoIsISEy9HQRgsUhttPg98ENAkTpF994oifhdCXy4Sv2+AHwHOCqhALwY+CdgdIhQWgB2kUO4GBMwgWgELACjcfJTJmAC6SQgAfgMcG1J9eYBHwP07/KpWk3/aopYolBJ6/OuAY4HegPdAa3nK27w6EwE8HLgZuA84BcVsDkCmE5fcq1MIFcELABzZW431gQyR0Bi6i1A6/yKaVFYz6d1gO0JwPcDG8JavyXAbkARwIdL1vfNDmsLO9oEUiz7OuBq4DPAC1VoWwBmzg3dIBNoPgIWgM1nM9fYBEzgIAGJqVPDFPDSILwk5rRuT5s02hOAQ4FXQp4ngQ+FaeNPlAjAqWF3r55tDcVW2138D2HtoMr+VTtGsgC0B5uACTScgAVgw03gCpiACSQgIDGlTRyK5mkX8G/DFK+OY6kk1MqngDV1rF2/fcN7tH5Q5/kVd/j2BxYDEoX6Xn6uRFhqk8neUHdNKf8a2BX+0f/W8zon8ETgNyVttABMYHBnNQETqA0BC8DacPRbTMAEGkOgEWJKh0Ir2qijYe4Fvh6x6ePCjmSJS0ULtRbRyQRMwAQaQsACsCHYXagJmECNCDRCANao6n6NCZiACTSOgAVg49i7ZBMwgeQEtMZvpa9VSw7SbzABE8gXAQvAfNnbrTUBEzABEzABEzCBtkXKTiZgAiZgAiZgAiZgAjkiYAGYI2O7qSZgAiZgAiZgAiYgAhaA9gMTMAETMAETMAETyBkBC8CcGdzNNQETMAETMAETMAELQPuACZiACZiACZiACeSMgAVgzgzu5pqACZiACZiACZiABaB9wARMwARMwARMwARyRsACMGcGd3NNwARMwARMwARMwALQPmACJmACJmACJmACOSNgAZgzg7u5JmACJmACJmACJmABaB8wARMwARMwARMwgZwR+H8Fv46E8zBVBwAAAABJRU5ErkJggg==\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"phat2_ci = [ 0.66621166 1.17244546]\n"
]
}
],
"source": [
"# Better CI for phat.par[i=2] scale \n",
"Lp2 = phat.profile(i=2,pmin=0.1,pmax=2)\n",
"fig, axes = plt.subplots()\n",
"Lp2.plot()\n",
"phat2_ci = Lp2.get_bounds(alpha=0.1)\n",
"print('phat2_ci = {}'.format(phat2_ci))\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\pab\\workspace\\git_pywafo\\wafo\\stats\\estimation.py:343: UserWarning: The fitted parameters does not provide the optimum fit. Something wrong with fit (par = [-0.63409889 0.5 1.87567842])\n",
" 'Something wrong with fit (par = {})'.format(str(par)))\n"
]
},
{
"data": {
"application/javascript": [
"/* Put everything inside the global mpl namespace */\n",
"window.mpl = {};\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",
" 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",
" this.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 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);\n",
" canvas.attr('height', height);\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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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;\n",
" var y = canvas_pos.y;\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 overriden (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",
" 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 + '\">');\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"X_ci = [ 1.82924693 2.05375594]\n"
]
}
],
"source": [
"SF = 1./990\n",
"x = phat.isf(SF)\n",
"\n",
"# CI for x\n",
"Lx = phat.profile_quantile(x, i=2)\n",
"fig, axes = plt.subplots()\n",
"Lx.plot()\n",
"x_ci = Lx.get_bounds(alpha=0.2)\n",
"print('X_ci = {}'.format(x_ci))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}