├── LICENSE ├── README.md ├── VennABERS.py └── test └── VennABERS_test.ipynb /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Paolo Toccaceli, Royal Holloway, Univ. of London 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Venn-ABERS Predictor 2 | *(Preliminary documentation)* 3 | 4 | The `VennABERS.py` file is a pure Python implementation of the fast Venn-ABERS Predictor described in 5 | [Vovk2015](http://alrw.net/articles/13.pdf). 6 | 7 | A Venn-ABERS predictor outputs two probability predictions for every test object. 8 | In particular, the Venn-ABERS predictor implemented here is the inductive form of probability predictor, which relies on a calibration set. 9 | In a nutshell, the Venn-ABERS predictor can be viewed as a distribution-free calibration function that maps scores output by a *scoring classifier* to well-calibrated probabilities. 10 | A gentle introduction can be found in this [tutorial](https://cml.rhul.ac.uk/people/ptocca/HomePage/Toccaceli_CP___Venn_Tutorial.pdf). 11 | 12 | The function that implements the Venn-ABERS Predictor is `ScoresToMultiProbs()`. 13 | 14 | ```python 15 | p0,p1 = ScoresToMultiProbs(calibrPts,testScores) 16 | ``` 17 | 18 | calibrPts: a list of pairs (score,label) corresponding to the scores and labels of the calibration examples. The score is a float and the label is an integer meant to take values 0 or 1. 19 | 20 | testScores: a list of floats corresponding to the scores for the test objects. 21 | 22 | The function returns a pair of Numpy arrays with the probabilistic predictions. 23 | 24 | ## Version History 25 | - 0.1 - Initial implementation 26 | - 0.2 - 2020-07 Fixed bug affecting p_0 calculation, added test notebook 27 | 28 | ## Acknowlegdements 29 | * Work done with funding from the European Union`s Horizon 2020 Research and Innovation programme under Grant Agreement no. 671555 (ExCAPE). 30 | * We are grateful for the help in conducting experiments to the Ministry of Education, Youth and Sports (Czech Republic) that supports the Large Infrastructures for Research, Experimental Development and Innovations project "IT4Innovations National Supercomputing Center - LM2015070". 31 | -------------------------------------------------------------------------------- /VennABERS.py: -------------------------------------------------------------------------------- 1 | # Straight-forward implementation of IVAP algorithm described in: 2 | # Large-scale probabilistic prediction with and without validity guarantees, Vovk et al. 3 | # https://arxiv.org/pdf/1511.00213.pdf 4 | # 5 | # Paolo Toccaceli 6 | # 7 | # https://github.com/ptocca/VennABERS 8 | # 9 | # 2020-07-09: Fixed bug in p0 calculation 10 | 11 | import numpy as np 12 | 13 | # Some elementary functions to speak the same language as the paper 14 | # (at some point we'll just replace the occurrence of the calls with the function body itself) 15 | def push(x,stack): 16 | stack.append(x) 17 | 18 | 19 | def pop(stack): 20 | return stack.pop() 21 | 22 | 23 | def top(stack): 24 | return stack[-1] 25 | 26 | 27 | def nextToTop(stack): 28 | return stack[-2] 29 | 30 | 31 | # perhaps inefficient but clear implementation 32 | def nonleftTurn(a,b,c): 33 | d1 = b-a 34 | d2 = c-b 35 | return np.cross(d1,d2)<=0 36 | 37 | 38 | def nonrightTurn(a,b,c): 39 | d1 = b-a 40 | d2 = c-b 41 | return np.cross(d1,d2)>=0 42 | 43 | 44 | def slope(a,b): 45 | ax,ay = a 46 | bx,by = b 47 | return (by-ay)/(bx-ax) 48 | 49 | 50 | def notBelow(t,p1,p2): 51 | p1x,p1y = p1 52 | p2x,p2y = p2 53 | tx,ty = t 54 | m = (p2y-p1y)/(p2x-p1x) 55 | b = (p2x*p1y - p1x*p2y)/(p2x-p1x) 56 | return (ty >= tx*m+b) 57 | 58 | kPrime = None 59 | 60 | # Because we cannot have negative indices in Python (they have another meaning), I use a dictionary 61 | 62 | def algorithm1(P): 63 | global kPrime 64 | 65 | S = [] 66 | P[-1] = np.array((-1,-1)) 67 | push(P[-1],S) 68 | push(P[0],S) 69 | for i in range(1,kPrime+1): 70 | while len(S)>1 and nonleftTurn(nextToTop(S),top(S),P[i]): 71 | pop(S) 72 | push(P[i],S) 73 | return S 74 | 75 | 76 | def algorithm2(P,S): 77 | global kPrime 78 | 79 | Sprime = S[::-1] # reverse the stack 80 | 81 | F1 = np.zeros((kPrime+1,)) 82 | for i in range(1,kPrime+1): 83 | F1[i] = slope(top(Sprime),nextToTop(Sprime)) 84 | P[i-1] = P[i-2]+P[i]-P[i-1] 85 | if notBelow(P[i-1],top(Sprime),nextToTop(Sprime)): 86 | continue 87 | pop(Sprime) 88 | while len(Sprime)>1 and nonleftTurn(P[i-1],top(Sprime),nextToTop(Sprime)): 89 | pop(Sprime) 90 | push(P[i-1],Sprime) 91 | return F1 92 | 93 | 94 | def algorithm3(P): 95 | global kPrime 96 | 97 | S = [] 98 | push(P[kPrime+1],S) 99 | push(P[kPrime],S) 100 | for i in range(kPrime-1,0-1,-1): # k'-1,k'-2,...,0 101 | while len(S)>1 and nonrightTurn(nextToTop(S),top(S),P[i]): 102 | pop(S) 103 | push(P[i],S) 104 | return S 105 | 106 | 107 | def algorithm4(P,S): 108 | global kPrime 109 | 110 | Sprime = S[::-1] # reverse the stack 111 | 112 | F0 = np.zeros((kPrime+1,)) 113 | for i in range(kPrime,1-1,-1): # k',k'-1,...,1 114 | F0[i] = slope(top(Sprime),nextToTop(Sprime)) 115 | P[i] = P[i-1]+P[i+1]-P[i] 116 | if notBelow(P[i],top(Sprime),nextToTop(Sprime)): 117 | continue 118 | pop(Sprime) 119 | while len(Sprime)>1 and nonrightTurn(P[i],top(Sprime),nextToTop(Sprime)): 120 | pop(Sprime) 121 | push(P[i],Sprime) 122 | return F0 123 | 124 | 125 | def prepareData(calibrPoints): 126 | global kPrime 127 | 128 | ptsSorted = sorted(calibrPoints) 129 | 130 | xs = np.fromiter((p[0] for p in ptsSorted),float) 131 | ys = np.fromiter((p[1] for p in ptsSorted),float) 132 | ptsUnique,ptsIndex,ptsInverse,ptsCounts = np.unique(xs, 133 | return_index=True, 134 | return_counts=True, 135 | return_inverse=True) 136 | a = np.zeros(ptsUnique.shape) 137 | np.add.at(a,ptsInverse,ys) 138 | # now a contains the sums of ys for each unique value of the objects 139 | 140 | w = ptsCounts 141 | yPrime = a/w 142 | yCsd = np.cumsum(w*yPrime) # Might as well do just np.cumsum(a) 143 | xPrime = np.cumsum(w) 144 | kPrime = len(xPrime) 145 | 146 | return yPrime,yCsd,xPrime,ptsUnique 147 | 148 | 149 | def computeF(xPrime,yCsd): 150 | global kPrime 151 | P = {0:np.array((0,0))} 152 | P.update({i+1:np.array((k,v)) for i,(k,v) in enumerate(zip(xPrime,yCsd))}) 153 | 154 | S = algorithm1(P) 155 | F1 = algorithm2(P,S) 156 | 157 | P = {0:np.array((0,0))} 158 | P.update({i+1:np.array((k,v)) for i,(k,v) in enumerate(zip(xPrime,yCsd))}) 159 | P[kPrime+1] = P[kPrime] + np.array((1.0,0.0)) # The paper says (1,1) 160 | 161 | S = algorithm3(P) 162 | F0 = algorithm4(P,S) 163 | 164 | return F0,F1 165 | 166 | 167 | def getFVal(F0,F1,ptsUnique,testObjects): 168 | pos0 = np.searchsorted(ptsUnique,testObjects,side='left') 169 | pos1 = np.searchsorted(ptsUnique[:-1],testObjects,side='right')+1 170 | return F0[pos0],F1[pos1] 171 | 172 | 173 | def ScoresToMultiProbs(calibrPoints,testObjects): 174 | # sort the points, transform into unique objects, with weights and updated values 175 | yPrime,yCsd,xPrime,ptsUnique = prepareData(calibrPoints) 176 | 177 | # compute the F0 and F1 functions from the CSD 178 | F0,F1 = computeF(xPrime,yCsd) 179 | 180 | # compute the values for the given test objects 181 | p0,p1 = getFVal(F0,F1,ptsUnique,testObjects) 182 | 183 | return p0,p1 184 | -------------------------------------------------------------------------------- /test/VennABERS_test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Test of VennABERS fast implementation\n", 8 | "\n", 9 | "The notebook documents a test on the VennABERS implementation.\n", 10 | "\n", 11 | "The correctness is tested against the slower implementation of Venn-ABERS predictors as per the definition." 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 1, 17 | "metadata": { 18 | "ExecuteTime": { 19 | "end_time": "2020-07-09T17:31:25.395925Z", 20 | "start_time": "2020-07-09T17:31:25.345564Z" 21 | } 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "import numpy as np" 26 | ] 27 | }, 28 | { 29 | "cell_type": "code", 30 | "execution_count": 2, 31 | "metadata": { 32 | "ExecuteTime": { 33 | "end_time": "2020-07-09T17:31:25.657895Z", 34 | "start_time": "2020-07-09T17:31:25.397149Z" 35 | } 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "from bokeh.plotting import figure, show\n", 40 | "from bokeh.io import output_notebook" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 3, 46 | "metadata": { 47 | "ExecuteTime": { 48 | "end_time": "2020-07-09T17:31:25.664465Z", 49 | "start_time": "2020-07-09T17:31:25.659249Z" 50 | } 51 | }, 52 | "outputs": [ 53 | { 54 | "data": { 55 | "text/html": [ 56 | "\n", 57 | "
\n", 58 | " \n", 59 | " Loading BokehJS ...\n", 60 | "
" 61 | ] 62 | }, 63 | "metadata": {}, 64 | "output_type": "display_data" 65 | }, 66 | { 67 | "data": { 68 | "application/javascript": [ 69 | "\n", 70 | "(function(root) {\n", 71 | " function now() {\n", 72 | " return new Date();\n", 73 | " }\n", 74 | "\n", 75 | " var force = true;\n", 76 | "\n", 77 | " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", 78 | " root._bokeh_onload_callbacks = [];\n", 79 | " root._bokeh_is_loading = undefined;\n", 80 | " }\n", 81 | "\n", 82 | " var JS_MIME_TYPE = 'application/javascript';\n", 83 | " var HTML_MIME_TYPE = 'text/html';\n", 84 | " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", 85 | " var CLASS_NAME = 'output_bokeh rendered_html';\n", 86 | "\n", 87 | " /**\n", 88 | " * Render data to the DOM node\n", 89 | " */\n", 90 | " function render(props, node) {\n", 91 | " var script = document.createElement(\"script\");\n", 92 | " node.appendChild(script);\n", 93 | " }\n", 94 | "\n", 95 | " /**\n", 96 | " * Handle when an output is cleared or removed\n", 97 | " */\n", 98 | " function handleClearOutput(event, handle) {\n", 99 | " var cell = handle.cell;\n", 100 | "\n", 101 | " var id = cell.output_area._bokeh_element_id;\n", 102 | " var server_id = cell.output_area._bokeh_server_id;\n", 103 | " // Clean up Bokeh references\n", 104 | " if (id != null && id in Bokeh.index) {\n", 105 | " Bokeh.index[id].model.document.clear();\n", 106 | " delete Bokeh.index[id];\n", 107 | " }\n", 108 | "\n", 109 | " if (server_id !== undefined) {\n", 110 | " // Clean up Bokeh references\n", 111 | " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", 112 | " cell.notebook.kernel.execute(cmd, {\n", 113 | " iopub: {\n", 114 | " output: function(msg) {\n", 115 | " var id = msg.content.text.trim();\n", 116 | " if (id in Bokeh.index) {\n", 117 | " Bokeh.index[id].model.document.clear();\n", 118 | " delete Bokeh.index[id];\n", 119 | " }\n", 120 | " }\n", 121 | " }\n", 122 | " });\n", 123 | " // Destroy server and session\n", 124 | " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", 125 | " cell.notebook.kernel.execute(cmd);\n", 126 | " }\n", 127 | " }\n", 128 | "\n", 129 | " /**\n", 130 | " * Handle when a new output is added\n", 131 | " */\n", 132 | " function handleAddOutput(event, handle) {\n", 133 | " var output_area = handle.output_area;\n", 134 | " var output = handle.output;\n", 135 | "\n", 136 | " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", 137 | " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", 138 | " return\n", 139 | " }\n", 140 | "\n", 141 | " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", 142 | "\n", 143 | " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", 144 | " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", 145 | " // store reference to embed id on output_area\n", 146 | " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", 147 | " }\n", 148 | " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", 149 | " var bk_div = document.createElement(\"div\");\n", 150 | " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", 151 | " var script_attrs = bk_div.children[0].attributes;\n", 152 | " for (var i = 0; i < script_attrs.length; i++) {\n", 153 | " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", 154 | " }\n", 155 | " // store reference to server id on output_area\n", 156 | " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", 157 | " }\n", 158 | " }\n", 159 | "\n", 160 | " function register_renderer(events, OutputArea) {\n", 161 | "\n", 162 | " function append_mime(data, metadata, element) {\n", 163 | " // create a DOM node to render to\n", 164 | " var toinsert = this.create_output_subarea(\n", 165 | " metadata,\n", 166 | " CLASS_NAME,\n", 167 | " EXEC_MIME_TYPE\n", 168 | " );\n", 169 | " this.keyboard_manager.register_events(toinsert);\n", 170 | " // Render to node\n", 171 | " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", 172 | " render(props, toinsert[toinsert.length - 1]);\n", 173 | " element.append(toinsert);\n", 174 | " return toinsert\n", 175 | " }\n", 176 | "\n", 177 | " /* Handle when an output is cleared or removed */\n", 178 | " events.on('clear_output.CodeCell', handleClearOutput);\n", 179 | " events.on('delete.Cell', handleClearOutput);\n", 180 | "\n", 181 | " /* Handle when a new output is added */\n", 182 | " events.on('output_added.OutputArea', handleAddOutput);\n", 183 | "\n", 184 | " /**\n", 185 | " * Register the mime type and append_mime function with output_area\n", 186 | " */\n", 187 | " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", 188 | " /* Is output safe? */\n", 189 | " safe: true,\n", 190 | " /* Index of renderer in `output_area.display_order` */\n", 191 | " index: 0\n", 192 | " });\n", 193 | " }\n", 194 | "\n", 195 | " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", 196 | " if (root.Jupyter !== undefined) {\n", 197 | " var events = require('base/js/events');\n", 198 | " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", 199 | "\n", 200 | " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", 201 | " register_renderer(events, OutputArea);\n", 202 | " }\n", 203 | " }\n", 204 | "\n", 205 | " \n", 206 | " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", 207 | " root._bokeh_timeout = Date.now() + 5000;\n", 208 | " root._bokeh_failed_load = false;\n", 209 | " }\n", 210 | "\n", 211 | " var NB_LOAD_WARNING = {'data': {'text/html':\n", 212 | " \"
\\n\"+\n", 213 | " \"

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

\\n\"+\n", 217 | " \"\\n\"+\n", 221 | " \"\\n\"+\n", 222 | " \"from bokeh.resources import INLINE\\n\"+\n", 223 | " \"output_notebook(resources=INLINE)\\n\"+\n", 224 | " \"\\n\"+\n", 225 | " \"
\"}};\n", 226 | "\n", 227 | " function display_loaded() {\n", 228 | " var el = document.getElementById(\"1001\");\n", 229 | " if (el != null) {\n", 230 | " el.textContent = \"BokehJS is loading...\";\n", 231 | " }\n", 232 | " if (root.Bokeh !== undefined) {\n", 233 | " if (el != null) {\n", 234 | " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", 235 | " }\n", 236 | " } else if (Date.now() < root._bokeh_timeout) {\n", 237 | " setTimeout(display_loaded, 100)\n", 238 | " }\n", 239 | " }\n", 240 | "\n", 241 | "\n", 242 | " function run_callbacks() {\n", 243 | " try {\n", 244 | " root._bokeh_onload_callbacks.forEach(function(callback) {\n", 245 | " if (callback != null)\n", 246 | " callback();\n", 247 | " });\n", 248 | " } finally {\n", 249 | " delete root._bokeh_onload_callbacks\n", 250 | " }\n", 251 | " console.debug(\"Bokeh: all callbacks have finished\");\n", 252 | " }\n", 253 | "\n", 254 | " function load_libs(css_urls, js_urls, callback) {\n", 255 | " if (css_urls == null) css_urls = [];\n", 256 | " if (js_urls == null) js_urls = [];\n", 257 | "\n", 258 | " root._bokeh_onload_callbacks.push(callback);\n", 259 | " if (root._bokeh_is_loading > 0) {\n", 260 | " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", 261 | " return null;\n", 262 | " }\n", 263 | " if (js_urls == null || js_urls.length === 0) {\n", 264 | " run_callbacks();\n", 265 | " return null;\n", 266 | " }\n", 267 | " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", 268 | " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", 269 | "\n", 270 | " function on_load() {\n", 271 | " root._bokeh_is_loading--;\n", 272 | " if (root._bokeh_is_loading === 0) {\n", 273 | " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", 274 | " run_callbacks()\n", 275 | " }\n", 276 | " }\n", 277 | "\n", 278 | " function on_error() {\n", 279 | " console.error(\"failed to load \" + url);\n", 280 | " }\n", 281 | "\n", 282 | " for (var i = 0; i < css_urls.length; i++) {\n", 283 | " var url = css_urls[i];\n", 284 | " const element = document.createElement(\"link\");\n", 285 | " element.onload = on_load;\n", 286 | " element.onerror = on_error;\n", 287 | " element.rel = \"stylesheet\";\n", 288 | " element.type = \"text/css\";\n", 289 | " element.href = url;\n", 290 | " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", 291 | " document.body.appendChild(element);\n", 292 | " }\n", 293 | "\n", 294 | " for (var i = 0; i < js_urls.length; i++) {\n", 295 | " var url = js_urls[i];\n", 296 | " var element = document.createElement('script');\n", 297 | " element.onload = on_load;\n", 298 | " element.onerror = on_error;\n", 299 | " element.async = false;\n", 300 | " element.src = url;\n", 301 | " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", 302 | " document.head.appendChild(element);\n", 303 | " }\n", 304 | " };var element = document.getElementById(\"1001\");\n", 305 | " if (element == null) {\n", 306 | " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n", 307 | " return false;\n", 308 | " }\n", 309 | "\n", 310 | " function inject_raw_css(css) {\n", 311 | " const element = document.createElement(\"style\");\n", 312 | " element.appendChild(document.createTextNode(css));\n", 313 | " document.body.appendChild(element);\n", 314 | " }\n", 315 | "\n", 316 | " \n", 317 | " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n", 318 | " var css_urls = [];\n", 319 | " \n", 320 | "\n", 321 | " var inline_js = [\n", 322 | " function(Bokeh) {\n", 323 | " Bokeh.set_log_level(\"info\");\n", 324 | " },\n", 325 | " function(Bokeh) {\n", 326 | " \n", 327 | " \n", 328 | " }\n", 329 | " ];\n", 330 | "\n", 331 | " function run_inline_js() {\n", 332 | " \n", 333 | " if (root.Bokeh !== undefined || force === true) {\n", 334 | " \n", 335 | " for (var i = 0; i < inline_js.length; i++) {\n", 336 | " inline_js[i].call(root, root.Bokeh);\n", 337 | " }\n", 338 | " if (force === true) {\n", 339 | " display_loaded();\n", 340 | " }} else if (Date.now() < root._bokeh_timeout) {\n", 341 | " setTimeout(run_inline_js, 100);\n", 342 | " } else if (!root._bokeh_failed_load) {\n", 343 | " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", 344 | " root._bokeh_failed_load = true;\n", 345 | " } else if (force !== true) {\n", 346 | " var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n", 347 | " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", 348 | " }\n", 349 | "\n", 350 | " }\n", 351 | "\n", 352 | " if (root._bokeh_is_loading === 0) {\n", 353 | " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", 354 | " run_inline_js();\n", 355 | " } else {\n", 356 | " load_libs(css_urls, js_urls, function() {\n", 357 | " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", 358 | " run_inline_js();\n", 359 | " });\n", 360 | " }\n", 361 | "}(window));" 362 | ], 363 | "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

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

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"1001\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" 364 | }, 365 | "metadata": {}, 366 | "output_type": "display_data" 367 | } 368 | ], 369 | "source": [ 370 | "output_notebook()" 371 | ] 372 | }, 373 | { 374 | "cell_type": "code", 375 | "execution_count": 4, 376 | "metadata": { 377 | "ExecuteTime": { 378 | "end_time": "2020-07-09T17:31:25.671588Z", 379 | "start_time": "2020-07-09T17:31:25.665871Z" 380 | } 381 | }, 382 | "outputs": [], 383 | "source": [ 384 | "np.random.seed(0)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 5, 390 | "metadata": { 391 | "ExecuteTime": { 392 | "end_time": "2020-07-09T17:31:25.680448Z", 393 | "start_time": "2020-07-09T17:31:25.673202Z" 394 | } 395 | }, 396 | "outputs": [], 397 | "source": [ 398 | "def sigmoid(x):\n", 399 | " return np.exp(-np.logaddexp(0,-x))\n", 400 | "\n", 401 | "def thr(xs):\n", 402 | " return 0.5*(sigmoid((xs+4))+sigmoid(4*(xs-4)))\n", 403 | "\n", 404 | "def classAssignment(xs):\n", 405 | " global thr\n", 406 | " u = np.random.random(size=xs.shape[0])\n", 407 | " ys = u\n" 446 | ] 447 | }, 448 | "metadata": {}, 449 | "output_type": "display_data" 450 | }, 451 | { 452 | "data": { 453 | "application/javascript": [ 454 | "(function(root) {\n", 455 | " function embed_document(root) {\n", 456 | " \n", 457 | " var docs_json = {\"2f6f682d-d199-43d8-9aec-8beedad21b37\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1015\",\"type\":\"Grid\"},{\"id\":\"1020\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1016\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"id\":\"1042\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1045\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1027\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1003\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1007\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1005\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1009\",\"type\":\"LinearScale\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1021\",\"type\":\"PanTool\"},{\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"id\":\"1024\",\"type\":\"SaveTool\"},{\"id\":\"1025\",\"type\":\"ResetTool\"},{\"id\":\"1026\",\"type\":\"HelpTool\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1047\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"callback\":null},\"id\":\"1003\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_color\":\"green\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1035\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1036\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"EYD6cndBVD9Xblm2D6pUP5l7+q3CFFU/AOzeIZuBVT8GGq0QpPBVP6Q/v7DoYVY/Ujw3cXTVVj8JbRf7UktXPxKrYDKQw1c/1oY1Nzg+WD+x1AJnV7tYP6KgrV36Olk/p5/G9i29WT9DNMNO/0FaP7ocPMR7yVo/keEx+bBTWz/pGlfUrOBbP7SjYIJ9cFw/kNFbdzEDXT/3yApw15hdP7AER3N+MV4/IShq0zXNXj+fNL0vDWxfP08c9zoKB2A/70jG8a1ZYD+o7MUD+q1gPwfJ5uH2A2E/U9lYJ61bYT/EEFeaJbVhP1ye9ixpEGI/o8L5/YBtYj9VQ6ZZdsxiP16Jn7pSLWM/VHXEyh+QYz9s9hBk5/RjP1lwg5GzW2Q/4PsFkI7EZD+fjlvPgi9lP58VEfOanGU/4o5y0+ELZj+eLYR+Yn1mPziV/zgo8WY/GzZVfz5nZz+Y2LEGsd9nP3VgCL6LWmg/JNUfz9rXaD/tuKWfqldpP5K6RNIH2mk/XMu/R/9eaj+kpBEgnuZqP3PGkLvxcGs/LfkXvAf+az9GXDMG7o1sP0kKUsKyIG0/QFz8XWS2bT/p0w6NEU9uP2u1+UrJ6m4/L1gF3JqJbz/Smk3nyhVwP4LeSf5kaHA/MXlExqO8cD/y7pZ5jxJxP51oVXowanE/VEP/Uo/DcT8nDzK3tB5yP+f9XoSpe3I/nMOCwnbacj9N6d+kJTtzPx2Su4q/nXM/GLMcAE4CdD+3vI2+2mh0Px214K1v0XQ/j8H15BY8dT/sHISq2qh1P1t45XXFF3Y/EsPj7+GIdj/1VInzOvx2P/N3847bcXc/GUonBM/pdz8n8+jJIGR4P0ImlYzc4Hg/YOj8Lg5geT8yk0PLweF5PxcLv7MDZno/1R3ac+Dsej9L//jQZHZ7P6LXX8udAnw/+VUbn5iRfD9/OevEYiN9P27BLvMJuH0/RvPSHpxPfj/epUJ8J+p+Pzk+WIC6h38/tYSo8DEUgD9ID+FLGWaAP3xYx++auYA/Tt1vnL4OgT8bco40jGWBP8hH870LvoE/VnMIYkUYgj9H6E9uQXSCP1bV4VQI0oI/YlLrrKIxgz/4TC0zGZODP12ge8p09oM/qEQ8fL5bhD+0f+Z4/8KEP0IBghhBLIU/y9Il24yXhT9GAndp7ASGP8vtJpVpdIY/AhVxWQ7mhj+4U5jb5FmHP+hnY2v3z4c/8KOYg1BIiD+GrHjK+sKIPxkgOBIBQIk/ggR4WW6/iT+g1bzLTUGKP3IO5MGqxYo/ewSYwpBMiz9f68GCC9aLP4jV+eUmYow/+IP0/u7wjD/H1u4PcIKNP+GsFou2Fo4/oADxEs+tjj87DL16xkePP68/1Map5I8/nGeDFkNCkD/7T3qKtJOQP9oqMQyw5pA/oiHFgTw7kT8MfrTqYJGRPxmiAmAk6ZE/cYxZFI5Ckj9NxShUpZ2SP/iOwYVx+pI/0zNwKfpYkz9wSpLZRrmTP1nHqUpfG5Q/5rJsS0t/lD8EWNHEEuWUPx3AFrq9TJU/kk7JSFS2lT9nTcOo3iGWPyg7KSxlj5Y/RKlhP/D+lj96eAhpiHCXP9o/3Uk25Jc/AaqsnAJamD8hkjQ29tGYP2mqAgUaTJk/FnNNEXfImT/1SMd8FkeaP9NQa4IByJo/MQREdkFLmz9yIivF39CbP9DIgvTlWJw/SXLnoV3jnD/gn9qCUHCdP2LoZWTI/50/LS62Ks+Rnj/7uK7QbiafPyvwc2exvZ8/BLn2itAroD/uoR8MJHqgP+TqnF/YyaA/jUrgt/IaoT/uYxNReG2hP6c1wXBuwaE/8md6ZdoWoj8yVnSGwW2iP12xIjMpxqI/S5jL0hYgoz+HAxbUj3ujPyJikqyZ2KM/uEU92Dk3pD8J/PvYdZekPzb1EjZT+aQ/DdaVe9dcpT8BF9E5CMKlP40QrQTrKKY/RVcKc4WRpj91Shce3fumP4y5nqD3Z6c/ooVPltrVpz/sJf2ai0WoP1b32EkQt6g/J0GkPG4qqT9K2toKq5+pP8hc1kjMFqo/HdfphtePqj/a7HVQ0gqrPyJb9SrCh6s/JNcBlawGrD8PQFEFl4esP2sgq+mGCq0/6X3WpYGPrT+Z+X+SjBauPy9GGPysn64/AP2qIegqrz9R3q0zQ7ivP6FGZKnhI7A/yW1Kx7ZssD/E3ityo7awP3uB2R6qAbE/CfunN81NsT82g8EbD5uxPwRVdB5y6bE/QNJ9hvg4sj9KdFKNpImyP/qmYl5427I/RK1cFnYusz/esWvCn4KzPygpdF/317M/PKxN2X4utD8pePoJOIa0PzS/3Lgk37Q/Bv3pmUY5tT+4gdxMn5S1P8BqY1ww8bU/yENRPftOtj+jjMlNAa62P6xkbdRDDrc/1p6H/8Nvtz/uhDjkgtK3P3iToX2BNrg/qXoRrMCbuD/zszA0QQK5P17+Lr4Dark//Bby1AjTuT86BUblUD26P7hVDz3cqLo/nqB/CqsVuz8Mu0xbvYO7P1H16hsT87s/0MnKFqxjvD+HYprzh9W8P7ZcizamSL0/+DOdPwa9vT9yv+xJpzK+P8ksCWuIqb4/tOVOkqghvz95zUiIBpu/PyIiDHfQCsA/Iy9yHrtIwD9FXqhiQofAP3g6fldlxsA/ArsE/CIGwT9AaVY6ekbBP1EvZOdph8E/FQTHwvDIwT/Ep5Z2DQvCPy+jRZe+TcI/ibqCowKRwj/QAiAE2NTCP17H/ws9GcM/SmsH+C9ewz8DcBjvrqPDP3bIDwK46cM/mJ3LK0kwxD+LpjdRYHfEP8wzYEH7vsQ/CwqMtRcHxT/6JV1Rs0/FP1p/+KLLmMU/C940I17ixT9a0NA1aCzGPyXOrynndsY/o5AeOdjBxj/Hoh6KOA3HP/4puS4FWcc/QeNYJTulxz8ZTCtZ1/HHP/XqiKLWPsg/C6ZkxzWMyD+TE8J78dnIP+ipMmIGKMk/wLFZDHF2yT9C2Hb7LcXJP7I696A5FMo/zcAMX5Bjyj8pl0uJLrPKP2CWTWUQA8s/HmBbKzJTyz8K9xoHkKPLP7ySQxgm9Ms/Vm1Wc/BEzD/NRFwi65XMP4ZGpyUS58w/zxiZdGE4zT/Vsmz+1InNP8WwA6to280/bc+2Wxgtzj9DOCns337OP65EHjO70M4/ol1RA6Yizz8Dm08snHTPP/jEUnuZxs8/LqwO3kwM0D9Wl+tcTDXQP6o09R9JXtA/EiBwDUGH0D9OqZ4MMrDQPy2OLgYa2dA/tham5PYB0T8RZNCUxirRP8TDKAaHU9E/YNlEKzZ80T+pcT360aTRP1HTFW1YzdE/YmIhgsf10T+6bGc8HR7SP0z3BKRXRtI/UWWMxnRu0j8f1GK3cpbSP/AHG5BPvtI/vsfNcAnm0j/9h2+Ang3TP/9FI+0MNdM/qHeK7FJc0z8n9RG8boPTP2zEO6FeqtM/IbDl6SDR0z8hlozss/fTP3JbjAgWHtQ/CXZcpkVE1D+s/sg3QWrUP44/KDgHkNQ/XraMLJa11D+bgvOj7NrUPy07bzcJANU/ayhPiuok1T+J4UJKj0nVP8VOei/2bdU/VhPC/B2S1T8rZJx/BbbVP2hSVpCr2dU/XZIZEg/91T8/yfryLiDWP+FtBCwKQ9Y/+Uk+wZ9l1j8lq7HB7ofWPzJUakf2qdY/skB0d7XL1j/TTdaBK+3WPwHdiaFXDtc/hYVvHDkv1z+u60BDz0/XP6nUf3EZcNc/JI9iDReQ1z+byb2Hx6/XP5zv61sqz9c/EiiyDz/u1z/9DiMzBQ3YP2JFf2B8K9g/hfITPKRJ2D/NURd0fGfYP6Vog8AEhdg/+P/u4jyi2D+t/GSmJL/YP5YyOt+729g/C83hagL42D9QaMAv+BPZP3L2/RydL9k/JIpWKvFK2T+mIepX9GXZP1+LC66mgNk/WX0OPQib2T83+BQdGbXZP+IN3G3Zztk/TCOIVkno2T9AxHAFaQHaP4Mf7K84Gto/xUAakrgy2j9OHbDu6EraP4yHwg7KYto/5ByRQVx62j98QFHcn5HaP+I0+TmVqNo/r2ULuzy/2j+b8WHFltXaP4GE+sOj69o/OpDCJmQB2z9b8mNi2BbbPx0UEvAALNs/8JBXTd5A2z+Ib+T7cFXbP3T4XIG5ads/ZzQpZ7h92z/zG0U6bpHbP2+BEYvbpNs/Rr0l7QC42z8pJCL33srbP/BNg0J23ds/bTN2a8fv2z+vKK0Q0wHcP7G4NdOZE9w/1mZPVhwl3D8HWkM/WzbcP5n0PDVXR9w/6Fsj4RBY3D+y8XPtiGjcPwvBHQbAeNw/PeBd2LaI3D9GyJwSbpjcP5aiTGTmp9w/34zIfSC33D/P0jQQHcbcP84cYM3c1Nw/3pKlZ2Dj3D8i8s+RqPHcP26T/f61/9w/8WCFYokN3T+1uNxvIxvdP5A5ftqEKN0/0HfRVa413T/BlhOVoELdP/rDQEtcT90/H5H+KuJb3T/QKIfmMmjdPwVblS9PdN0/S31RtzeA3T/6Gj8u7YvdP4BxK0Rwl90/vrQcqMGi3T9SF0II4q3dP7mS5BHSuN0/92pYcZLD3T+Qae/RI87dP4TL692G2N0/4d1zPrzi3T+3RIabxOzdP9vn7pug9t0/WYE85VAA3j/6yLYb1gneP6k4VeIwE94/YGW22mEc3j806BelaSXeP0zTTuBILt4/ia7AKQA33j+Q91wdkD/ePychl1X5R94/uQ1hazxQ3j/xACb2WVjeP3gExotSYN4/z7uRwCZo3j90o0Yn12/eP3m3C1Fkd94/xX1uzc5+3j9mcGAqF4bePzXENPQ9jd4/ZIietUOU3j9jG6/3KJveP8Px1EHuod4/zqvaGZSo3j96duYDG6/eP6e0eYKDtd4/jO1wFs673j9A/QM/+8HeP32ExnkLyN4/w5SoQv/N3j8ClvcT19PePy1jX2aT2d4//5rrsDTf3j9yIglpu+TeP2XWhwIo6t4/B2qc73rv3j/Db+KgtPTeP1CKXoXV+d4/wMOACt7+3j+ACCeczgPfPxXEn6SnCN8/wJ2sjGkN3z8QU4W7FBLfP4Gu2papFt8/bJjZgigb3z+EQC7ikR/fP0deBxbmI98/soYZfiUo3z/MlaJ4UCzfP3MqbWJnMN8/CjPUlmo03z+2icZvWjjfP8GeykU3PN8/+i8CcAFA3z/QCy5EuUPfPwbfsRZfR98/4AuYOvNK3z/QiZUBdk7fP33MDbznUd8/VbEWuUhV3z+vcnxGmVjfP5WfxbDZW98/fhc3Qwpf3z8YCdhHK2LfP3PzdQc9Zd8/2aioyT9o3z+gUtbUM2vfP291N24Zbt8/TPXa2fBw3z/uGKpaunPfP+iLbDJ2dt8/EF/MoSR53z/ZBlroxXvfPy1XkERaft8/XXzY8+GA3z/78I0yXYPfPy9wAjzMhd8/X+SBSi+I3z/vUVaXhorfP+a9y1rSjN8/XBA0zBKP3z+T8uohSJHfP6qoWZFyk98/4eb6TpKV3z96ol6Op5ffPzbeLYKymd8/jXIuXLOb3z/E0UZNqp3fPwbIgYWXn98/wDcSNHuh3z9+0laHVaPfP6TO3awmpd8/Rppo0e6m3z+0i+8grqjfPwKQpcZkqt8/Rtj77BKs3z/0haW9uK3fPzJXm2FWr98/slMfAeyw3z8Ge8DDebLfPzV1XtD/s98/okYtTX613z9ECLlf9bbfP2Ol6SxluN8/GqAG2c253z8K3rqHL7vfP6Z+GFyKvN8/57yceN693z/53TP/K7/fPwMvPRFzwN8/8ROPz7PB3z+6KXta7sLfP15+0tEixN8/e+HpVFHF3z89UJ4CesbfP9B/Wfmcx98/wYkWV7rI3z/4vWY50snfPzKedr3kyt8/ZgcTAPLL3z+uja4d+szfP7YPZzL9zd8/PocLWvvO3z+IHCKw9M/fPxeD7k/p0N8/waZ4VNnR3z90sJPYxNLfP+lq5far098/ARDuyY7U3z9OiBBsbdXfPx8nm/dH1t8/LO7Qhh7X3z/+ZPMz8dffPxARTRnA2N8/85w8UYvZ3z+mvUD2UtrfP7vmBCMX298/YN9u8tfb3z+KS61/ldzfP3E+R+ZP3d8/KO0sQgfe3z/cmcmvu97fP5/SFkxt398/eyCxNBzg3z9MRu6HyODfPxgx9WRy4d8/ub7X6xni3z+Fgq49v+LfP/mytnxi498/725yzAPk3z/SjMtRo+TfP0IqOTNB5d8/VjfomN3l3z86PeeseObfP3KlVZsS598/f8yWkqvn3z/wMInDQ+jfP3AWwmHb6N8/m/vNo3Lp3z8zSXbDCerfP4epDP6g6t8/C4C8lDjr3z/cAuPM0OvfP1uCbvBp7N8/kHZFTgTt3z8h9rU6oO3fP/tH7g8+7t8/8k5/Lt7u3z8Rnun9gO/fP60UNu0m8N8/N/Oac9Dw3z/WbC4RfvHfP0jOp08w8t8/rmgww+fy3z9/hkULpfPfPzLKrNNo9N8/X3F81TP13z8PFDnYBvbfPw6XCrPi9t8/EykKTsj33z/dRaujuPjfP+/fQcK0+d8/Pfmnzb363z9+HQUB1fvfPzldurD7/N8/rJd1TDP+3z8XE29hff/fP0lLas5tAOA/Trcy5ycB4D+2fqH17QHgPwbZfAjBAuA/Tj5jRKID4D8xiY7lkgTgP9DIuUGUBeA/7ygsyqcG4D+pdOsNzwfgPwzVGLwLCeA/Koh6pl8K4D8jZjXEzAvgP/oeuTRVDeA/Ji3iQvsO4D+Mg1RowRDgP2YBElGqEuA/arBP37gU4D82wIwv8BbgPxsS7pxTGeA/a/fgxeYb4D+cfgeRrR7gP8pMcDKsIeA/NIUbMeck4D9Ioc1sYyjgP05UMCQmLOA/qp5A+zQw4D+SBggCljTgP55+nbtPOeA/g8xoJWk+4D+jOaG+6UPgPxnx/Y/ZSeA/BKCLM0FQ4D+XqZfcKVfgPyV8nV+dXuA/9UMeOqZm4D9bUEaaT2/gP9z1PWaleOA/q4X9QrSC4D8RE3WaiY3gPzgz0aAzmeA/17GdWMGl4D/SbH6VQrPgP5JDLf3HweA/7mpiBmPR4D9Mu0L1JeLgP7H85dQj9OA/zyt+bXAH4T+Hq6A2IBzhP6/jK0VIMuE/rqA/NP5J4T+Ubr0IWGPhP44QyQ5sfuE/Kh/JsFCb4T8823VHHLrhP2t+meLk2uE/J9xCCsD94T9r+VF4wiLiPykld8r/SeI/OIH4LIpz4j+x0Nf+cZ/iP7AkQnDFzeI/10OLHJD+4j+MKFWh2jHjPzBw5TSqZ+M/8M4KPgCg4z/5UE7w2drjP8NJee8vGOQ/UJ2y/fVX5D/8p5W3GprkP37Vo2GH3uQ/JENKyh8l5T+abWJDwm3lP7T4lbVHuOU/TfJiz4ME5j9llatQRVLmP0fzyXJWoeY/9qYXbH3x5j+wLskMfULnP7P18nEVlOc/xX+bygTm5z9+//EpCDjoP3t3KGHcieg/usQW2z7b6D9w1LZz7ivpP1hNu0Wse+k/Wqz1aDzK6T94Pe+cZhfqPyym9dv2Yuo/4GnZ072s6j8wFKtCkfTqPy6s0jZMOus/YCXeMs996z8fVUo2AL/rPwwjTa3K/es/ZidBSh867D+O9b/L83PsP0o+ubJCq+w/zKns6wrg7D/Wnh9wTxLtP+9GPd4WQu0/ishMEmtv7T/Bxda7WJrtP3Et9vXuwu0/wB3v4j7p7T/u1sVMWw3uP2dn80tYL+4/d6QA9UpP7j85E4QNSW3uP22pvchoie4/QCPUi8Cj7j/x4Iq5ZrzuP0A+JIVx0+4/qD4KzPbo7j96M8X1C/3uP6yQvNnFD+8/PF04qjgh7z9QfRjkdzHvP9iCuUKWQO8/p96Dt6VO7z/qc6lkt1vvP6gOnprbZ+8/UIrg1yFz7z8YIrTKmH3vPyobc1ROh+8/lnctjk+Q7z8geE/OqJjvP8FBFK9loO8/jeyQFZGn7z9DiSs5Na7vPyBFWKtbtO8/osF8Xw267z8g/t6yUr/vP1LbiXQzxO8/CVgV7bbI7z9CNUTm48zvP2XDa7LA0O8/wj2dM1PU7z/HWIrioNfvP9eNINWu2u8/fEfYxIHd7z/EY7YUHuDvP7eZ/9aH4u8/DzKe0sLk7z/yOTuI0ubvP5nmDDe66O8/uFBc4Xzq7z+AAsVQHezvP0QQMRqe7e8/kZ2UoQHv7z8GymsdSvDvPygO/pl58e8/CBJq/JHy7z/7AH0FlfPvP/tPWFSE9O8/ltnoaGH17z8kGzKmLfbvPz1FcFTq9u8/RLUTo5j37z9yUJiqOfjvP54aO27O+O8/VESQ3Vf57z+NzfvV1vnvPyy8DiRM+u8/CsjKhLj67z+7Qc6mHPvvP9LdaSt5++8/hPOhp8777z+GpBylHfzvP55L/qJm/O8/UXi1Fqr87z9wqLds6PzvP5bbLwki/e8/MAmgSFf97z9sb3aAiP3vP0Kgl/+1/e8/hCHeDuD97z8CZpDxBv7vP2bXzeUq/u8/g5vzJEz+7z83s/njav7vP7wFyVOH/u8/ZuCKoaH+7z/baPL2uf7vP6R2gHrQ/u8/MkDCT+X+7z98P4uX+P7vP/2qKnAK/+8/x9ic9Rr/7z8Y27hBKv/vP+ifWmw4/+8/TdeJi0X/7z+Q352zUf/vPwzxXvdc/+8/d78kaGf/7z9UwvIVcf/vP1RSkg96/+8/I8aqYoL/7z/Etdcbiv/vP7WIvUaR/+8/TnAc7pf/7z9R7eEbnv/vPxj9ONmj/+8/7AiZLqn/7z/Dr9Mjrv/vP+6AIcCy/+8/iLwtCrf/7z/SLCEIu//vPy4qrL++/+8/MtoPNsL/7z/PuCZwxf/vP5t5bHLI/+8/Hk4FQcv/7z8BncTfzf/vPx41M1LQ/+8/oQaVm9L/7z+Sa+6+1P/vP2YICb/W/+8/pEx4ntj/7z/0mp1f2v/vP2QfrATc/+8/PFqsj93/7z8NZX8C3//vP4n34V7g/+8/3jBvpuH/7z9SKqPa4v/vPzxX3fzj/+8/SLZiDuX/7z+i118Q5v/vP0K76gPn/+8/lIoE6uf/7z8WMJvD6P/vP8HPipHp/+8/eyKfVOr/7z/etpQN6//vP14ZGr3r/+8/tuXQY+z/7z9Vw04C7f/vP2ZOHpnt/+8//+6/KO7/7z/Mn6qx7v/vP3alTDTv/+8//DcMse//7z8UH0go8P/vP4ZCWJrw/+8/fi+OB/H/7z+kkzVw8f/vP8GulNTx/+8/uLvsNPL/7z9sUXqR8v/vP0O8dery/+8/zlATQPP/7z8WuIOS8//vPyI29OHz/+8/BOuOLvT/7z8KD3t49P/vPzgq3b/0/+8/m0fXBPX/7z+mJIlH9f/vP/xcEIj1/+8/2JKIxvX/7z9nlAsD9v/vP05+sT32/+8/iNuQdvb/7z/awr6t9v/vPw7yTuP2/+8/GOdTF/f/7z9U995J9//vPwVlAHv3/+8/KnPHqvf/7z/ed0LZ9//vP07tfgb4/+8/aIGJMvj/7z9bJG5d+P/vPwMWOIf4/+8/TvLxr/j/7z+4vKXX+P/vP+HqXP74/+8/Zm4gJPn/7z/yvfhI+f/vP6Td7Wz5/+8/3GYHkPn/7z9sj0yy+f/vP0EwxNP5/+8/kMt09Pn/7z+UkmQU+v/vP9BqmTP6/+8//vIYUvr/7z+ch+hv+v/vPx5HDY36/+8/3hWMqfr/7z+0oWnF+v/vP1xlquD6/+8/jKtS+/r/7z/fkWYV+//vP4YL6i77/+8/xOPgR/v/7z9EwE5g+//vPz0jN3j7/+8/eG2dj/v/7z8s4ISm+//vP7ie8Lz7/+8/RLDj0vv/7z9EAWHo+//vP9dka/37/+8/IZYFEvz/7z96OTIm/P/vP5jd8zn8/+8/mfxMTfz/7z8G/T9g/P/vP8Eyz3L8/+8/3t/8hPz/7z95NcuW/P/vP3ZUPKj8/+8/Nk5Sufz/7z9KJQ/K/P/vPwjOdNr8/+8/Ki+F6vz/7z9fIkL6/P/vP8V0rQn9/+8/cufIGP3/7z/jL5Yn/f/vP3L4Fjb9/+8/uOBMRP3/7z/6fTlS/f/vP3xb3l/9/+8/4vo8bf3/7z+F1FZ6/f/vP7pXLYf9/+8/K+vBk/3/7z8R7RWg/f/vP4SzKqz9/+8/tYwBuP3/7z8wv5vD/f/vPxSK+s79/+8/TCUf2v3/7z/IwQrl/f/vP6yJvu/9/+8/hKA7+v3/7z9xI4ME/v/vP1gplg7+/+8/DMN1GP7/7z94+yIi/v/vP8jXniv+/+8/iFfqNP7/7z/WdAY+/v/vP3wk9Eb+/+8/EFa0T/7/7z8f9EdY/v/vP0Pkr2D+/+8/RwftaP7/7z9EOQBx/v/vP7pR6nj+/+8/siOsgP7/7z/TfUaI/v/vP38quo/+/+8/7O8Hl/7/7z85kDCe/v/vP4zJNKX+/+8/JFYVrP7/7z9x7NKy/v/vPyg/brn+/+8/Wv3nv/7/7z+K0kDG/v/vP71mecz+/+8/jl6S0v7/7z9EW4zY/v/vP+L6Z97+/+8/ONgl5P7/7z/4isbp/v/vP8OnSu/+/+8/PMCy9P7/7z8WY//5/v/vPygcMf/+/+8/eHRIBP//7z9K8kUJ///vPzQZKg7//+8/JWr1Ev//7z95Y6gX///vPwKBQxz//+8/HDzHIP//7z8=\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1051\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1050\",\"type\":\"UnionRenderers\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1039\",\"type\":\"ColumnDataSource\"}},\"id\":\"1043\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1039\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1040\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1041\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"1043\",\"type\":\"CDSView\"}},\"id\":\"1042\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1052\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1045\",\"type\":\"Title\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1041\",\"type\":\"Scatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1054\",\"type\":\"BoxAnnotation\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1053\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1051\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAJMBcf5nvv/UjwLj+Mt9/6yPAFH7Mzj/hI8Bw/WW+/9YjwMx8/62/zCPAKPyYnX/CI8CEezKNP7gjwOD6y3z/rSPAPHplbL+jI8CY+f5bf5kjwPR4mEs/jyPAUPgxO/+EI8Csd8sqv3ojwAj3ZBp/cCPAZHb+CT9mI8DA9Zf5/lsjwBx1Mem+USPAePTK2H5HI8DUc2TIPj0jwDDz/bf+MiPAjHKXp74oI8Do8TCXfh4jwERxyoY+FCPAoPBjdv4JI8D8b/1lvv8iwFjvllV+9SLAtG4wRT7rIsAQ7sk0/uAiwGxtYyS+1iLAyOz8E37MIsAkbJYDPsIiwIDrL/P9tyLA3GrJ4r2tIsA46mLSfaMiwJRp/ME9mSLA8OiVsf2OIsBMaC+hvYQiwKjnyJB9eiLABGdigD1wIsBg5vtv/WUiwLxllV+9WyLAGOUuT31RIsB0ZMg+PUciwNDjYS79PCLALGP7Hb0yIsCI4pQNfSgiwORhLv08HiLAQOHH7PwTIsCcYGHcvAkiwPjf+st8/yHAVF+Uuzz1IcCw3i2r/OohwAxex5q84CHAaN1ginzWIcDEXPp5PMwhwCDck2n8wSHAfFstWby3IcDY2sZIfK0hwDRaYDg8oyHAkNn5J/yYIcDsWJMXvI4hwEjYLAd8hCHApFfG9jt6IcAA11/m+28hwFxW+dW7ZSHAuNWSxXtbIcAUVSy1O1EhwHDUxaT7RiHAzFNflLs8IcAo0/iDezIhwIRSknM7KCHA4NErY/sdIcA8UcVSuxMhwJjQXkJ7CSHA9E/4MTv/IMBQz5Eh+/QgwKxOKxG76iDACM7EAHvgIMBkTV7wOtYgwMDM99/6yyDAHEyRz7rBIMB4yyq/ercgwNRKxK46rSDAMMpdnvqiIMCMSfeNupggwOjIkH16jiDAREgqbTqEIMCgx8Nc+nkgwPxGXUy6byDAWMb2O3plIMC0RZArOlsgwBDFKRv6UCDAbETDCrpGIMDIw1z6eTwgwCRD9uk5MiDAgMKP2fknIMDcQSnJuR0gwDjBwrh5EyDAlEBcqDkJIMDff+sv8/0fwJd+Hg9z6R/AT31R7vLUH8AHfITNcsAfwL96t6zyqx/Ad3nqi3KXH8AveB1r8oIfwOd2UEpybh/An3WDKfJZH8BXdLYIckUfwA9z6efxMB/Ax3Ecx3EcH8B/cE+m8QcfwDdvgoVx8x7A7221ZPHeHsCnbOhDccoewF9rGyPxtR7AF2pOAnGhHsDPaIHh8IwewIdntMBweB7AP2bnn/BjHsD3ZBp/cE8ewK9jTV7wOh7AZ2KAPXAmHsAfYbMc8BEewNdf5vtv/R3Aj14Z2+/oHcBHXUy6b9QdwP9bf5nvvx3At1qyeG+rHcBvWeVX75YdwCdYGDdvgh3A31ZLFu9tHcCXVX71blkdwE9UsdTuRB3AB1Pks24wHcC/UReT7hsdwHdQSnJuBx3AL099Ue7yHMDnTbAwbt4cwJ9M4w/uyRzAV0sW7221HMAPSknO7aAcwMdIfK1tjBzAf0evjO13HMA3RuJrbWMcwO9EFUvtThzAp0NIKm06HMBfQnsJ7SUcwBdBruhsERzAzz/hx+z8G8CHPhSnbOgbwD89R4bs0xvA9zt6ZWy/G8CvOq1E7KobwGc54CNslhvAHzgTA+yBG8DXNkbia20bwI81ecHrWBvARzSsoGtEG8D/Mt9/6y8bwLYxEl9rGxvAbjBFPusGG8AmL3gda/IawN4tq/zq3RrAlize22rJGsBOKxG76rQawAYqRJpqoBrAvih3eeqLGsB2J6pYancawC4m3TfqYhrA5iQQF2pOGsCeI0P26TkawFYidtVpJRrADiGptOkQGsDGH9yTafwZwH4eD3Pp5xnANh1CUmnTGcDuG3Ux6b4ZwKYaqBBpqhnAXhnb7+iVGcAWGA7PaIEZwM4WQa7obBnAhhV0jWhYGcA+FKds6EMZwPYS2ktoLxnArhENK+gaGcBmEEAKaAYZwB4Pc+nn8RjA1g2myGfdGMCODNmn58gYwEYLDIdntBjA/gk/ZuefGMC2CHJFZ4sYwG4HpSTndhjAJgbYA2diGMDeBAvj5k0YwJYDPsJmORjATgJxoeYkGMAGAaSAZhAYwL7/1l/m+xfAdv4JP2bnF8Au/Twe5tIXwOb7b/1lvhfAnvqi3OWpF8BW+dW7ZZUXwA74CJvlgBfAxvY7emVsF8B+9W5Z5VcXwDb0oThlQxfA7vLUF+UuF8Cm8Qf3ZBoXwF7wOtbkBRfAFu9ttWTxFsDO7aCU5NwWwIbs03NkyBbAPusGU+SzFsD26TkyZJ8WwK7obBHkihbAZuef8GN2FsAe5tLP42EWwNbkBa9jTRbAjuM4juM4FsBG4mttYyQWwP7gnkzjDxbAtt/RK2P7FcBu3gQL4+YVwCbdN+pi0hXA3ttqyeK9FcCW2p2oYqkVwE7Z0IfilBXABtgDZ2KAFcC+1jZG4msVwHbVaSViVxXALtScBOJCFcDm0s/jYS4VwJ7RAsPhGRXAVtA1omEFFcAOz2iB4fAUwMbNm2Bh3BTAfszOP+HHFMA2ywEfYbMUwO7JNP7gnhTApshn3WCKFMBex5q84HUUwBbGzZtgYRTAzsQAe+BMFMCGwzNaYDgUwD7CZjngIxTA9sCZGGAPFMCuv8z33/oTwGa+/9Zf5hPAHr0ytt/RE8DWu2WVX70TwI66mHTfqBPARrnLU1+UE8D+t/4y338TwLa2MRJfaxPAbrVk8d5WE8AmtJfQXkITwN6yyq/eLRPAlrH9jl4ZE8BOsDBu3gQTwAavY01e8BLAvq2WLN7bEsB2rMkLXscSwC6r/OrdshLA5qkvyl2eEsCeqGKp3YkSwFanlYhddRLADqbIZ91gEsDGpPtGXUwSwH6jLibdNxLANqJhBV0jEsDuoJTk3A4SwKafx8Nc+hHAXp76otzlEcAWnS2CXNERwM6bYGHcvBHAhpqTQFyoEcA+mcYf3JMRwPaX+f5bfxHArpYs3ttqEcBmlV+9W1YRwB6UkpzbQRHA1pLFe1stEcCOkfha2xgRwEaQKzpbBBHA/o5eGdvvEMC2jZH4WtsQwG6MxNfaxhDAJov3tlqyEMDeiSqW2p0QwJaIXXVaiRDAToeQVNp0EMAGhsMzWmAQwL6E9hLaSxDAdoMp8lk3EMAuglzR2SIQwOaAj7BZDhDAPP+EH7PzD8Cs/OrdssoPwBz6UJyyoQ/AjPe2WrJ4D8D89BwZsk8PwGzygtexJg/A3O/olbH9DsBM7U5UsdQOwLzqtBKxqw7ALOga0bCCDsCc5YCPsFkOwAzj5k2wMA7AfOBMDLAHDsDs3bLKr94NwFzbGImvtQ3AzNh+R6+MDcA81uQFr2MNwKzTSsSuOg3AHNGwgq4RDcCMzhZBrugMwPzLfP+tvwzAasniva2WDMDaxkh8rW0MwErErjqtRAzAusEU+awbDMAqv3q3rPILwJq84HWsyQvACrpGNKygC8B6t6zyq3cLwOq0ErGrTgvAWrJ4b6slC8DKr94tq/wKwDqtROyq0wrAqqqqqqqqCsAaqBBpqoEKwIqldieqWArA+qLc5akvCsBqoEKkqQYKwNqdqGKp3QnASpsOIam0CcC6mHTfqIsJwCqW2p2oYgnAmpNAXKg5CcAKkaYaqBAJwHqODNmn5wjA6otyl6e+CMBaidhVp5UIwMqGPhSnbAjAOoSk0qZDCMCqgQqRphoIwBp/cE+m8QfAinzWDabIB8D6eTzMpZ8HwGp3ooqldgfA2nQISaVNB8BKcm4HpSQHwLpv1MWk+wbAKm06hKTSBsCaaqBCpKkGwApoBgGkgAbAemVsv6NXBsDqYtJ9oy4GwFpgODyjBQbAyl2e+qLcBcA6WwS5orMFwKpYaneiigXAGlbQNaJhBcCKUzb0oTgFwPpQnLKhDwXAak4CcaHmBMDaS2gvob0EwEpJzu2glATAukY0rKBrBMAqRJpqoEIEwJpBACmgGQTACj9m55/wA8B6PMyln8cDwOo5MmSfngPAWjeYIp91A8DKNP7gnkwDwDoyZJ+eIwPAqi/KXZ76AsAaLTAcntECwIoqltqdqALA+if8mJ1/AsBqJWJXnVYCwNoiyBWdLQLASiAu1JwEAsC6HZSSnNsBwCob+lCcsgHAmhhgD5yJAcAKFsbNm2ABwHoTLIybNwHA6hCSSpsOAcBaDvgIm+UAwMoLXseavADAOgnEhZqTAMCqBipEmmoAwBoEkAKaQQDAigH2wJkYAMDw/bf+Mt//v9D4g3syjf+/sPNP+DE7/7+Q7ht1Men+v3Dp5/Ewl/6/UOSzbjBF/r8w33/rL/P9vxDaS2gvof2/8NQX5S5P/b/Qz+NhLv38v7DKr94tq/y/kMV7Wy1Z/L9wwEfYLAf8v1C7E1Ustfu/MLbf0Stj+78QsatOKxH7v/Crd8sqv/q/0KZDSCpt+r+woQ/FKRv6v5Cc20Epyfm/cJenvih3+b9QknM7KCX5vzCNP7gn0/i/EIgLNSeB+L/wgtexJi/4v9B9oy4m3fe/sHhvqyWL97+QczsoJTn3v3BuB6Uk5/a/UGnTISSV9r8wZJ+eI0P2vxBfaxsj8fW/8Fk3mCKf9b/QVAMVIk31v7BPz5Eh+/S/kEqbDiGp9L9wRWeLIFf0v1BAMwggBfS/MDv/hB+z878QNssBH2Hzv/Awl34eD/O/0Ctj+x298r+wJi94HWvyv5Ah+/QcGfK/cBzHcRzH8b9QF5PuG3XxvzASX2sbI/G/EA0r6BrR8L/wB/dkGn/wv9ACw+EZLfC/YPsdvTK2778g8bW2MRLvv+DmTbAwbu6/oNzlqS/K7b9g0n2jLibtvyDIFZ0tguy/4L2tlize67+gs0WQKzrrv2Cp3Ykqluq/IJ91gyny6b/glA19KE7pv6CKpXYnqui/YIA9cCYG6L8gdtVpJWLnv+BrbWMkvua/oGEFXSMa5r9gV51WInblvyBNNVAh0uS/4ELNSSAu5L+gOGVDH4rjv2Au/Twe5uK/ICSVNh1C4r/gGS0wHJ7hv6APxSkb+uC/YAVdIxpW4L9A9uk5MmTfv8DhGS0wHN6/QM1JIC7U3L/AuHkTLIzbv0CkqQYqRNq/wI/Z+Sf82L9AewntJbTXv8BmOeAjbNa/QFJp0yEk1b/APZnGH9zTv0ApybkdlNK/wBT5rBtM0b9AACmgGQTQv4DXsSYveM2/gK4RDSvoyr+AhXHzJljIv4Bc0dkiyMW/gDMxwB44w7+ACpGmGqjAvwDD4RktMLy/AHGh5iQQt78AH2GzHPCxvwCaQQApoKm/AOyBMzHAnr8ASAHNIICEvwBIAc0ggIQ/AOyBMzHAnj8AmkEAKaCpPwAfYbMc8LE/AHGh5iQQtz8Aw+EZLTC8P4AKkaYaqMA/gDMxwB44wz+AXNHZIsjFP4CFcfMmWMg/gK4RDSvoyj+A17EmL3jNP0AAKaAZBNA/wBT5rBtM0T9AKcm5HZTSP8A9mcYf3NM/QFJp0yEk1T/AZjngI2zWP0B7Ce0ltNc/wI/Z+Sf82D9ApKkGKkTaP8C4eRMsjNs/QM1JIC7U3D/A4RktMBzeP0D26TkyZN8/YAVdIxpW4D+gD8UpG/rgP+AZLTAcnuE/ICSVNh1C4j9gLv08HubiP6A4ZUMfiuM/4ELNSSAu5D8gTTVQIdLkP2BXnVYiduU/oGEFXSMa5j/ga21jJL7mPyB21WklYuc/YIA9cCYG6D+giqV2J6roP+CUDX0oTuk/IJ91gyny6T9gqd2JKpbqP6CzRZArOus/4L2tlize6z8gyBWdLYLsP2DSfaMuJu0/oNzlqS/K7T/g5k2wMG7uPyDxtbYxEu8/YPsdvTK27z/QAsPhGS3wP/AH92Qaf/A/EA0r6BrR8D8wEl9rGyPxP1AXk+4bdfE/cBzHcRzH8T+QIfv0HBnyP7AmL3gda/I/0Ctj+x298j/wMJd+Hg/zPxA2ywEfYfM/MDv/hB+z8z9QQDMIIAX0P3BFZ4sgV/Q/kEqbDiGp9D+wT8+RIfv0P9BUAxUiTfU/8Fk3mCKf9T8QX2sbI/H1PzBkn54jQ/Y/UGnTISSV9j9wbgelJOf2P5BzOyglOfc/sHhvqyWL9z/QfaMuJt33P/CC17EmL/g/EIgLNSeB+D8wjT+4J9P4P1CSczsoJfk/cJenvih3+T+QnNtBKcn5P7ChD8UpG/o/0KZDSCpt+j/wq3fLKr/6PxCxq04rEfs/MLbf0Stj+z9QuxNVLLX7P3DAR9gsB/w/kMV7Wy1Z/D+wyq/eLav8P9DP42Eu/fw/8NQX5S5P/T8Q2ktoL6H9PzDff+sv8/0/UOSzbjBF/j9w6efxMJf+P5DuG3Ux6f4/sPNP+DE7/z/Q+IN7Mo3/P/D9t/4y3/8/iAH2wJkYAEAYBJACmkEAQKgGKkSaagBAOAnEhZqTAEDIC17HmrwAQFgO+Aib5QBA6BCSSpsOAUB4EyyMmzcBQAgWxs2bYAFAmBhgD5yJAUAoG/pQnLIBQLgdlJKc2wFASCAu1JwEAkDYIsgVnS0CQGglYledVgJA+Cf8mJ1/AkCIKpbanagCQBgtMBye0QJAqC/KXZ76AkA4MmSfniMDQMg0/uCeTANAWDeYIp91A0DoOTJkn54DQHg8zKWfxwNACD9m55/wA0CYQQApoBkEQChEmmqgQgRAuEY0rKBrBEBISc7toJQEQNhLaC+hvQRAaE4CcaHmBED4UJyyoQ8FQIhTNvShOAVAGFbQNaJhBUCoWGp3oooFQDhbBLmiswVAyF2e+qLcBUBYYDg8owUGQOhi0n2jLgZAeGVsv6NXBkAIaAYBpIAGQJxqoEKkqQZALG06hKTSBkC8b9TFpPsGQExybgelJAdA3HQISaVNB0Bsd6KKpXYHQPx5PMylnwdAjHzWDabIB0Acf3BPpvEHQKyBCpGmGghAPISk0qZDCEDMhj4Up2wIQFyJ2FWnlQhA7Ityl6e+CEB8jgzZp+cIQAyRphqoEAlAnJNAXKg5CUAsltqdqGIJQLyYdN+oiwlATJsOIam0CUDcnahiqd0JQGygQqSpBgpA/KLc5akvCkCMpXYnqlgKQByoEGmqgQpArKqqqqqqCkA8rUTsqtMKQMyv3i2r/ApAXLJ4b6slC0DstBKxq04LQHy3rPKrdwtADLpGNKygC0CcvOB1rMkLQCy/eres8gtAvMEU+awbDEBMxK46rUQMQNzGSHytbQxAbMniva2WDED8y3z/rb8MQIzOFkGu6AxAHNGwgq4RDUCs00rErjoNQDzW5AWvYw1AzNh+R6+MDUBc2xiJr7UNQOzdssqv3g1AfOBMDLAHDkAM4+ZNsDAOQJzlgI+wWQ5ALOga0bCCDkC86rQSsasOQEztTlSx1A5A3O/olbH9DkBs8oLXsSYPQPz0HBmyTw9AjPe2WrJ4D0Ac+lCcsqEPQKz86t2yyg9APP+EH7PzD0DmgI+wWQ4QQC6CXNHZIhBAdoMp8lk3EEC+hPYS2ksQQAaGwzNaYBBAToeQVNp0EECWiF11WokQQN6JKpbanRBAJov3tlqyEEBujMTX2sYQQLaNkfha2xBA/o5eGdvvEEBGkCs6WwQRQI6R+FrbGBFA1pLFe1stEUAelJKc20ERQGaVX71bVhFArpYs3ttqEUD2l/n+W38RQD6Zxh/ckxFAhpqTQFyoEUDOm2Bh3LwRQBadLYJc0RFAXp76otzlEUCmn8fDXPoRQO6glOTcDhJANqJhBV0jEkB+oy4m3TcSQMak+0ZdTBJADqbIZ91gEkBWp5WIXXUSQJ6oYqndiRJA5qkvyl2eEkAuq/zq3bISQHasyQtexxJAvq2WLN7bEkAGr2NNXvASQE6wMG7eBBNAlrH9jl4ZE0Dessqv3i0TQCa0l9BeQhNAbrVk8d5WE0C2tjESX2sTQP63/jLffxNARrnLU1+UE0COuph036gTQNa7ZZVfvRNAHr0ytt/RE0Bmvv/WX+YTQK6/zPff+hNA9sCZGGAPFEA+wmY54CMUQIbDM1pgOBRAzsQAe+BMFEAWxs2bYGEUQF7HmrzgdRRApshn3WCKFEDuyTT+4J4UQDbLAR9hsxRAfszOP+HHFEDGzZtgYdwUQA7PaIHh8BRAVtA1omEFFUCe0QLD4RkVQObSz+NhLhVALtScBOJCFUB21WklYlcVQL7WNkbiaxVABtgDZ2KAFUBO2dCH4pQVQJbanahiqRVA3ttqyeK9FUAm3TfqYtIVQG7eBAvj5hVAtt/RK2P7FUD+4J5M4w8WQEbia21jJBZAjuM4juM4FkDW5AWvY00WQB7m0s/jYRZAZuef8GN2FkCu6GwR5IoWQPbpOTJknxZAPusGU+SzFkCG7NNzZMgWQM7toJTk3BZAFu9ttWTxFkBe8DrW5AUXQKbxB/dkGhdA7vLUF+UuF0A29KE4ZUMXQH71blnlVxdAxvY7emVsF0AO+Aib5YAXQFb51btllRdAnvqi3OWpF0Dm+2/9Zb4XQC79PB7m0hdAdv4JP2bnF0C+/9Zf5vsXQAgBpIBmEBhAUAJxoeYkGECYAz7CZjkYQOAEC+PmTRhAKAbYA2diGEBwB6Uk53YYQLgIckVnixhAAAo/ZuefGEBICwyHZ7QYQJAM2afnyBhA2A2myGfdGEAgD3Pp5/EYQGgQQApoBhlAsBENK+gaGUD4EtpLaC8ZQEAUp2zoQxlAiBV0jWhYGUDQFkGu6GwZQBgYDs9ogRlAYBnb7+iVGUCoGqgQaaoZQPAbdTHpvhlAOB1CUmnTGUCAHg9z6ecZQMgf3JNp/BlAECGptOkQGkBYInbVaSUaQKAjQ/bpORpA6CQQF2pOGkAwJt036mIaQHgnqlhqdxpAwCh3eeqLGkAIKkSaaqAaQFArEbvqtBpAmCze22rJGkDgLav86t0aQCgveB1r8hpAcDBFPusGG0C4MRJfaxsbQAAz33/rLxtASDSsoGtEG0CQNXnB61gbQNg2RuJrbRtAIDgTA+yBG0BoOeAjbJYbQLA6rUTsqhtA+Dt6ZWy/G0BAPUeG7NMbQIg+FKds6BtA0D/hx+z8G0AYQa7obBEcQGBCewntJRxAqENIKm06HEDwRBVL7U4cQDhG4mttYxxAgEevjO13HEDISHytbYwcQBBKSc7toBxAWEsW7221HECgTOMP7skcQOhNsDBu3hxAME99Ue7yHEB4UEpybgcdQMBRF5PuGx1ACFPks24wHUBQVLHU7kQdQJhVfvVuWR1A4FZLFu9tHUAoWBg3b4IdQHBZ5Vfvlh1AuFqyeG+rHUAAXH+Z778dQEhdTLpv1B1AkF4Z2+/oHUDYX+b7b/0dQCBhsxzwER5AaGKAPXAmHkCwY01e8DoeQPhkGn9wTx5AQGbnn/BjHkCIZ7TAcHgeQNBogeHwjB5AGGpOAnGhHkBgaxsj8bUeQKhs6ENxyh5A8G21ZPHeHkA4b4KFcfMeQIBwT6bxBx9AyHEcx3EcH0AQc+nn8TAfQFh0tghyRR9AoHWDKfJZH0DodlBKcm4fQDB4HWvygh9AeHnqi3KXH0DAeres8qsfQAh8hM1ywB9AUH1R7vLUH0CYfh4Pc+kfQOB/6y/z/R9AlEBcqDkJIEA4wcK4eRMgQNxBKcm5HSBAgMKP2fknIEAkQ/bpOTIgQMjDXPp5PCBAbETDCrpGIEAQxSkb+lAgQLRFkCs6WyBAWMb2O3plIED8Rl1Mum8gQKDHw1z6eSBAREgqbTqEIEDoyJB9eo4gQIxJ9426mCBAMMpdnvqiIEDUSsSuOq0gQHjLKr96tyBAHEyRz7rBIEDAzPff+ssgQGRNXvA61iBACM7EAHvgIECsTisRu+ogQFDPkSH79CBA9E/4MTv/IECY0F5CewkhQDxRxVK7EyFA4NErY/sdIUCEUpJzOyghQCjT+IN7MiFAzFNflLs8IUBw1MWk+0YhQBRVLLU7USFAuNWSxXtbIUBcVvnVu2UhQADXX+b7byFApFfG9jt6IUBI2CwHfIQhQOxYkxe8jiFAkNn5J/yYIUA0WmA4PKMhQNjaxkh8rSFAfFstWby3IUAg3JNp/MEhQMRc+nk8zCFAaN1ginzWIUAMXseavOAhQLDeLav86iFAVF+Uuzz1IUD43/rLfP8hQJxgYdy8CSJAQOHH7PwTIkDkYS79PB4iQIjilA19KCJALGP7Hb0yIkDQ42Eu/TwiQHRkyD49RyJAGOUuT31RIkC8ZZVfvVsiQGDm+2/9ZSJABGdigD1wIkCo58iQfXoiQExoL6G9hCJA8OiVsf2OIkCUafzBPZkiQDjqYtJ9oyJA3GrJ4r2tIkCA6y/z/bciQCRslgM+wiJAyOz8E37MIkBsbWMkvtYiQBDuyTT+4CJAtG4wRT7rIkBY75ZVfvUiQPxv/WW+/yJAoPBjdv4JI0BEccqGPhQjQOjxMJd+HiNAjHKXp74oI0Aw8/23/jIjQNRzZMg+PSNAePTK2H5HI0AcdTHpvlEjQMD1l/n+WyNAZHb+CT9mI0AI92Qaf3AjQKx3yyq/eiNAUPgxO/+EI0D0eJhLP48jQJj5/lt/mSNAPHplbL+jI0Dg+st8/60jQIR7Mo0/uCNAKPyYnX/CI0DMfP+tv8wjQHD9Zb7/1iNAFH7Mzj/hI0C4/jLff+sjQFx/me+/9SNAAAAAAAAAJEA=\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,true,true,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,true,false,false,false,false,false,true,false,true,false,true,true,false,false,false,false,false,false,true,false,true,true,true,false,true,false,true,true,true,false,true,false,false,false,false,true,true,true,true,true,false,false,false,true,false,true,false,true,false,false,false,true,false,false,true,false,true,false,true,false,true,false,true,false,false,false,true,false,false,false,false,true,true,false,false,true,false,false,false,false,false,false,false,false,false,false,true,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,true,false,true,true,true,true,false,true,false,true,true,true,true,true,false,true,false,false,false,true,true,false,true,true,true,true,true,true,true,true,true,true,false,false,false,true,true,false,false,false,true,false,true,true,false,true,false,false,true,false,true,false,true,true,false,false,true,true,true,false,false,false,false,true,false,true,true,false,true,false,true,false,false,true,true,true,false,true,true,true,true,false,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,true,false,false,false,true,false,false,true,false,true,true,true,true,false,true,true,false,false,true,false,false,true,true,true,true,true,false,false,false,false,true,true,false,false,false,true,true,false,true,true,false,false,true,true,true,true,false,true,true,true,false,false,false,false,true,false,false,false,false,true,false,false,false,true,false,true,true,false,false,true,true,true,false,false,false,true,false,false,false,false,false,false,false,false,false,true,true,true,false,true,true,false,true,false,true,false,true,true,false,true,true,true,true,false,false,false,false,false,true,false,true,true,true,false,true,true,false,true,false,true,true,true,false,true,true,true,false,true,true,true,false,false,true,false,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,true,true,false,false,false,false,false,true,true,true,false,false,false,true,true,false,true,true,false,true,true,true,true,false,true,false,true,true,true,true,false,true,false,false,true,true,false,true,false,false,false,true,true,true,true,true,true,false,true,true,false,true,false,true,false,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,false,true,true,true,true,true,false,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]},\"selected\":{\"id\":\"1053\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1052\",\"type\":\"UnionRenderers\"}},\"id\":\"1039\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"formatter\":{\"id\":\"1049\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1011\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1054\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1040\",\"type\":\"Scatter\"},{\"attributes\":{\"data_source\":{\"id\":\"1034\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1035\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1036\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1038\",\"type\":\"CDSView\"}},\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1034\",\"type\":\"ColumnDataSource\"}},\"id\":\"1038\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1015\",\"type\":\"Grid\"}],\"root_ids\":[\"1002\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", 458 | " var render_items = [{\"docid\":\"2f6f682d-d199-43d8-9aec-8beedad21b37\",\"roots\":{\"1002\":\"7cc9228a-b9c2-40de-b9db-dd1c3afcfb7c\"}}];\n", 459 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", 460 | "\n", 461 | " }\n", 462 | " if (root.Bokeh !== undefined) {\n", 463 | " embed_document(root);\n", 464 | " } else {\n", 465 | " var attempts = 0;\n", 466 | " var timer = setInterval(function(root) {\n", 467 | " if (root.Bokeh !== undefined) {\n", 468 | " clearInterval(timer);\n", 469 | " embed_document(root);\n", 470 | " } else {\n", 471 | " attempts++;\n", 472 | " if (attempts > 100) {\n", 473 | " clearInterval(timer);\n", 474 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", 475 | " }\n", 476 | " }\n", 477 | " }, 10, root)\n", 478 | " }\n", 479 | "})(window);" 480 | ], 481 | "application/vnd.bokehjs_exec.v0+json": "" 482 | }, 483 | "metadata": { 484 | "application/vnd.bokehjs_exec.v0+json": { 485 | "id": "1002" 486 | } 487 | }, 488 | "output_type": "display_data" 489 | } 490 | ], 491 | "source": [ 492 | "p = figure(plot_width=600, plot_height=600)\n", 493 | "p.line(xs,thr(xs),color='green')\n", 494 | "p.scatter(xs,ys)\n", 495 | "show(p)" 496 | ] 497 | }, 498 | { 499 | "cell_type": "code", 500 | "execution_count": 8, 501 | "metadata": { 502 | "ExecuteTime": { 503 | "end_time": "2020-07-09T17:31:25.904606Z", 504 | "start_time": "2020-07-09T17:31:25.723297Z" 505 | } 506 | }, 507 | "outputs": [], 508 | "source": [ 509 | "from sklearn.isotonic import IsotonicRegression\n", 510 | "\n", 511 | "import VennABERS" 512 | ] 513 | }, 514 | { 515 | "cell_type": "code", 516 | "execution_count": 9, 517 | "metadata": { 518 | "ExecuteTime": { 519 | "end_time": "2020-07-09T17:31:25.909463Z", 520 | "start_time": "2020-07-09T17:31:25.905732Z" 521 | } 522 | }, 523 | "outputs": [], 524 | "source": [ 525 | "def VennABERS_by_def(ds,test):\n", 526 | " p0,p1 = [],[]\n", 527 | " for x in test:\n", 528 | " ds0 = ds+[(x,0)]\n", 529 | " iso0 = IsotonicRegression().fit(*zip(*ds0))\n", 530 | " p0.append(iso0.predict([x]))\n", 531 | " \n", 532 | " ds1 = ds+[(x,1)]\n", 533 | " iso1 = IsotonicRegression().fit(*zip(*ds1))\n", 534 | " p1.append(iso1.predict([x]))\n", 535 | " return np.array(p0).flatten(),np.array(p1).flatten()" 536 | ] 537 | }, 538 | { 539 | "cell_type": "code", 540 | "execution_count": 10, 541 | "metadata": { 542 | "ExecuteTime": { 543 | "end_time": "2020-07-09T17:31:25.915142Z", 544 | "start_time": "2020-07-09T17:31:25.910593Z" 545 | } 546 | }, 547 | "outputs": [], 548 | "source": [ 549 | "xs = np.random.uniform(low=-10,high=10,size=400)\n", 550 | "ys = classAssignment(xs)" 551 | ] 552 | }, 553 | { 554 | "cell_type": "code", 555 | "execution_count": 11, 556 | "metadata": { 557 | "ExecuteTime": { 558 | "end_time": "2020-07-09T17:31:25.920508Z", 559 | "start_time": "2020-07-09T17:31:25.916272Z" 560 | } 561 | }, 562 | "outputs": [], 563 | "source": [ 564 | "xtest = np.linspace(-11,11,1000)" 565 | ] 566 | }, 567 | { 568 | "cell_type": "code", 569 | "execution_count": 12, 570 | "metadata": { 571 | "ExecuteTime": { 572 | "end_time": "2020-07-09T17:31:26.743534Z", 573 | "start_time": "2020-07-09T17:31:25.921524Z" 574 | } 575 | }, 576 | "outputs": [], 577 | "source": [ 578 | "p0d,p1d = VennABERS_by_def(list(zip(xs,ys)),xtest)" 579 | ] 580 | }, 581 | { 582 | "cell_type": "code", 583 | "execution_count": 13, 584 | "metadata": { 585 | "ExecuteTime": { 586 | "end_time": "2020-07-09T17:31:26.789602Z", 587 | "start_time": "2020-07-09T17:31:26.744641Z" 588 | } 589 | }, 590 | "outputs": [], 591 | "source": [ 592 | "p0,p1 = VennABERS.ScoresToMultiProbs(list(zip(xs,ys)),xtest)" 593 | ] 594 | }, 595 | { 596 | "cell_type": "code", 597 | "execution_count": 14, 598 | "metadata": { 599 | "ExecuteTime": { 600 | "end_time": "2020-07-09T17:31:26.795813Z", 601 | "start_time": "2020-07-09T17:31:26.790942Z" 602 | } 603 | }, 604 | "outputs": [ 605 | { 606 | "name": "stdout", 607 | "output_type": "stream", 608 | "text": [ 609 | "p0: there are 0 discrepancies\n", 610 | "p1: there are 0 discrepancies\n" 611 | ] 612 | } 613 | ], 614 | "source": [ 615 | "discrepancies_p0 = np.argwhere(~np.isclose(p0.flatten(),p0d.flatten()))\n", 616 | "discrepancies_p1 = np.argwhere(~np.isclose(p1.flatten(),p1d.flatten()))\n", 617 | "\n", 618 | "print(\"p0: there are\", discrepancies_p0.shape[0], \"discrepancies\")\n", 619 | "print(\"p1: there are\", discrepancies_p1.shape[0], \"discrepancies\")" 620 | ] 621 | }, 622 | { 623 | "cell_type": "code", 624 | "execution_count": 15, 625 | "metadata": { 626 | "ExecuteTime": { 627 | "end_time": "2020-07-09T17:31:26.804697Z", 628 | "start_time": "2020-07-09T17:31:26.796951Z" 629 | } 630 | }, 631 | "outputs": [ 632 | { 633 | "data": { 634 | "text/plain": [ 635 | "False" 636 | ] 637 | }, 638 | "execution_count": 15, 639 | "metadata": {}, 640 | "output_type": "execute_result" 641 | } 642 | ], 643 | "source": [ 644 | "np.any(p0>p1)" 645 | ] 646 | }, 647 | { 648 | "cell_type": "markdown", 649 | "metadata": {}, 650 | "source": [ 651 | "### Success! No discrepancy between fast implementation and reference implementation\n", 652 | "\n", 653 | "Let's try with added duplicates (more than one point with the same score)" 654 | ] 655 | }, 656 | { 657 | "cell_type": "code", 658 | "execution_count": 16, 659 | "metadata": { 660 | "ExecuteTime": { 661 | "end_time": "2020-07-09T17:31:26.809528Z", 662 | "start_time": "2020-07-09T17:31:26.805726Z" 663 | } 664 | }, 665 | "outputs": [], 666 | "source": [ 667 | "# Let's duplicate 1 in 10\n", 668 | "\n", 669 | "x_dups = xs[::10]\n", 670 | "y_dups = ~ys[::10] # Let's switch labels, just for extra fun" 671 | ] 672 | }, 673 | { 674 | "cell_type": "code", 675 | "execution_count": 17, 676 | "metadata": { 677 | "ExecuteTime": { 678 | "end_time": "2020-07-09T17:31:26.815006Z", 679 | "start_time": "2020-07-09T17:31:26.810788Z" 680 | } 681 | }, 682 | "outputs": [], 683 | "source": [ 684 | "xs = np.r_[xs,x_dups]\n", 685 | "ys = np.r_[ys,y_dups]" 686 | ] 687 | }, 688 | { 689 | "cell_type": "code", 690 | "execution_count": 18, 691 | "metadata": { 692 | "ExecuteTime": { 693 | "end_time": "2020-07-09T17:31:26.820732Z", 694 | "start_time": "2020-07-09T17:31:26.816103Z" 695 | } 696 | }, 697 | "outputs": [ 698 | { 699 | "data": { 700 | "text/plain": [ 701 | "((440,), (440,))" 702 | ] 703 | }, 704 | "execution_count": 18, 705 | "metadata": {}, 706 | "output_type": "execute_result" 707 | } 708 | ], 709 | "source": [ 710 | "xs.shape, ys.shape" 711 | ] 712 | }, 713 | { 714 | "cell_type": "code", 715 | "execution_count": 19, 716 | "metadata": { 717 | "ExecuteTime": { 718 | "end_time": "2020-07-09T17:31:27.733555Z", 719 | "start_time": "2020-07-09T17:31:26.821549Z" 720 | } 721 | }, 722 | "outputs": [], 723 | "source": [ 724 | "p0d,p1d = VennABERS_by_def(list(zip(xs,ys)),xtest)\n", 725 | "p0f,p1f = VennABERS.ScoresToMultiProbs(list(zip(xs,ys)),xtest)" 726 | ] 727 | }, 728 | { 729 | "cell_type": "code", 730 | "execution_count": 20, 731 | "metadata": { 732 | "ExecuteTime": { 733 | "end_time": "2020-07-09T17:31:27.737966Z", 734 | "start_time": "2020-07-09T17:31:27.734670Z" 735 | } 736 | }, 737 | "outputs": [ 738 | { 739 | "data": { 740 | "text/plain": [ 741 | "False" 742 | ] 743 | }, 744 | "execution_count": 20, 745 | "metadata": {}, 746 | "output_type": "execute_result" 747 | } 748 | ], 749 | "source": [ 750 | "np.any(p0f>p1f)" 751 | ] 752 | }, 753 | { 754 | "cell_type": "code", 755 | "execution_count": 21, 756 | "metadata": { 757 | "ExecuteTime": { 758 | "end_time": "2020-07-09T17:31:27.747161Z", 759 | "start_time": "2020-07-09T17:31:27.739092Z" 760 | } 761 | }, 762 | "outputs": [ 763 | { 764 | "name": "stdout", 765 | "output_type": "stream", 766 | "text": [ 767 | "p0f: there are 0 discrepancies\n", 768 | "p1f: there are 0 discrepancies\n" 769 | ] 770 | } 771 | ], 772 | "source": [ 773 | "discrepancies_p0f = np.argwhere(~np.isclose(p0f,p0d))\n", 774 | "discrepancies_p1f = np.argwhere(~np.isclose(p1f,p1d))\n", 775 | "\n", 776 | "print(\"p0f: there are\", discrepancies_p0f.shape[0], \"discrepancies\")\n", 777 | "print(\"p1f: there are\", discrepancies_p1f.shape[0], \"discrepancies\")" 778 | ] 779 | }, 780 | { 781 | "cell_type": "markdown", 782 | "metadata": {}, 783 | "source": [ 784 | "### Success!! No discrepancy between reference implementation and fast implementation\n", 785 | "\n", 786 | "Just out of curiosity, let's plot the calibrator." 787 | ] 788 | }, 789 | { 790 | "cell_type": "code", 791 | "execution_count": 22, 792 | "metadata": { 793 | "ExecuteTime": { 794 | "end_time": "2020-07-09T17:31:27.783125Z", 795 | "start_time": "2020-07-09T17:31:27.748006Z" 796 | } 797 | }, 798 | "outputs": [ 799 | { 800 | "data": { 801 | "text/html": [ 802 | "\n", 803 | "\n", 804 | "\n", 805 | "\n", 806 | "\n", 807 | "\n", 808 | "
\n" 809 | ] 810 | }, 811 | "metadata": {}, 812 | "output_type": "display_data" 813 | }, 814 | { 815 | "data": { 816 | "application/javascript": [ 817 | "(function(root) {\n", 818 | " function embed_document(root) {\n", 819 | " \n", 820 | " var docs_json = {\"fd6c6937-be68-432f-a448-7b65cd81602e\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1130\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1134\",\"type\":\"Grid\"},{\"id\":\"1139\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1135\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"1156\",\"type\":\"GlyphRenderer\"},{\"id\":\"1161\",\"type\":\"GlyphRenderer\"},{\"id\":\"1166\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1180\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1146\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"1122\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1126\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1124\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1128\",\"type\":\"LinearScale\"}},\"id\":\"1121\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"formatter\":{\"id\":\"1184\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1131\",\"type\":\"BasicTicker\"}},\"id\":\"1130\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1189\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1136\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"1158\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1159\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1160\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"1162\",\"type\":\"CDSView\"}},\"id\":\"1161\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1131\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1186\",\"type\":\"Selection\"},{\"attributes\":{\"ticker\":{\"id\":\"1131\",\"type\":\"BasicTicker\"}},\"id\":\"1134\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[220]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[220]}},\"selected\":{\"id\":\"1190\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1189\",\"type\":\"UnionRenderers\"}},\"id\":\"1163\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1155\",\"type\":\"Scatter\"},{\"attributes\":{\"source\":{\"id\":\"1158\",\"type\":\"ColumnDataSource\"}},\"id\":\"1162\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1191\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1136\",\"type\":\"BasicTicker\"}},\"id\":\"1139\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1182\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1136\",\"type\":\"BasicTicker\"}},\"id\":\"1135\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1160\",\"type\":\"Scatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZyEK2P2QhC1nIQrY/ZCELWchCtj9kIQtZ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C73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/RC73QC73gP9ELvdALveA/0Qu90Au94D/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP/Mt3/It3+I/8y3f8i3f4j/zLd/yLd/iP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/aC+hvYT24j9oL6G9hPbiP2gvob2E9uI/AAAAAAAA5D8AAAAAAADkPwAAAAAAAOQ/AAAAAAAA5D8AAAAAAADkPwAAAAAAAOQ/AAAAAAAA5D8AAAAAAADkPwAAAAAAAOg/AAAAAAAA6D8AAAAAAADoPwAAAAAAAOg/AAAAAAAA6D/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP9u2bdu2bes/27Zt27Zt6z/btm3btm3rP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j++5Vu+5VvuP77lW77lW+4/vuVbvuVb7j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP57neZ7nee4/nud5nud57j+e53me53nuP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/a9+w9g1r7z9r37D2DWvvP2vfsPYNa+8/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8=\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1188\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1187\",\"type\":\"UnionRenderers\"}},\"id\":\"1158\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1153\",\"type\":\"ColumnDataSource\"}},\"id\":\"1157\",\"type\":\"CDSView\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1140\",\"type\":\"PanTool\"},{\"id\":\"1141\",\"type\":\"WheelZoomTool\"},{\"id\":\"1142\",\"type\":\"BoxZoomTool\"},{\"id\":\"1143\",\"type\":\"SaveTool\"},{\"id\":\"1144\",\"type\":\"ResetTool\"},{\"id\":\"1145\",\"type\":\"HelpTool\"}]},\"id\":\"1146\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1184\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1180\",\"type\":\"Title\"},{\"attributes\":{\"fill_color\":{\"value\":\"red\"},\"line_color\":{\"value\":\"red\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1159\",\"type\":\"Scatter\"},{\"attributes\":{\"line_color\":\"blue\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1164\",\"type\":\"Line\"},{\"attributes\":{\"fill_color\":{\"value\":\"green\"},\"line_color\":{\"value\":\"green\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1154\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1140\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1153\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1154\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1155\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"1157\",\"type\":\"CDSView\"}},\"id\":\"1156\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1163\",\"type\":\"ColumnDataSource\"}},\"id\":\"1167\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null},\"id\":\"1122\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1165\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1141\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAJsBMP4+HufQlwJd+Hg9z6SXA472tlizeJcAu/Twe5tIlwHo8zKWfxyXAxntbLVm8JcARu+q0ErElwF36eTzMpSXAqDkJxIWaJcD0eJhLP48lwEC4J9P4gyXAi/e2WrJ4JcDXNkbia20lwCJ21WklYiXAbrVk8d5WJcC69PN4mEslwAU0gwBSQCXAUXMSiAs1JcCcsqEPxSklwOjxMJd+HiXANDHAHjgTJcB/cE+m8QclwMuv3i2r/CTAFu9ttWTxJMBiLv08HuYkwK5tjMTX2iTA+awbTJHPJMBF7KrTSsQkwJArOlsEuSTA3GrJ4r2tJMAnqlhqd6IkwHPp5/EwlyTAvyh3eeqLJMAKaAYBpIAkwFanlYhddSTAoeYkEBdqJMDtJbSX0F4kwDllQx+KUyTAhKTSpkNIJMDQ42Eu/TwkwBsj8bW2MSTAZ2KAPXAmJMCzoQ/FKRskwP7gnkzjDyTASiAu1JwEJMCVX71bVvkjwOGeTOMP7iPALd7basniI8B4HWvygtcjwMRc+nk8zCPAD5yJAfbAI8Bb2xiJr7UjwKcaqBBpqiPA8lk3mCKfI8A+mcYf3JMjwInYVaeViCPA1RflLk99I8AgV3S2CHIjwGyWAz7CZiPAuNWSxXtbI8ADFSJNNVAjwE9UsdTuRCPAmpNAXKg5I8Dm0s/jYS4jwDISX2sbIyPAfVHu8tQXI8DJkH16jgwjwBTQDAJIASPAYA+ciQH2IsCsTisRu+oiwPeNuph03yLAQ81JIC7UIsCODNmn58giwNpLaC+hvSLAJov3tlqyIsBxyoY+FKciwL0JFsbNmyLACEmlTYeQIsBUiDTVQIUiwKDHw1z6eSLA6wZT5LNuIsA3RuJrbWMiwIKFcfMmWCLAzsQAe+BMIsAaBJACmkEiwGVDH4pTNiLAsYKuEQ0rIsD8wT2Zxh8iwEgBzSCAFCLAlEBcqDkJIsDff+sv8/0hwCu/eres8iHAdv4JP2bnIcDCPZnGH9whwA59KE7Z0CHAWby31ZLFIcCl+0ZdTLohwPA61uQFryHAPHplbL+jIcCIufTzeJghwNP4g3syjSHAHzgTA+yBIcBqd6KKpXYhwLa2MRJfayHAAvbAmRhgIcBNNVAh0lQhwJl036iLSSHA5LNuMEU+IcAw8/23/jIhwHwyjT+4JyHAx3Ecx3EcIcATsatOKxEhwF7wOtbkBSHAqi/KXZ76IMD2blnlV+8gwEGu6GwR5CDAje139MrYIMDYLAd8hM0gwCRslgM+wiDAcKsli/e2IMC76rQSsasgwAcqRJpqoCDAUmnTISSVIMCeqGKp3YkgwOrn8TCXfiDANSeBuFBzIMCBZhBACmggwMyln8fDXCDAGOUuT31RIMBkJL7WNkYgwK9jTV7wOiDA+6Lc5akvIMBG4mttYyQgwJIh+/QcGSDA3mCKfNYNIMApoBkEkAIgwOm+UReT7h/AgD1wJgbYH8AYvI41ecEfwK86rUTsqh/ARrnLU1+UH8DdN+pi0n0fwHS2CHJFZx/ADDUngbhQH8Cjs0WQKzofwDoyZJ+eIx/A0bCCrhENH8BoL6G9hPYewACuv8z33x7Alize22rJHsAuq/zq3bIewMUpG/pQnB7AXKg5CcSFHsD0JlgYN28ewIqldieqWB7AIiSVNh1CHsC5orNFkCsewFAh0lQDFR7A6J/wY3b+HcB+Hg9z6ecdwBadLYJc0R3ArRtMkc+6HcBEmmqgQqQdwNwYia+1jR3Acpenvih3HcAKFsbNm2AdwKGU5NwOSh3AOBMD7IEzHcDQkSH79BwdwGYQQApoBh3A/o5eGdvvHMCVDX0oTtkcwCyMmzfBwhzAxAq6RjSsHMBaidhVp5UcwPIH92QafxzAiYYVdI1oHMAgBTSDAFIcwLiDUpJzOxzATgJxoeYkHMDmgI+wWQ4cwH3/rb/M9xvAFH7Mzj/hG8Cr/OrdssobwEJ7Ce0ltBvA2vkn/JidG8BxeEYLDIcbwAj3ZBp/cBvAn3WDKfJZG8A29KE4ZUMbwM5ywEfYLBvAZfHeVksWG8D8b/1lvv8awJPuG3Ux6RrAKm06hKTSGsDC61iTF7wawFlqd6KKpRrA8OiVsf2OGsCHZ7TAcHgawB7m0s/jYRrAtWTx3lZLGsBN4w/uyTQawORhLv08HhrAe+BMDLAHGsASX2sbI/EZwKndiSqW2hnAQVyoOQnEGcDY2sZIfK0ZwG9Z5VfvlhnABtgDZ2KAGcCdViJ21WkZwDXVQIVIUxnAzFNflLs8GcBj0n2jLiYZwPpQnLKhDxnAkc+6wRT5GMApTtnQh+IYwMDM99/6yxjAV0sW7221GMDuyTT+4J4YwIVIUw1UiBjAHMdxHMdxGMC0RZArOlsYwEvErjqtRBjA4kLNSSAuGMB5wetYkxcYwBBACmgGARjAqL4od3nqF8A/PUeG7NMXwNa7ZZVfvRfAbTqEpNKmF8AEuaKzRZAXwJw3wcK4eRfAM7bf0StjF8DKNP7gnkwXwGGzHPARNhfA+DE7/4QfF8CQsFkO+AgXwCcveB1r8hbAvq2WLN7bFsBVLLU7UcUWwOyq00rErhbAhCnyWTeYFsAbqBBpqoEWwLImL3gdaxbASaVNh5BUFsDgI2yWAz4WwHeiiqV2JxbADyGptOkQFsCmn8fDXPoVwD0e5tLP4xXA1JwE4kLNFcBrGyPxtbYVwAOaQQApoBXAmhhgD5yJFcAxl34eD3MVwMgVnS2CXBXAX5S7PPVFFcD3EtpLaC8VwI6R+FrbGBXAJRAXak4CFcC8jjV5wesUwFMNVIg01RTA64tyl6e+FMCCCpGmGqgUwBmJr7WNkRTAsAfOxAB7FMBHhuzTc2QUwN4EC+PmTRTAdoMp8lk3FMANAkgBzSAUwKSAZhBAChTAO/+EH7PzE8DSfaMuJt0TwGr8wT2ZxhPAAXvgTAywE8CY+f5bf5kTwC94HWvyghPAxvY7emVsE8BedVqJ2FUTwPXzeJhLPxPAjHKXp74oE8Aj8bW2MRITwLpv1MWk+xLAUu7y1BflEsDpbBHkis4SwIDrL/P9txLAF2pOAnGhEsCu6GwR5IoSwEZniyBXdBLA3eWpL8pdEsB0ZMg+PUcSwAvj5k2wMBLAomEFXSMaEsA54CNslgMSwNFeQnsJ7RHAaN1ginzWEcD/W3+Z778RwJbanahiqRHALVm8t9WSEcDF19rGSHwRwFxW+dW7ZRHA89QX5S5PEcCKUzb0oTgRwCHSVAMVIhHAuVBzEogLEcBQz5Eh+/QQwOdNsDBu3hDAfszOP+HHEMAVS+1OVLEQwK3JC17HmhDAREgqbTqEEMDbxkh8rW0QwHJFZ4sgVxDACcSFmpNAEMCgQqSpBioQwDjBwrh5ExDAnn/Cj9n5D8DMfP+tv8wPwPp5PMylnw/AKHd56otyD8BYdLYIckUPwIZx8yZYGA/AtG4wRT7rDsDia21jJL4OwBBpqoEKkQ7AQGbnn/BjDsBuYyS+1jYOwJxgYdy8CQ7Ayl2e+qLcDcD4WtsYia8NwChYGDdvgg3AVlVVVVVVDcCEUpJzOygNwLJPz5Eh+wzA4EwMsAfODMAQSknO7aAMwD5HhuzTcwzAbETDCrpGDMCaQQApoBkMwMg+PUeG7AvA9jt6ZWy/C8AmObeDUpILwFQ29KE4ZQvAgjMxwB44C8CwMG7eBAsLwN4tq/zq3QrADivoGtGwCsA8KCU5t4MKwGolYledVgrAmCKfdYMpCsDGH9yTafwJwPYcGbJPzwnAJBpW0DWiCcBSF5PuG3UJwIAU0AwCSAnArhENK+gaCcDeDkpJzu0IwAwMh2e0wAjAOgnEhZqTCMBoBgGkgGYIwJYDPsJmOQjAxAB74EwMCMD0/bf+Mt8HwCD79BwZsgfAUPgxO/+EB8CA9W5Z5VcHwKzyq3fLKgfA3O/olbH9BsAI7SW0l9AGwDjqYtJ9owbAaOef8GN2BsCU5NwOSkkGwMThGS0wHAbA8N5WSxbvBcAg3JNp/MEFwFDZ0IfilAXAfNYNpshnBcCs00rErjoFwNjQh+KUDQXACM7EAHvgBMA4ywEfYbMEwGTIPj1HhgTAlMV7Wy1ZBMDAwrh5EywEwPC/9Zf5/gPAIL0ytt/RA8BMum/UxaQDwHy3rPKrdwPAqLTpEJJKA8DYsSYveB0DwAivY01e8ALANKyga0TDAsBkqd2JKpYCwJCmGqgQaQLAwKNXxvY7AsDsoJTk3A4CwBye0QLD4QHATJsOIam0AcB4mEs/j4cBwKiViF11WgHA1JLFe1stAcAEkAKaQQABwDSNP7gn0wDAYIp81g2mAMCQh7n083gAwLyE9hLaSwDA7IEzMcAeAMA4/uCeTOP/v5D4WtsYif+/8PLUF+Uu/79I7U5UsdT+v6jnyJB9ev6/COJCzUkg/r9g3LwJFsb9v8DWNkbia/2/GNGwgq4R/b94yyq/erf8v9jFpPtGXfy/MMAeOBMD/L+Quph036j7v+i0ErGrTvu/SK+M7Xf0+r+oqQYqRJr6vwCkgGYQQPq/YJ76otzl+b+4mHTfqIv5vxiT7ht1Mfm/eI1oWEHX+L/Qh+KUDX34vzCCXNHZIvi/iHzWDabI97/odlBKcm73v0hxyoY+FPe/oGtEwwq69r8AZr7/1l/2v1hgODyjBfa/uFqyeG+r9b8YVSy1O1H1v3BPpvEH9/S/0EkgLtSc9L8oRJpqoEL0v4g+FKds6PO/4DiO4ziO879AMwggBTTzv6AtglzR2fK/+Cf8mJ1/8r9YInbVaSXyv7Ac8BE2y/G/EBdqTgJx8b9wEeSKzhbxv8gLXseavPC/KAbYA2di8L+AAFJAMwjwv8D1l/n+W++/gOqLcpen7r8w33/rL/Ptv/DTc2TIPu2/oMhn3WCK7L9gvVtW+dXrvyCyT8+RIeu/0KZDSCpt6r+QmzfBwrjpv0CQKzpbBOm/AIUfs/NP6L/AeRMsjJvnv3BuB6Uk5+a/MGP7Hb0y5r/gV++WVX7lv6BM4w/uyeS/YEHXiIYV5L8QNssBH2Hjv9Aqv3q3rOK/gB+z80/44b9AFKds6EPhvwAJm+WAj+C/YPsdvTK237/g5AWvY03ev0DO7aCU5Ny/wLfVksV7279Aob2E9hLav6CKpXYnqti/IHSNaFhB17+AXXVaidjVvwBHXUy6b9S/gDBFPusG07/gGS0wHJ7Rv2ADFSJNNdC/gNn5J/yYzb+ArMkLXsfKv0B/me+/9ce/QFJp0yEkxb9AJTm3g1LCvwDwETbLAb+/AJax/Y5eub+AO1HFUruzvwDD4RktMKy/AA8hqbTpoL8AaIHh8IyGvwBogeHwjIY/AA8hqbTpoD8Aw+EZLTCsP4A7UcVSu7M/AJax/Y5euT8A8BE2ywG/P0AlObeDUsI/QFJp0yEkxT9Af5nvv/XHP4CsyQtex8o/gNn5J/yYzT9gAxUiTTXQP+AZLTAcntE/YDBFPusG0z8AR11Mum/UP4BddVqJ2NU/IHSNaFhB1z+giqV2J6rYPyChvYT2Eto/wLfVksV72z9Azu2glOTcP+DkBa9jTd4/YPsdvTK23z/wCJvlgI/gP0AUp2zoQ+E/gB+z80/44T/QKr96t6ziPxA2ywEfYeM/UEHXiIYV5D+gTOMP7snkP+BX75ZVfuU/MGP7Hb0y5j9wbgelJOfmP7B5EyyMm+c/AIUfs/NP6D9AkCs6WwTpP5CbN8HCuOk/0KZDSCpt6j8gsk/PkSHrP2C9W1b51es/oMhn3WCK7D/w03NkyD7tPzDff+sv8+0/gOqLcpen7j/A9Zf5/lvvP4AAUkAzCPA/KAbYA2di8D/IC17HmrzwP3AR5IrOFvE/EBdqTgJx8T+wHPARNsvxP1gidtVpJfI/+Cf8mJ1/8j+gLYJc0dnyP0AzCCAFNPM/4DiO4ziO8z+IPhSnbOjzPyhEmmqgQvQ/0EkgLtSc9D9wT6bxB/f0PxBVLLU7UfU/uFqyeG+r9T9YYDg8owX2PwBmvv/WX/Y/oGtEwwq69j9AccqGPhT3P+h2UEpybvc/iHzWDabI9z8wglzR2SL4P9CH4pQNffg/cI1oWEHX+D8Yk+4bdTH5P7iYdN+oi/k/YJ76otzl+T8ApIBmEED6P6CpBipEmvo/SK+M7Xf0+j/otBKxq077P5C6mHTfqPs/MMAeOBMD/D/QxaT7Rl38P3jLKr96t/w/GNGwgq4R/T/A1jZG4mv9P2DcvAkWxv0/COJCzUkg/j+o58iQfXr+P0jtTlSx1P4/8PLUF+Uu/z+Q+FrbGIn/Pzj+4J5M4/8/7IEzMcAeAEC8hPYS2ksAQJCHufTzeABAYIp81g2mAEA0jT+4J9MAQASQAppBAAFA1JLFe1stAUColYhddVoBQHiYSz+PhwFATJsOIam0AUAcntECw+EBQOyglOTcDgJAwKNXxvY7AkCQphqoEGkCQGSp3YkqlgJANKyga0TDAkAEr2NNXvACQNixJi94HQNAqLTpEJJKA0B8t6zyq3cDQEy6b9TFpANAHL0ytt/RA0Dwv/WX+f4DQMDCuHkTLARAlMV7Wy1ZBEBkyD49R4YEQDTLAR9hswRACM7EAHvgBEDY0IfilA0FQKzTSsSuOgVAfNYNpshnBUBM2dCH4pQFQCDck2n8wQVA8N5WSxbvBUDE4RktMBwGQJTk3A5KSQZAZOef8GN2BkA46mLSfaMGQAjtJbSX0AZA3O/olbH9BkCs8qt3yyoHQID1blnlVwdAUPgxO/+EB0Ag+/QcGbIHQPT9t/4y3wdAxAB74EwMCECYAz7CZjkIQGgGAaSAZghAOAnEhZqTCEAMDIdntMAIQNwOSknO7QhAsBENK+gaCUCAFNAMAkgJQFAXk+4bdQlAJBpW0DWiCUD0HBmyT88JQMgf3JNp/AlAmCKfdYMpCkBoJWJXnVYKQDwoJTm3gwpADCvoGtGwCkDgLav86t0KQLAwbt4ECwtAgDMxwB44C0BUNvShOGULQCQ5t4NSkgtA+Dt6ZWy/C0DIPj1HhuwLQJhBACmgGQxAbETDCrpGDEA8R4bs03MMQBBKSc7toAxA4EwMsAfODECwT8+RIfsMQIRSknM7KA1AVFVVVVVVDUAoWBg3b4INQPha2xiJrw1AyF2e+qLcDUCcYGHcvAkOQGxjJL7WNg5AQGbnn/BjDkAQaaqBCpEOQOBrbWMkvg5AtG4wRT7rDkCEcfMmWBgPQFh0tghyRQ9AKHd56otyD0D8eTzMpZ8PQMx8/62/zA9AnH/Cj9n5D0A4wcK4eRMQQKBCpKkGKhBACsSFmpNAEEByRWeLIFcQQNrGSHytbRBAREgqbTqEEECsyQtex5oQQBZL7U5UsRBAfszOP+HHEEDmTbAwbt4QQFDPkSH79BBAuFBzEogLEUAi0lQDFSIRQIpTNvShOBFA8tQX5S5PEUBcVvnVu2URQMTX2sZIfBFALlm8t9WSEUCW2p2oYqkRQP5bf5nvvxFAaN1ginzWEUDQXkJ7Ce0RQDrgI2yWAxJAomEFXSMaEkAK4+ZNsDASQHRkyD49RxJA3OWpL8pdEkBGZ4sgV3QSQK7obBHkihJAFmpOAnGhEkCA6y/z/bcSQOhsEeSKzhJAUu7y1BflEkC6b9TFpPsSQCLxtbYxEhNAjHKXp74oE0D083iYSz8TQF51WonYVRNAxvY7emVsE0AueB1r8oITQJj5/lt/mRNAAHvgTAywE0Bq/ME9mcYTQNJ9oy4m3RNAPP+EH7PzE0CkgGYQQAoUQAwCSAHNIBRAdIMp8lk3FEDgBAvj5k0UQEiG7NNzZBRAsAfOxAB7FEAYia+1jZEUQIAKkaYaqBRA7Ityl6e+FEBUDVSINNUUQLyONXnB6xRAJBAXak4CFUCMkfha2xgVQPgS2ktoLxVAYJS7PPVFFUDIFZ0tglwVQDCXfh4PcxVAmBhgD5yJFUAEmkEAKaAVQGwbI/G1thVA1JwE4kLNFUA8HubSz+MVQKSfx8Nc+hVAECGptOkQFkB4ooqldicWQOAjbJYDPhZASKVNh5BUFkCwJi94HWsWQByoEGmqgRZAhCnyWTeYFkDsqtNKxK4WQFQstTtRxRZAvK2WLN7bFkAoL3gda/IWQJCwWQ74CBdA+DE7/4QfF0BgsxzwETYXQMg0/uCeTBdANLbf0StjF0CcN8HCuHkXQAS5orNFkBdAbDqEpNKmF0DUu2WVX70XQEA9R4bs0xdAqL4od3nqF0AQQApoBgEYQHjB61iTFxhA4ELNSSAuGEBMxK46rUQYQLRFkCs6WxhAHMdxHMdxGECESFMNVIgYQOzJNP7gnhhAWEsW7221GEDAzPff+ssYQChO2dCH4hhAkM+6wRT5GED4UJyyoQ8ZQGTSfaMuJhlAzFNflLs8GUA01UCFSFMZQJxWInbVaRlABNgDZ2KAGUBwWeVX75YZQNjaxkh8rRlAQFyoOQnEGUCo3YkqltoZQBRfaxsj8RlAfOBMDLAHGkDkYS79PB4aQEzjD+7JNBpAtGTx3lZLGkAg5tLP42EaQIhntMBweBpA8OiVsf2OGkBYaneiiqUaQMDrWJMXvBpALG06hKTSGkCU7ht1MekaQPxv/WW+/xpAZPHeVksWG0DMcsBH2CwbQDj0oThlQxtAoHWDKfJZG0AI92Qaf3AbQHB4RgsMhxtA2Pkn/JidG0BEewntJbQbQKz86t2yyhtAFH7Mzj/hG0B8/62/zPcbQOSAj7BZDhxAUAJxoeYkHEC4g1KSczscQCAFNIMAUhxAiIYVdI1oHEDwB/dkGn8cQFyJ2FWnlRxAxAq6RjSsHEAsjJs3wcIcQJQNfShO2RxA/I5eGdvvHEBoEEAKaAYdQNCRIfv0HB1AOBMD7IEzHUCglOTcDkodQAgWxs2bYB1AdJenvih3HUDcGImvtY0dQESaaqBCpB1ArBtMkc+6HUAUnS2CXNEdQIAeD3Pp5x1A6J/wY3b+HUBQIdJUAxUeQLiis0WQKx5AICSVNh1CHkCMpXYnqlgeQPQmWBg3bx5AXKg5CcSFHkDEKRv6UJweQCyr/Ordsh5AmCze22rJHkAArr/M998eQGgvob2E9h5A0LCCrhENH0A4MmSfniMfQKSzRZArOh9ADDUngbhQH0B0tghyRWcfQNw36mLSfR9ARLnLU1+UH0CwOq1E7KofQBi8jjV5wR9AgD1wJgbYH0DovlEXk+4fQCigGQSQAiBA3mCKfNYNIECSIfv0HBkgQEbia21jJCBA+qLc5akvIECuY01e8DogQGQkvtY2RiBAGOUuT31RIEDMpZ/Hw1wgQIBmEEAKaCBANCeBuFBzIEDq5/Ewl34gQJ6oYqndiSBAUmnTISSVIEAGKkSaaqAgQLrqtBKxqyBAcKsli/e2IEAkbJYDPsIgQNgsB3yEzSBAjO139MrYIEBAruhsEeQgQPZuWeVX7yBAqi/KXZ76IEBe8DrW5AUhQBKxq04rESFAyHEcx3EcIUB8Mo0/uCchQDDz/bf+MiFA5LNuMEU+IUCYdN+oi0khQE41UCHSVCFAAvbAmRhgIUC2tjESX2shQGp3ooqldiFAHjgTA+yBIUDU+IN7Mo0hQIi59PN4mCFAPHplbL+jIUDwOtbkBa8hQKT7Rl1MuiFAWry31ZLFIUAOfShO2dAhQMI9mcYf3CFAdv4JP2bnIUAqv3q3rPIhQOB/6y/z/SFAlEBcqDkJIkBIAc0ggBQiQPzBPZnGHyJAsIKuEQ0rIkBmQx+KUzYiQBoEkAKaQSJAzsQAe+BMIkCChXHzJlgiQDZG4mttYyJA7AZT5LNuIkCgx8Nc+nkiQFSINNVAhSJACEmlTYeQIkC8CRbGzZsiQHLKhj4UpyJAJov3tlqyIkDaS2gvob0iQI4M2afnyCJAQs1JIC7UIkD4jbqYdN8iQKxOKxG76iJAYA+ciQH2IkAU0AwCSAEjQMiQfXqODCNAflHu8tQXI0AyEl9rGyMjQObSz+NhLiNAmpNAXKg5I0BOVLHU7kQjQAQVIk01UCNAuNWSxXtbI0BslgM+wmYjQCBXdLYIciNA1BflLk99I0CK2FWnlYgjQD6Zxh/ckyNA8lk3mCKfI0CmGqgQaaojQFrbGImvtSNAEJyJAfbAI0DEXPp5PMwjQHgda/KC1yNALN7basniI0DgnkzjD+4jQJZfvVtW+SNASiAu1JwEJED+4J5M4w8kQLKhD8UpGyRAZmKAPXAmJEAcI/G1tjEkQNDjYS79PCRAhKTSpkNIJEA4ZUMfilMkQOwltJfQXiRAouYkEBdqJEBWp5WIXXUkQApoBgGkgCRAvih3eeqLJEBy6efxMJckQCiqWGp3oiRA3GrJ4r2tJECQKzpbBLkkQETsqtNKxCRA+KwbTJHPJECubYzE19okQGIu/Twe5iRAFu9ttWTxJEDKr94tq/wkQH5wT6bxByVANDHAHjgTJUDo8TCXfh4lQJyyoQ/FKSVAUHMSiAs1JUAGNIMAUkAlQLr083iYSyVAbrVk8d5WJUAidtVpJWIlQNY2RuJrbSVAjPe2WrJ4JUBAuCfT+IMlQPR4mEs/jyVAqDkJxIWaJUBc+nk8zKUlQBK76rQSsSVAxntbLVm8JUB6PMyln8clQC79PB7m0iVA4r2tlizeJUCYfh4Pc+klQEw/j4e59CVAAAAAAAAAJkA=\",\"dtype\":\"float64\",\"shape\":[1000]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK/IyyPynxM0r8jLI/KfEzSvyMsj8p8TNK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B37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP+AHfuAHfuA/4Ad+4Ad+4D/gB37gB37gP6AJfyb8meA/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/sRM7sRM74T+xEzuxEzvhP7ETO7ETO+E/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/AAAAAAAA4j8AAAAAAADiPwAAAAAAAOI/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\",\"dtype\":\"float64\",\"shape\":[1000]}},\"selected\":{\"id\":\"1186\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1185\",\"type\":\"UnionRenderers\"}},\"id\":\"1153\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1191\",\"type\":\"BoxAnnotation\"}},\"id\":\"1142\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1187\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"data_source\":{\"id\":\"1163\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1164\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1165\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1167\",\"type\":\"CDSView\"}},\"id\":\"1166\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1188\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null},\"id\":\"1124\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1143\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1126\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1144\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1190\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1182\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1145\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1128\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1185\",\"type\":\"UnionRenderers\"}],\"root_ids\":[\"1121\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", 821 | " var render_items = [{\"docid\":\"fd6c6937-be68-432f-a448-7b65cd81602e\",\"roots\":{\"1121\":\"ce9ad22a-bcf9-4533-ae72-1846e1f9a57c\"}}];\n", 822 | " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", 823 | "\n", 824 | " }\n", 825 | " if (root.Bokeh !== undefined) {\n", 826 | " embed_document(root);\n", 827 | " } else {\n", 828 | " var attempts = 0;\n", 829 | " var timer = setInterval(function(root) {\n", 830 | " if (root.Bokeh !== undefined) {\n", 831 | " clearInterval(timer);\n", 832 | " embed_document(root);\n", 833 | " } else {\n", 834 | " attempts++;\n", 835 | " if (attempts > 100) {\n", 836 | " clearInterval(timer);\n", 837 | " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", 838 | " }\n", 839 | " }\n", 840 | " }, 10, root)\n", 841 | " }\n", 842 | "})(window);" 843 | ], 844 | "application/vnd.bokehjs_exec.v0+json": "" 845 | }, 846 | "metadata": { 847 | "application/vnd.bokehjs_exec.v0+json": { 848 | "id": "1121" 849 | } 850 | }, 851 | "output_type": "display_data" 852 | } 853 | ], 854 | "source": [ 855 | "xs = np.linspace(-11,11,220)\n", 856 | "\n", 857 | "p = figure(plot_width=600, plot_height=600)\n", 858 | "p.scatter(xtest,p0d,color='green')\n", 859 | "p.scatter(xtest,p1d,color='red')\n", 860 | "p.line(xs,thr(xs),color='blue')\n", 861 | "show(p)" 862 | ] 863 | }, 864 | { 865 | "cell_type": "markdown", 866 | "metadata": {}, 867 | "source": [ 868 | "### If this does not look too good, consider that I introduced 10% of \"adversarial\" data, namely duplicates of points with their label flipped." 869 | ] 870 | } 871 | ], 872 | "metadata": { 873 | "kernelspec": { 874 | "display_name": "main", 875 | "language": "python", 876 | "name": "main" 877 | }, 878 | "language_info": { 879 | "codemirror_mode": { 880 | "name": "ipython", 881 | "version": 3 882 | }, 883 | "file_extension": ".py", 884 | "mimetype": "text/x-python", 885 | "name": "python", 886 | "nbconvert_exporter": "python", 887 | "pygments_lexer": "ipython3", 888 | "version": "3.7.6" 889 | } 890 | }, 891 | "nbformat": 4, 892 | "nbformat_minor": 4 893 | } 894 | --------------------------------------------------------------------------------