From aa8d69d8c083162d69d8bdaa7ed093a5efcde660 Mon Sep 17 00:00:00 2001 From: Ian Bell <ian.bell@nist.gov> Date: Fri, 10 Sep 2021 11:29:42 -0400 Subject: [PATCH] Add example with nitrogen + ethane critical loci --- notebooks/Nitrogen+Ethane critical loci.ipynb | 1076 +++++++++++++++++ 1 file changed, 1076 insertions(+) create mode 100644 notebooks/Nitrogen+Ethane critical loci.ipynb diff --git a/notebooks/Nitrogen+Ethane critical loci.ipynb b/notebooks/Nitrogen+Ethane critical loci.ipynb new file mode 100644 index 0000000..a709c7d --- /dev/null +++ b/notebooks/Nitrogen+Ethane critical loci.ipynb @@ -0,0 +1,1076 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ce87cafd", + "metadata": {}, + "outputs": [], + "source": [ + "import timeit\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt \n", + "import pandas\n", + "\n", + "import CoolProp.CoolProp as CP\n", + "\n", + "import teqp" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "869a5da7", + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "/* Put everything inside the global mpl namespace */\n", + "/* global mpl */\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(\n", + " '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", + "\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 = document.createElement('div');\n", + " this.root.setAttribute('style', 'display: inline-block');\n", + " this._root_extra_style(this.root);\n", + "\n", + " parent_element.appendChild(this.root);\n", + "\n", + " this._init_header(this);\n", + " this._init_canvas(this);\n", + " this._init_toolbar(this);\n", + "\n", + " var fig = this;\n", + "\n", + " this.waiting = false;\n", + "\n", + " this.ws.onopen = function () {\n", + " fig.send_message('supports_binary', { value: fig.supports_binary });\n", + " fig.send_message('send_image_mode', {});\n", + " if (fig.ratio !== 1) {\n", + " fig.send_message('set_dpi_ratio', { dpi_ratio: fig.ratio });\n", + " }\n", + " fig.send_message('refresh', {});\n", + " };\n", + "\n", + " this.imageObj.onload = function () {\n", + " if (fig.image_mode === 'full') {\n", + " // Full images could contain transparency (where diff images\n", + " // almost always do), so we need to clear the canvas so that\n", + " // there is no ghosting.\n", + " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", + " }\n", + " fig.context.drawImage(fig.imageObj, 0, 0);\n", + " };\n", + "\n", + " this.imageObj.onunload = function () {\n", + " fig.ws.close();\n", + " };\n", + "\n", + " this.ws.onmessage = this._make_on_message_function(this);\n", + "\n", + " this.ondownload = ondownload;\n", + "};\n", + "\n", + "mpl.figure.prototype._init_header = function () {\n", + " var titlebar = document.createElement('div');\n", + " titlebar.classList =\n", + " 'ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix';\n", + " var titletext = document.createElement('div');\n", + " titletext.classList = 'ui-dialog-title';\n", + " titletext.setAttribute(\n", + " 'style',\n", + " 'width: 100%; text-align: center; padding: 3px;'\n", + " );\n", + " titlebar.appendChild(titletext);\n", + " this.root.appendChild(titlebar);\n", + " this.header = titletext;\n", + "};\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function (_canvas_div) {};\n", + "\n", + "mpl.figure.prototype._root_extra_style = function (_canvas_div) {};\n", + "\n", + "mpl.figure.prototype._init_canvas = function () {\n", + " var fig = this;\n", + "\n", + " var canvas_div = (this.canvas_div = document.createElement('div'));\n", + " canvas_div.setAttribute(\n", + " 'style',\n", + " 'border: 1px solid #ddd;' +\n", + " 'box-sizing: content-box;' +\n", + " 'clear: both;' +\n", + " 'min-height: 1px;' +\n", + " 'min-width: 1px;' +\n", + " 'outline: 0;' +\n", + " 'overflow: hidden;' +\n", + " 'position: relative;' +\n", + " 'resize: both;'\n", + " );\n", + "\n", + " function on_keyboard_event_closure(name) {\n", + " return function (event) {\n", + " return fig.key_event(event, name);\n", + " };\n", + " }\n", + "\n", + " canvas_div.addEventListener(\n", + " 'keydown',\n", + " on_keyboard_event_closure('key_press')\n", + " );\n", + " canvas_div.addEventListener(\n", + " 'keyup',\n", + " on_keyboard_event_closure('key_release')\n", + " );\n", + "\n", + " this._canvas_extra_style(canvas_div);\n", + " this.root.appendChild(canvas_div);\n", + "\n", + " var canvas = (this.canvas = document.createElement('canvas'));\n", + " canvas.classList.add('mpl-canvas');\n", + " canvas.setAttribute('style', 'box-sizing: content-box;');\n", + "\n", + " this.context = canvas.getContext('2d');\n", + "\n", + " var backingStore =\n", + " this.context.backingStorePixelRatio ||\n", + " this.context.webkitBackingStorePixelRatio ||\n", + " this.context.mozBackingStorePixelRatio ||\n", + " this.context.msBackingStorePixelRatio ||\n", + " this.context.oBackingStorePixelRatio ||\n", + " this.context.backingStorePixelRatio ||\n", + " 1;\n", + "\n", + " this.ratio = (window.devicePixelRatio || 1) / backingStore;\n", + "\n", + " var rubberband_canvas = (this.rubberband_canvas = document.createElement(\n", + " 'canvas'\n", + " ));\n", + " rubberband_canvas.setAttribute(\n", + " 'style',\n", + " 'box-sizing: content-box; position: absolute; left: 0; top: 0; z-index: 1;'\n", + " );\n", + "\n", + " // Apply a ponyfill if ResizeObserver is not implemented by browser.\n", + " if (this.ResizeObserver === undefined) {\n", + " if (window.ResizeObserver !== undefined) {\n", + " this.ResizeObserver = window.ResizeObserver;\n", + " } else {\n", + " var obs = _JSXTOOLS_RESIZE_OBSERVER({});\n", + " this.ResizeObserver = obs.ResizeObserver;\n", + " }\n", + " }\n", + "\n", + " this.resizeObserverInstance = new this.ResizeObserver(function (entries) {\n", + " var nentries = entries.length;\n", + " for (var i = 0; i < nentries; i++) {\n", + " var entry = entries[i];\n", + " var width, height;\n", + " if (entry.contentBoxSize) {\n", + " if (entry.contentBoxSize instanceof Array) {\n", + " // Chrome 84 implements new version of spec.\n", + " width = entry.contentBoxSize[0].inlineSize;\n", + " height = entry.contentBoxSize[0].blockSize;\n", + " } else {\n", + " // Firefox implements old version of spec.\n", + " width = entry.contentBoxSize.inlineSize;\n", + " height = entry.contentBoxSize.blockSize;\n", + " }\n", + " } else {\n", + " // Chrome <84 implements even older version of spec.\n", + " width = entry.contentRect.width;\n", + " height = entry.contentRect.height;\n", + " }\n", + "\n", + " // Keep the size of the canvas and rubber band canvas in sync with\n", + " // the canvas container.\n", + " if (entry.devicePixelContentBoxSize) {\n", + " // Chrome 84 implements new version of spec.\n", + " canvas.setAttribute(\n", + " 'width',\n", + " entry.devicePixelContentBoxSize[0].inlineSize\n", + " );\n", + " canvas.setAttribute(\n", + " 'height',\n", + " entry.devicePixelContentBoxSize[0].blockSize\n", + " );\n", + " } else {\n", + " canvas.setAttribute('width', width * fig.ratio);\n", + " canvas.setAttribute('height', height * fig.ratio);\n", + " }\n", + " canvas.setAttribute(\n", + " 'style',\n", + " 'width: ' + width + 'px; height: ' + height + 'px;'\n", + " );\n", + "\n", + " rubberband_canvas.setAttribute('width', width);\n", + " rubberband_canvas.setAttribute('height', height);\n", + "\n", + " // And update the size in Python. We ignore the initial 0/0 size\n", + " // that occurs as the element is placed into the DOM, which should\n", + " // otherwise not happen due to the minimum size styling.\n", + " if (fig.ws.readyState == 1 && width != 0 && height != 0) {\n", + " fig.request_resize(width, height);\n", + " }\n", + " }\n", + " });\n", + " this.resizeObserverInstance.observe(canvas_div);\n", + "\n", + " function on_mouse_event_closure(name) {\n", + " return function (event) {\n", + " return fig.mouse_event(event, name);\n", + " };\n", + " }\n", + "\n", + " rubberband_canvas.addEventListener(\n", + " 'mousedown',\n", + " on_mouse_event_closure('button_press')\n", + " );\n", + " rubberband_canvas.addEventListener(\n", + " 'mouseup',\n", + " on_mouse_event_closure('button_release')\n", + " );\n", + " // Throttle sequential mouse events to 1 every 20ms.\n", + " rubberband_canvas.addEventListener(\n", + " 'mousemove',\n", + " on_mouse_event_closure('motion_notify')\n", + " );\n", + "\n", + " rubberband_canvas.addEventListener(\n", + " 'mouseenter',\n", + " on_mouse_event_closure('figure_enter')\n", + " );\n", + " rubberband_canvas.addEventListener(\n", + " 'mouseleave',\n", + " on_mouse_event_closure('figure_leave')\n", + " );\n", + "\n", + " canvas_div.addEventListener('wheel', function (event) {\n", + " if (event.deltaY < 0) {\n", + " event.step = 1;\n", + " } else {\n", + " event.step = -1;\n", + " }\n", + " on_mouse_event_closure('scroll')(event);\n", + " });\n", + "\n", + " canvas_div.appendChild(canvas);\n", + " canvas_div.appendChild(rubberband_canvas);\n", + "\n", + " this.rubberband_context = rubberband_canvas.getContext('2d');\n", + " this.rubberband_context.strokeStyle = '#000000';\n", + "\n", + " this._resize_canvas = function (width, height, forward) {\n", + " if (forward) {\n", + " canvas_div.style.width = width + 'px';\n", + " canvas_div.style.height = height + 'px';\n", + " }\n", + " };\n", + "\n", + " // Disable right mouse context menu.\n", + " this.rubberband_canvas.addEventListener('contextmenu', function (_e) {\n", + " event.preventDefault();\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 toolbar = document.createElement('div');\n", + " toolbar.classList = 'mpl-toolbar';\n", + " this.root.appendChild(toolbar);\n", + "\n", + " function on_click_closure(name) {\n", + " return function (_event) {\n", + " return fig.toolbar_button_onclick(name);\n", + " };\n", + " }\n", + "\n", + " function on_mouseover_closure(tooltip) {\n", + " return function (event) {\n", + " if (!event.currentTarget.disabled) {\n", + " return fig.toolbar_button_onmouseover(tooltip);\n", + " }\n", + " };\n", + " }\n", + "\n", + " fig.buttons = {};\n", + " var buttonGroup = document.createElement('div');\n", + " buttonGroup.classList = 'mpl-button-group';\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", + " /* Instead of a spacer, we start a new button group. */\n", + " if (buttonGroup.hasChildNodes()) {\n", + " toolbar.appendChild(buttonGroup);\n", + " }\n", + " buttonGroup = document.createElement('div');\n", + " buttonGroup.classList = 'mpl-button-group';\n", + " continue;\n", + " }\n", + "\n", + " var button = (fig.buttons[name] = document.createElement('button'));\n", + " button.classList = 'mpl-widget';\n", + " button.setAttribute('role', 'button');\n", + " button.setAttribute('aria-disabled', 'false');\n", + " button.addEventListener('click', on_click_closure(method_name));\n", + " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", + "\n", + " var icon_img = document.createElement('img');\n", + " icon_img.src = '_images/' + image + '.png';\n", + " icon_img.srcset = '_images/' + image + '_large.png 2x';\n", + " icon_img.alt = tooltip;\n", + " button.appendChild(icon_img);\n", + "\n", + " buttonGroup.appendChild(button);\n", + " }\n", + "\n", + " if (buttonGroup.hasChildNodes()) {\n", + " toolbar.appendChild(buttonGroup);\n", + " }\n", + "\n", + " var fmt_picker = document.createElement('select');\n", + " fmt_picker.classList = 'mpl-widget';\n", + " toolbar.appendChild(fmt_picker);\n", + " this.format_dropdown = fmt_picker;\n", + "\n", + " for (var ind in mpl.extensions) {\n", + " var fmt = mpl.extensions[ind];\n", + " var option = document.createElement('option');\n", + " option.selected = fmt === mpl.default_extension;\n", + " option.innerHTML = fmt;\n", + " fmt_picker.appendChild(option);\n", + " }\n", + "\n", + " var status_bar = document.createElement('span');\n", + " status_bar.classList = 'mpl-message';\n", + " toolbar.appendChild(status_bar);\n", + " this.message = status_bar;\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", + "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", + "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], msg['forward']);\n", + " fig.send_message('refresh', {});\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_rubberband = function (fig, msg) {\n", + " var x0 = msg['x0'] / fig.ratio;\n", + " var y0 = (fig.canvas.height - msg['y0']) / fig.ratio;\n", + " var x1 = msg['x1'] / fig.ratio;\n", + " var y1 = (fig.canvas.height - msg['y1']) / fig.ratio;\n", + " x0 = Math.floor(x0) + 0.5;\n", + " y0 = Math.floor(y0) + 0.5;\n", + " x1 = Math.floor(x1) + 0.5;\n", + " y1 = Math.floor(y1) + 0.5;\n", + " var min_x = Math.min(x0, x1);\n", + " var min_y = Math.min(y0, y1);\n", + " var width = Math.abs(x1 - x0);\n", + " var height = Math.abs(y1 - y0);\n", + "\n", + " fig.rubberband_context.clearRect(\n", + " 0,\n", + " 0,\n", + " fig.canvas.width / fig.ratio,\n", + " fig.canvas.height / fig.ratio\n", + " );\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", + " 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.handle_history_buttons = function (fig, msg) {\n", + " for (var key in msg) {\n", + " if (!(key in fig.buttons)) {\n", + " continue;\n", + " }\n", + " fig.buttons[key].disabled = !msg[key];\n", + " fig.buttons[key].setAttribute('aria-disabled', !msg[key]);\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_navigate_mode = function (fig, msg) {\n", + " if (msg['mode'] === 'PAN') {\n", + " fig.buttons['Pan'].classList.add('active');\n", + " fig.buttons['Zoom'].classList.remove('active');\n", + " } else if (msg['mode'] === 'ZOOM') {\n", + " fig.buttons['Pan'].classList.remove('active');\n", + " fig.buttons['Zoom'].classList.add('active');\n", + " } else {\n", + " fig.buttons['Pan'].classList.remove('active');\n", + " fig.buttons['Zoom'].classList.remove('active');\n", + " }\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", + "\n", + " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", + " evt.data\n", + " );\n", + " fig.updated_canvas_event();\n", + " fig.waiting = false;\n", + " return;\n", + " } else if (\n", + " typeof evt.data === 'string' &&\n", + " evt.data.slice(0, 21) === 'data:image/png;base64'\n", + " ) {\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(\n", + " \"No handler for the '\" + msg_type + \"' message type: \",\n", + " msg\n", + " );\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(\n", + " \"Exception inside the 'handler_\" + msg_type + \"' callback:\",\n", + " e,\n", + " e.stack,\n", + " msg\n", + " );\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", + " }\n", + " if (e.target) {\n", + " targ = e.target;\n", + " } else if (e.srcElement) {\n", + " targ = e.srcElement;\n", + " }\n", + " if (targ.nodeType === 3) {\n", + " // defeat Safari bug\n", + " targ = targ.parentNode;\n", + " }\n", + "\n", + " // pageX,Y are the mouse positions relative to the document\n", + " var boundingRect = targ.getBoundingClientRect();\n", + " var x = e.pageX - (boundingRect.left + document.body.scrollLeft);\n", + " var y = e.pageY - (boundingRect.top + document.body.scrollTop);\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", + " }\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", + " this.canvas.focus();\n", + " this.canvas_div.focus();\n", + " }\n", + "\n", + " var x = canvas_pos.x * this.ratio;\n", + " var y = canvas_pos.y * this.ratio;\n", + "\n", + " this.send_message(name, {\n", + " x: x,\n", + " y: y,\n", + " button: event.button,\n", + " step: event.step,\n", + " guiEvent: simpleKeys(event),\n", + " });\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", + " // Prevent repeat events\n", + " if (name === 'key_press') {\n", + " if (event.which === this._key) {\n", + " return;\n", + " } else {\n", + " this._key = event.which;\n", + " }\n", + " }\n", + " if (name === 'key_release') {\n", + " this._key = null;\n", + " }\n", + "\n", + " var value = '';\n", + " if (event.ctrlKey && event.which !== 17) {\n", + " value += 'ctrl+';\n", + " }\n", + " if (event.altKey && event.which !== 18) {\n", + " value += 'alt+';\n", + " }\n", + " if (event.shiftKey && event.which !== 16) {\n", + " value += 'shift+';\n", + " }\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, 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", + "\n", + "///////////////// REMAINING CONTENT GENERATED BY embed_js.py /////////////////\n", + "// prettier-ignore\n", + "var _JSXTOOLS_RESIZE_OBSERVER=function(A){var t,i=new WeakMap,n=new WeakMap,a=new WeakMap,r=new WeakMap,o=new Set;function s(e){if(!(this instanceof s))throw new TypeError(\"Constructor requires 'new' operator\");i.set(this,e)}function h(){throw new TypeError(\"Function is not a constructor\")}function c(e,t,i,n){e=0 in arguments?Number(arguments[0]):0,t=1 in arguments?Number(arguments[1]):0,i=2 in arguments?Number(arguments[2]):0,n=3 in arguments?Number(arguments[3]):0,this.right=(this.x=this.left=e)+(this.width=i),this.bottom=(this.y=this.top=t)+(this.height=n),Object.freeze(this)}function d(){t=requestAnimationFrame(d);var s=new WeakMap,p=new Set;o.forEach((function(t){r.get(t).forEach((function(i){var r=t instanceof window.SVGElement,o=a.get(t),d=r?0:parseFloat(o.paddingTop),f=r?0:parseFloat(o.paddingRight),l=r?0:parseFloat(o.paddingBottom),u=r?0:parseFloat(o.paddingLeft),g=r?0:parseFloat(o.borderTopWidth),m=r?0:parseFloat(o.borderRightWidth),w=r?0:parseFloat(o.borderBottomWidth),b=u+f,F=d+l,v=(r?0:parseFloat(o.borderLeftWidth))+m,W=g+w,y=r?0:t.offsetHeight-W-t.clientHeight,E=r?0:t.offsetWidth-v-t.clientWidth,R=b+v,z=F+W,M=r?t.width:parseFloat(o.width)-R-E,O=r?t.height:parseFloat(o.height)-z-y;if(n.has(t)){var k=n.get(t);if(k[0]===M&&k[1]===O)return}n.set(t,[M,O]);var S=Object.create(h.prototype);S.target=t,S.contentRect=new c(u,d,M,O),s.has(i)||(s.set(i,[]),p.add(i)),s.get(i).push(S)}))})),p.forEach((function(e){i.get(e).call(e,s.get(e),e)}))}return s.prototype.observe=function(i){if(i instanceof window.Element){r.has(i)||(r.set(i,new Set),o.add(i),a.set(i,window.getComputedStyle(i)));var n=r.get(i);n.has(this)||n.add(this),cancelAnimationFrame(t),t=requestAnimationFrame(d)}},s.prototype.unobserve=function(i){if(i instanceof window.Element&&r.has(i)){var n=r.get(i);n.has(this)&&(n.delete(this),n.size||(r.delete(i),o.delete(i))),n.size||r.delete(i),o.size||cancelAnimationFrame(t)}},A.DOMRectReadOnly=c,A.ResizeObserver=s,A.ResizeObserverEntry=h,A}; // eslint-disable-line\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\", \"Left button pans, Right button zooms\\nx/y fixes axis, CTRL fixes aspect\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\\nx/y fixes axis, CTRL fixes aspect\", \"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\";/* global mpl */\n", + "\n", + "var comm_websocket_adapter = function (comm) {\n", + " // Create a \"websocket\"-like object which calls the given IPython comm\n", + " // object with the appropriate methods. Currently this is a non binary\n", + " // socket, so there is still some room for performance tuning.\n", + " var ws = {};\n", + "\n", + " ws.close = function () {\n", + " comm.close();\n", + " };\n", + " ws.send = function (m) {\n", + " //console.log('sending', m);\n", + " comm.send(m);\n", + " };\n", + " // Register the callback with on_msg.\n", + " comm.on_msg(function (msg) {\n", + " //console.log('receiving', msg['content']['data'], msg);\n", + " // Pass the mpl event to the overridden (by mpl) onmessage function.\n", + " ws.onmessage(msg['content']['data']);\n", + " });\n", + " return ws;\n", + "};\n", + "\n", + "mpl.mpl_figure_comm = function (comm, msg) {\n", + " // This is the function which gets called when the mpl process\n", + " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", + "\n", + " var id = msg.content.data.id;\n", + " // Get hold of the div created by the display call when the Comm\n", + " // socket was opened in Python.\n", + " var element = document.getElementById(id);\n", + " var ws_proxy = comm_websocket_adapter(comm);\n", + "\n", + " function ondownload(figure, _format) {\n", + " window.open(figure.canvas.toDataURL());\n", + " }\n", + "\n", + " var fig = new mpl.figure(id, ws_proxy, ondownload, element);\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;\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", + " fig.cell_info[0].output_area.element.on(\n", + " 'cleared',\n", + " { fig: fig },\n", + " fig._remove_fig_handler\n", + " );\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_close = function (fig, msg) {\n", + " var width = fig.canvas.width / fig.ratio;\n", + " fig.cell_info[0].output_area.element.off(\n", + " 'cleared',\n", + " fig._remove_fig_handler\n", + " );\n", + " fig.resizeObserverInstance.unobserve(fig.canvas_div);\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.innerHTML =\n", + " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + " fig.close_ws(fig, msg);\n", + "};\n", + "\n", + "mpl.figure.prototype.close_ws = function (fig, msg) {\n", + " fig.send_message('closing', msg);\n", + " // fig.ws.close()\n", + "};\n", + "\n", + "mpl.figure.prototype.push_to_output = function (_remove_interactive) {\n", + " // Turn the data on the canvas into data in the output cell.\n", + " var width = this.canvas.width / this.ratio;\n", + " var dataURL = this.canvas.toDataURL();\n", + " this.cell_info[1]['text/html'] =\n", + " '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", + "};\n", + "\n", + "mpl.figure.prototype.updated_canvas_event = function () {\n", + " // Tell IPython that the notebook contents must change.\n", + " IPython.notebook.set_dirty(true);\n", + " this.send_message('ack', {});\n", + " var fig = this;\n", + " // Wait a second, then push the new image to the DOM so\n", + " // that it is saved nicely (might be nice to debounce this).\n", + " setTimeout(function () {\n", + " fig.push_to_output();\n", + " }, 1000);\n", + "};\n", + "\n", + "mpl.figure.prototype._init_toolbar = function () {\n", + " var fig = this;\n", + "\n", + " var toolbar = document.createElement('div');\n", + " toolbar.classList = 'btn-toolbar';\n", + " this.root.appendChild(toolbar);\n", + "\n", + " function on_click_closure(name) {\n", + " return function (_event) {\n", + " return fig.toolbar_button_onclick(name);\n", + " };\n", + " }\n", + "\n", + " function on_mouseover_closure(tooltip) {\n", + " return function (event) {\n", + " if (!event.currentTarget.disabled) {\n", + " return fig.toolbar_button_onmouseover(tooltip);\n", + " }\n", + " };\n", + " }\n", + "\n", + " fig.buttons = {};\n", + " var buttonGroup = document.createElement('div');\n", + " buttonGroup.classList = 'btn-group';\n", + " var button;\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", + " /* Instead of a spacer, we start a new button group. */\n", + " if (buttonGroup.hasChildNodes()) {\n", + " toolbar.appendChild(buttonGroup);\n", + " }\n", + " buttonGroup = document.createElement('div');\n", + " buttonGroup.classList = 'btn-group';\n", + " continue;\n", + " }\n", + "\n", + " button = fig.buttons[name] = document.createElement('button');\n", + " button.classList = 'btn btn-default';\n", + " button.href = '#';\n", + " button.title = name;\n", + " button.innerHTML = '<i class=\"fa ' + image + ' fa-lg\"></i>';\n", + " button.addEventListener('click', on_click_closure(method_name));\n", + " button.addEventListener('mouseover', on_mouseover_closure(tooltip));\n", + " buttonGroup.appendChild(button);\n", + " }\n", + "\n", + " if (buttonGroup.hasChildNodes()) {\n", + " toolbar.appendChild(buttonGroup);\n", + " }\n", + "\n", + " // Add the status bar.\n", + " var status_bar = document.createElement('span');\n", + " status_bar.classList = 'mpl-message pull-right';\n", + " toolbar.appendChild(status_bar);\n", + " this.message = status_bar;\n", + "\n", + " // Add the close button to the window.\n", + " var buttongrp = document.createElement('div');\n", + " buttongrp.classList = 'btn-group inline pull-right';\n", + " button = document.createElement('button');\n", + " button.classList = 'btn btn-mini btn-primary';\n", + " button.href = '#';\n", + " button.title = 'Stop Interaction';\n", + " button.innerHTML = '<i class=\"fa fa-power-off icon-remove icon-large\"></i>';\n", + " button.addEventListener('click', function (_evt) {\n", + " fig.handle_close(fig, {});\n", + " });\n", + " button.addEventListener(\n", + " 'mouseover',\n", + " on_mouseover_closure('Stop Interaction')\n", + " );\n", + " buttongrp.appendChild(button);\n", + " var titlebar = this.root.querySelector('.ui-dialog-titlebar');\n", + " titlebar.insertBefore(buttongrp, titlebar.firstChild);\n", + "};\n", + "\n", + "mpl.figure.prototype._remove_fig_handler = function (event) {\n", + " var fig = event.data.fig;\n", + " if (event.target !== this) {\n", + " // Ignore bubbled events from children.\n", + " return;\n", + " }\n", + " fig.close_ws(fig, {});\n", + "};\n", + "\n", + "mpl.figure.prototype._root_extra_style = function (el) {\n", + " el.style.boxSizing = 'content-box'; // override notebook setting of border-box.\n", + "};\n", + "\n", + "mpl.figure.prototype._canvas_extra_style = function (el) {\n", + " // this is important to make the div 'focusable\n", + " el.setAttribute('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", + " } else {\n", + " // location in version 2\n", + " IPython.keyboard_manager.register_events(el);\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", + "\n", + " // Check for shift+enter\n", + " if (event.shiftKey && event.which === 13) {\n", + " this.canvas_div.blur();\n", + " // select the cell after this one\n", + " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", + " IPython.notebook.select(index + 1);\n", + " }\n", + "};\n", + "\n", + "mpl.figure.prototype.handle_save = function (fig, _msg) {\n", + " fig.ondownload(fig, null);\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(\n", + " 'matplotlib',\n", + " mpl.mpl_figure_comm\n", + " );\n", + "}\n" + ], + "text/plain": [ + "<IPython.core.display.Javascript object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8AAAALQCAYAAABfdxm0AAAAAXNSR0IArs4c6QAAIABJREFUeF7s3Ql4VNX9//HvZLInQAiEJSyKbHVFUBBQcKFGEMUNlVptQQW1tVZr17+tJi5F/Vm1tlZFa9UqgksFBRcQFUUWRVBaG5U97GELhOzJzP+5J82QyUIyyZycu7zneXh+EGfO/Z7X957//3x6J/f6gsFgUHghgAACCCCAAAIIIIAAAggg4HIBHwHY5R1meggggAACCCCAAAIIIIAAAkqAAMyJgAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAIIIIAAAp4QIAB7os1MEgEEEEAAAQQQQAABBBBAgADMOYAAAggggAACCCCAAAIIIOAJAQKwJ9rMJBFAAAEEEEAAAQQQQAABBAjAnAMIIIAAAggggAACCCCAAAKeECAAe6LNTBIBBBBAAAEEEEAAAQQQQIAAzDmAAAIIIIAAAggggAACCCDgCQECsCfazCQRQAABBBBAAAEEEEAAAQQIwJwDCCCAAAIIIIAAAggggAACnhAgAHuizUwSAQQQQAABBBBAAAEEEECAAMw5gAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAIIIIAAAp4QIAB7os1MEgEEEEAAAQQQQAABBBBAgADMOYAAAggggAACCCCAAAIIIOAJAQKwJ9rMJBFAAAEEEEAAAQQQQAABBAjAnAMIIIAAAggggAACCCCAAAKeECAAe6LNTBIBBBBAAAEEEEAAAQQQQIAAzDmAAAIIIIAAAggggAACCCDgCQECsCfazCQRQAABBBBAAAEEEEAAAQQIwJwDCCCAAAIIIIAAAggggAACnhAgAHuizUwSAQQQQAABBBBAAAEEEECAAMw5gAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAIIIIAAAp4QIAB7os1MEgEEEEAAAQQQQAABBBBAgADMOYAAAggggAACCCCAAAIIIOAJAQKwJ9rMJBFAAAEEEEAAAQQQQAABBAjAnAMIIIAAAggggAACCCCAAAKeECAAe6LNTBIBBBBAAAEEEEAAAQQQQIAAzDmAAAIIIIAAAggggAACCCDgCQECsCfazCQRQAABBBBAAAEEEEAAAQQIwJwDCCCAAAIIIIAAAggggAACnhAgAHuizUwSAQQQQAABBBBAAAEEEECAAMw5gAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAIIIIAAAp4QIAB7os1MEgEEEEAAAQQQQAABBBBAgADMOYAAAggggAACCCCAAAIIIOAJAQKwJ9rMJBFAAAEEEEAAAQQQQAABBAjAnAMIIIAAAggggAACCCCAAAKeECAAe6LNTBIBBBBAAAEEEEAAAQQQQIAAzDmAAAIIIIAAAggggAACCCDgCQECsCfazCQRQAABBBBAAAEEEEAAAQQIwJwDCCCAAAIIIIAAAggggAACnhAgAHuizUwSAQQQQAABBBBAAAEEEECAAMw5gAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAIIIIAAAp4QIAB7os1MEgEEEEAAAQQQQAABBBBAgADMOYAAAggggAACCCCAAAIIIOAJAQKwJ9rMJBFAAAEEEEAAAQQQQAABBAjAnAMIIIAAAggggAACCCCAAAKeECAAe6LNTBIBBBBAAAEEEEAAAQQQQIAAzDmAAAIIIIAAAggggAACCCDgCQECsCfazCQRQAABBBBAAAEEEEAAAQQIwJwDCCCAAAIIIIAAAggggAACnhAgAHuizUwSAQQQQAABBBBAAAEEEECAAMw5gAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAIIIIAAAp4QIAB7os1MEgEEEEAAAQQQQAABBBBAgADMOYAAAggggAACCCCAAAIIIOAJAQKwJ9rMJBFAAAEEEEAAAQQQQAABBAjAnAMIIIAAAggggAACCCCAAAKeECAAe6LNTBIBBBBAAAEEEEAAAQQQQIAAzDmAAAIIIIAAAggggAACCCDgCQECsCfazCQRQAABBBBAAAEEEEAAAQQIwJwDCCCAAAIIIIAAAggggAACnhAgAHuizUwSAQQQQAABBBBAAAEEEECAAMw5gAACCCCAAAIIIIAAAggg4AkBArAn2swkEUAAAQQQQAABBBBAAAEECMCcAwgggAACCCCAAAII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8ojExcWZV7VJBSwwmzSCMhwnUBOCrcJrQu5fV/9VnlrzlJpLTFW6zLtkvvTqmOq4uVEwAggggAACCJgTYH9uzr7myI4IwEcffbRs3bpVZs+eLZdddllIzQrE7777rgrHX3zxhZx33nkyb948iYmJMS9rgwpYYDZoAiU4VsAKwdar5grvrqJdct7r50lVsEr9/LGzH5Oze58dml/d9zt24hSOAAIIIIAAAtoE2J9ro232wI4IwAkJCXL66afLBx980ODEAoGATJ48WV566SV5/PHH5cYbb2w2gJvfyAJzc3eZmwmBmxb8XJbsqP5/h07qNEReuqD694IbumJsoj6OiQACCCCAAAL2FmB/br4/jgjAPXr0kDPOOENdAW7sVVZWJr1795aePXuqq8G8RH1d3Hp9/fXXcCCAQCsFrJA78R8zpTD90dBIj41+TgZ2PE4mzVguefuK1c95LFIrofk4AggggAACLhZgf26+uY4IwJMmTZLFixdLXl7eEX/H9/LLL5f58+dLcXH1RtTrLxaY188A5h8tgcM3xiqS5KOeEH9ynho6rnSwpB6YEgq/NccjBEdLnnEQQAABBBBwlwD7c/P9dEQA/s9//iOnnXaaXH311fLUU9U3oWnode6554r13h07dpiXtUEFLDAbNIESHC9Q967Qse3+I0k9X1TzCgZ9UrT+VxKsSK83T0Kw41vPBBBAAAEEEIi6APvzqJNGPKAjArD19eeSkhL58ssvZcyYMXLffffJ0KFDwyZr/X7w2LFj5brrrpMnnngiYgg3foAF5sauMqe2Fqj/bOCApPT9k8TE71WllO8bKWW7JhCA27oxHA8BBBBAAAEHCrA/N980RwTgund1th571KtXLxkyZIi0b99eNm7cKJ9++qlMmDBBXnzxRUlOTjYva4MKWGA2aAIluEKgbgiOS1suid3nqLkFA3FStO43Eqw6/Egkrv66ou1MAgEEEEAAgagLsD+POmnEAzoiAO/atUs983f16tWhP1botR6DVPvVp08fGTx4sArGNf+3a9euEaO45QMsMLd0knnYQSAsBPvKJaXfAxITW6RKK9tzppTvHqf+Tvi1Q7eoAQEEEEAAAXsKsD833xdHBOCGmA4ePKi+El07FOfm5kplZaV6u3WV2Hp169ZNtm3bZl7aQAUsMAPoHNK1AvWuAqcvlsSu76j5BgPxUrTu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CCCAAAIIIIAAAi4LkAC7DEpxCCCAAAIIIIAAAggggAACwRQgAQ5mXKgVAggggAACCCCAAAIIIICAywIkwC6DUhwCCCCAAAIIIIAAAggggEAwBUiAgxkXaoUAAggggAACCCCAAAIIIOCyAAmwy6AUhwACCCCAAAIIIIAAAgggEEwBEuBgxoVaIYAAAggggAACCCCAAAIIuCxAAuwyKMUhgAACCCCAAAIIIIAAAggEU4AEOJhxoVYIIIAAAggggAACCCCAAAIuC5AAuwxKcQgggAACCCCAAAIIIIAAAsEUIAEOZlyoFQIIIIAAAggggAACCCCAgMsCJMAug1IcAggggAACCCCAAAIIIIBAMAVIgIMZF2qFAAIIIIAAAggggAACCCDgsgAJsMugFIcAAggggAACCCCAAAIIIBBMARLgYMaFWiGAAAIIFKnA1KlTZfny5bZrX1VVJc3NzRKJRPIeM23aNEmlUvLhhx/m3DcUCpnfp9PpXvslEgk54YQT5MEHHxQtb8GCBTJx4sS852YHBBBAAAEESkGABLgUosg1IIAAAggEQqC9vV3OOuusXonn448/LvX19XLQQQfJpEmTutV18uTJctlll+Wt/5IlS2THHXeUc889V6677rqCEuDOzk6T/P7xj3+U7bffXv72t7/JhAkT8p6bHRBAAAEEECgVARLgUokk14EAAgggEFgBfcK6cuVK+ec//yk77bRTQfW8+uqr5cILL5Snn35aDjzwQMcJsCa/xx9/vDz00EOyww47mCe/48aNK6guHIQAAggggECxCpAAF2vkqDcCCCCAQFEIrFu3TkaPHi3xeFxaWlokGo0WVO99991XFi9eLGvWrJFYLOYoAdbk99hjj5WHH37YPEXWJ79jx44tqB4chAACCCCAQDELkAAXc/SoOwIIIIBA4AU02dShz7vttpu8/vrrBdV37dq15mmtJrH33ntv3jKy3wHu6Ogwxz3yyCOy8847myfIY8aMyVsGOyCAAAIIIFCKAiTApRhVrgkBBBBAIDAC119/vZx33nlyyimnyB133FFQve68805z/Lx58+TEE0/MW4aVAOs7yUcffbQ89thj8qUvfckkv/o0mg0BBBBAAIFyFSABLtfIc90IIIAAAoMicNppp5nE95prrpHzzz+/oHMec8wxZviyTqQ1YsSIvGVYCfChhx4q8+fPN0+f//rXv8qoUaPyHssOCCCAAAIIlLIACXApR5drQwABBBDwXWDGjBmyaNEieeqpp+TrX/+64/roEGZ9arv77rvLM888Y+t4KwHWnfXvb731lhn+zIYAAggggEC5C5AAl/sdwPUjgAACCHgmkEwmpaamRtra2mT16tUFvXv7l7/8RWbNmuXoCbKVAH/1q1+V559/3sw8/eyzz/IE2LNIUzACCCCAQLEIkAAXS6SoJwIIIIBA0Qm88847JvnUGZdXrVpVUP1/9KMfyY033ijvv/++TJs2zVYZVgLc0NBglkzSJ9D6JFon5KqtrbVVBjshgAACCCBQigIkwKUYVa4JAQQQQCAQAjpjs05aNXPmTNEnuYVsU6ZMkaqqKnn33XdtH549C7TOIP21r31NNBnXpZSeeOIJGTJkiO2y2BEBBBBAAIFSEiABLqVoci0IIIAAAoES+OlPfyq/+MUv5Cc/+Yn88pe/dFy3N99800xg5fT47ARYT7py5UqT/H700UfyjW98wyyJVFFR4bg+HIAAAggggECxC5AAF3sEqT8CCCCAQGAFDjnkEHn88cdFlzE6+eSTHdfz8ssvl0svvVT+/ve/mwTW7tYzAdbjPv74Y1PGZ599JkcddZTcf//9EolE7BbJfggggAACCJSEAAlwSYSRi0AAAQQQCKLApEmTTML5xhtvyK677uq4invuuad8+OGHZvkjJ8lqXwmwnlyHUe+3336yZs0a+d73vmeWZ8qeMdpxBTkAAQQQQACBIhMgAS6ygFFdBBBAAIHiEFi/fr2ZdTkWi0lLS4vjIceff/65TJw4UU466SS56667HF10fwmwFqLJ+AEHHCA6QdbZZ58tN9xwg6Oy2RkBBBBAAIFiFiABLuboUXcEEEAAzm1QDwAAAg1JREFUgcAKLFiwwMzArOvvLl682HE9b731VjnjjDPkvvvuk+OOO87R8bkSYC3oxRdflIMPPlg2btwoF110kcydO9dR+eyMAAIIIIBAsQqQABdr5Kg3AggggEBJCxx++OFm5midxZmli0o61FwcAggggMAgCpAADyI2p0IAAQQQQMCuwNVXXy3Dhg2TM8880+4h7IcAAggggAACeQRIgLlFEEAAAQQQQAABBBBAAAEEykKABLgswsxFIoAAAggggAACCCCAAAIIkABzDyCAAAIIIIAAAggggAACCJSFAAlwWYSZi0QAAQQQQAABBBBAAAEEECAB5h5AAAEEEEAAAQQQQAABBBAoCwES4LIIMxeJAAIIIIAAAggggAACCCBAAsw9gAACCCCAAAIIIIAAAgggUBYCJMBlEWYuEgEEEEAAAQQQQAABBBBAgASYewABBBBAAAEEEEAAAQQQQKAsBEiAyyLMXCQCCCCAAAIIIIAAAggggAAJMPcAAggggAACCCCAAAIIIIBAWQiQAJdFmLlIBBBAAAEEEEAAAQQQQAABEmDuAQQQQAABBBBAAAEEEEAAgbIQIAEuizBzkQgggAACCCCAAAIIIIAAAiTA3AMIIIAAAggggAACCCCAAAJlIUACXBZh5iIRQAABBBBAAAEEEEAAAQRIgLkHEEAAAQQQQAABBBBAAAEEykLg/wNlB+iqnbpmVwAAAABJRU5ErkJggg==\" width=\"640\">" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib nbagg\n", + "fname = 'N2C2_coolprop_crits.csv'\n", + "CP.set_config_bool(CP.ASSUME_CRITICAL_POINT_STABLE, True)\n", + "\n", + "# Default model...\n", + "AS = CP.AbstractState('HEOS', 'Nitrogen&Ethane')\n", + "# Or this block is an option for PR+kij:\n", + "# AS = CP.AbstractState('PR', 'Nitrogen&Ethane')\n", + "# AS.set_binary_interaction_double(0,1,'kij',0.0515)\n", + "o = []\n", + "for x0 in np.linspace(0.001, 0.999, 201):\n", + " AS.set_mole_fractions([x0, 1-x0])\n", + " try:\n", + " pts = AS.all_critical_points()\n", + " for pt in pts:\n", + " o.append({\n", + " 'x0': x0,\n", + " 'T / K': pt.T,\n", + " 'p / Pa': pt.p\n", + " }) \n", + " except BaseException as BE:\n", + " pass\n", + "df = pandas.DataFrame(o)\n", + "df.to_csv(fname)\n", + "\n", + "# Discrete points\n", + "df = pandas.read_csv(fname)\n", + "plt.plot(df['T / K'], df['p / Pa'], 'X')\n", + "\n", + "def get_critical_curve(ipure):\n", + "\n", + " names = ['Nitrogen', 'Ethane']\n", + " model = teqp.build_multifluid_model(names, '../mycp', '../mycp/dev/mixtures/mixture_binary_pairs.json')#,{'estimate':'Lorentz-Berthelot'})\n", + "\n", + " tic = timeit.default_timer()\n", + " T0 = CP.PropsSI('Tcrit', names[ipure])\n", + " rho0 = [CP.PropsSI('rhomolar_critical', names[ipure])]*2\n", + " rho0[1-ipure] = 0\n", + " curveJSON = teqp.trace_critical_arclength_binary(model, T0, rho0, \"\")\n", + " toc = timeit.default_timer()\n", + " df = pandas.DataFrame(curveJSON)\n", + " df['z0 / mole frac.'] = df['rho0 / mol/m^3']/(df['rho0 / mol/m^3']+df['rho1 / mol/m^3'])\n", + " return df\n", + "\n", + "for ipure in [0,1]:\n", + " df = get_critical_curve(ipure)\n", + " plt.plot(df['T / K'], df['p / Pa'], '-')\n", + "\n", + "plt.xlim(50, 350)\n", + "plt.ylim(1e6, 1e9)\n", + "plt.gca().set(xlabel='$T$ / K', ylabel='$p$ / Pa')\n", + "plt.yscale('log')\n", + "plt.show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab