{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Profiling workflow performance with the Amazon Genomics CLI" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Profiling is an essential part of developing genomics workflows. By identifying and eliminating expensive bottlenecks, users can make workflow performant and cost efficient. A common way to profile a workflow is to generate a timing chart of all tasks executed. The [Amazon Genomics CLI](https://aws.amazon.com/genomics-cli/) (AGC) provides a unified experience for running workflows across [multiple workflow engines](https://aws.github.io/amazon-genomics-cli/docs/concepts/engines/). In doing so, it also enables a common way to generate timing charts and profile workflows.\n", "\n", "This notebook provides example code that demonstrates how to profile workflows run by the Amazon Genomics CLI as described by the blog \"Profiling workflow performance with the Amazon Genomics CLI\"." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prerequisites\n", "The code in this notebook also requires the following Python packages:\n", "* boto3\n", "* bokeh >= 2.1.1\n", "\n", "To export plots as PNGs, you will also need:\n", "* selenium\n", "* firefox or geckodriver\n", "\n", "You'll also need to have run a workflow with the Amazon Genomics CLI and generated the following output files:\n", "* a workflow log from `agc logs workflow`\n", "* a JSON formated GA4GH WES RunLog that includes AWS Batch job descriptions for each task\n", "\n", "Some examples of the above files have been included." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting started\n", "First, a few imports from the Python standard library (`datetime`, `json`, `re`), the Bokeh and Boto3 packages, and some functions from `utils.py`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from datetime import datetime\n", "import json\n", "from os import path\n", "import re\n", "\n", "from bokeh.models import ColumnDataSource, Range1d, Div\n", "from bokeh.layouts import gridplot, column\n", "from bokeh.plotting import figure, output_notebook, show, save\n", "from bokeh.io.export import export_png\n", "from bokeh.resources import CDN\n", "import boto3\n", "\n", "from utils import parse_datetime, get_job_resources, get_job_descriptions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll also create a set of time conversion factors to make changing units easier when plotting" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "TIME_SCALE_FACTORS = {\n", " \"sec\": 1, \"min\": 1/60, \"hr\": 1/3600\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Functions\n", "Let's define the functions we'll need for parsing the log data and generating plots." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parsing `agc logs workflow` output\n", "Here is a function that can parse the text output from an `agc logs workflow` command. We won't actually use this function because the output in `agc` v1.3.x has an occasional formatting edge case (i.e. missing separators between task names and job-ids). It is here for reference purposes only." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def parse_agc_log(log_file):\n", " \"\"\"\n", " Parses the text output from an 'agc logs workflow' command\n", " \n", " FOR REFERENCE ONLY\n", " \"\"\"\n", " with open(log_file, 'r') as f:\n", " lines = f.readlines()\n", " lines = list(filter(lambda x: x.strip(), lines))\n", "\n", " data = {\n", " k: lines[i].split(\":\")[1].strip()\n", " for i, k in enumerate(['runid', 'state'])\n", " }\n", "\n", " data['tasks'] = [\n", " dict(zip(\n", " ['name', 'job_id', 'start_time', 'end_time', 'exit_code'], \n", " re.split('\\t+', line.strip())\n", " )) \n", " for line in lines[4:]\n", " ]\n", " \n", " for i, task in enumerate(data['tasks']):\n", " for k in ('start_time', 'end_time'):\n", " task[k] = parse_datetime(task[k])\n", " data['tasks'][i] = task\n", "\n", " return data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Parsing GA4GH WES RunLogs\n", "This is the function we'll use to read GA4GH WES RunLogs that `agc` uses internally that have been saved as `*.json` files. There are optional arguments to fetch job descriptions from AWS Batch.\n", "\n", "**Note:** AWS Batch only stores job details for 48hrs after a job completes. Fetching job descriptions from AWS Batch should be done as soon as a workflow completes. This notebook assumes that AWS Batch job descriptions have been pre-fetched and included with the GA4GH WES RunLog." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def parse_wes_runlog(runlog_json, with_job_descriptions=False, batch=boto3.client('batch')):\n", " \"\"\"Parses JSON formated GA4GH WES RunLog\"\"\"\n", " with open(runlog_json, 'r') as f:\n", " runlog = json.load(f)\n", " \n", " tasks = runlog['task_logs'] \n", " for i, task in enumerate(tasks):\n", " for k in ('start_time', 'end_time'):\n", " tasks[i][k] = parse_datetime(task[k])\n", " \n", " name, job_id = task['name'].split(\"|\")\n", " tasks[i]['job_name'] = name\n", " tasks[i]['job_id'] = job_id\n", " \n", " if with_job_descriptions:\n", " descriptions = get_job_descriptions([task['job_id'] for task in tasks], batch)\n", " for i, task in enumerate(tasks):\n", " tasks[i]['job_description'] = descriptions.get(task['job_id'])\n", " \n", " runlog['task_logs'] = sorted(tasks, key=lambda x: (x['start_time'], x['name'])) \n", " return runlog" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Computing task cost\n", "This funcction is a linear equation that maps vCPUs and Memory (GiB) to Linux On-Demand USD per hour EC2 costs.\n", "\n", "**Note:** AWS prices vary by region and are updated regularly, so your model constants may differ. You can collect data to generate your own model by going to the [AWS EC2 console](https://us-west-2.console.aws.amazon.com/ec2/v2/home), and exporting a table that contains [instance types](https://us-west-2.console.aws.amazon.com/ec2/v2/home#InstanceTypes:) and their Linux On-demand per hour cost." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def approx_instance_cost_per_hr(vcpu, mem_gib):\n", " # rough OLS fit model based on c, m, r instance pricing filtered for x86_64 and non-(a,d,n)\n", " # returns linux on-demand per hour cost in USD\n", " usd = 0.03550716*vcpu + 0.003633091*mem_gib + 0.00718333\n", " \n", " return usd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting\n", "Here we have two functions. The first, `plot_tasks_bokeh1`, is simple and only plots tasks based on their timing. The second, `plot_tasks_bokeh2`, plots timing and additional information extracted from each task's AWS Batch job description." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def plot_tasks_bokeh1(tasks, time_units='min', **kwargs):\n", " \"\"\"\n", " plots task timing using engine reported timing (wes runlog)\n", " \n", " simple version that only shows task timing\n", " \"\"\"\n", " time_scale_factor = TIME_SCALE_FACTORS[time_units]\n", " \n", " tare = min([task['start_time'] for task in tasks])\n", " wall_time = (max([task['end_time'] for task in tasks]) - tare).total_seconds() * time_scale_factor\n", " \n", " stats = {\n", " 'num_tasks': len(tasks),\n", " 'timing': {\n", " 'wallclock': wall_time,\n", " 'units': time_units\n", " }\n", " }\n", " \n", " source = ColumnDataSource(data=dict(\n", " y=range(len(tasks)),\n", " names=[task['job_name'] for task in tasks],\n", " running_left=[(task['start_time'] - tare).total_seconds() * time_scale_factor for task in tasks],\n", " running_right=[(task['end_time'] - tare).total_seconds() * time_scale_factor for task in tasks],\n", " text_x=[((task['end_time'] - tare).total_seconds() + 30) * time_scale_factor for task in tasks],\n", " ))\n", " \n", " output_notebook()\n", " \n", " p_job = figure(width=960, height=800)\n", " p_job.hbar(y='y', left='running_left', right='running_right', height=0.8, source=source)\n", " p_job.text(x='text_x', y='y', text='names', alpha=0.4, text_baseline='middle', text_font_size='1.5ex', source=source)\n", " x_max = 5*3600*time_scale_factor # max expected workflow duration in hours\n", " x_min = -(x_max * 0.05)\n", " p_job.x_range = Range1d(x_min, x_max)\n", " p_job.y_range.flipped = True\n", " p_job.xaxis.axis_label = f\"task execution time ({time_units})\"\n", " p_job.title.text = (\n", " f\"tasks: {stats['num_tasks']}, \"\n", " f\"wall_time: {stats['timing']['wallclock']:.2f} {stats['timing']['units']}\"\n", " )\n", " \n", " show(p_job)\n", " \n", " return p_job\n", "\n", "\n", "def plot_tasks_bokeh2(tasks, time_units='min', info=None, show_plot=True):\n", " \"\"\"\n", " plots task timing using batch job description data\n", " \n", " improved version that includes additional details like per task cpu and memory utilization and cost\n", " \"\"\"\n", " time_scale_factor = TIME_SCALE_FACTORS[time_units]\n", " millis_to_sec = 1/1000\n", " mebi_to_gebi = 1/1024\n", " \n", " jobs = [task['job_description'] for task in tasks]\n", " tare = min([job['createdAt'] for job in jobs])\n", " \n", " colors={'SUCCEEDED': 'cornflowerblue', 'FAILED': 'orangered'}\n", " \n", " source = ColumnDataSource(data=dict(\n", " y = range(len(jobs)),\n", " names=[job['jobName'] for job in jobs],\n", " color=[colors[job['status']] for job in jobs],\n", " cost=[\n", " approx_instance_cost_per_hr(\n", " get_job_resources(job)['vcpus'], \n", " get_job_resources(job)['memory'] * mebi_to_gebi\n", " ) * ((job['stoppedAt'] - job['startedAt']) * millis_to_sec / 3600)\n", " for job in jobs],\n", " cpus=[get_job_resources(job)['vcpus'] for job in jobs],\n", " memory=[get_job_resources(job)['memory'] * mebi_to_gebi for job in jobs],\n", " queued_left=[(job['createdAt'] - tare) * millis_to_sec * time_scale_factor for job in jobs],\n", " queued_right=[(job['startedAt'] - tare) * millis_to_sec * time_scale_factor for job in jobs],\n", " running_left=[(job['startedAt'] - tare) * millis_to_sec * time_scale_factor for job in jobs],\n", " running_right=[(job['stoppedAt'] - tare) * millis_to_sec * time_scale_factor for job in jobs],\n", " text_x=[((job['stoppedAt'] - tare) * millis_to_sec + 30) * time_scale_factor for job in jobs],\n", " ))\n", " \n", " wall_time = (max([job['stoppedAt'] for job in jobs]) - tare) * millis_to_sec * time_scale_factor\n", " total_cpu_time = sum([(job['stoppedAt'] - job['startedAt']) * cpu for job, cpu in zip(jobs, source.data['cpus'])]) * millis_to_sec * time_scale_factor\n", " total_cost = sum(source.data['cost'])\n", " stats = {\n", " 'num_tasks': len(tasks),\n", " 'timing': {\n", " 'total_cpu': total_cpu_time,\n", " 'wallclock': wall_time,\n", " 'units': time_units\n", " }\n", " }\n", " \n", " output_notebook()\n", " \n", " p_job = figure(width=960, height=800, sizing_mode=\"stretch_both\")\n", " p_job.hbar(y='y', left='queued_left', right='queued_right', height=0.8, color='lightgrey', source=source, legend_label=\"queued\")\n", " p_job.hbar(y='y', left='running_left', right='running_right', height=0.8, color='color', source=source, legend_label=\"running\")\n", " p_job.text(x='text_x', y='y', text='names', alpha=0.4, text_baseline='middle', text_font_size='1.5ex', source=source)\n", " x_max = 5*3600*time_scale_factor # max expected workflow duration in hours\n", " x_min = -(x_max * 0.05)\n", " p_job.x_range = Range1d(x_min, x_max)\n", " p_job.y_range.flipped = True\n", " p_job.xaxis.axis_label = f\"task execution time ({time_units})\"\n", " p_job.yaxis.visible = False\n", " p_job.legend.location = \"top_right\"\n", " p_job.title.text = (\n", " f\"tasks: {stats['num_tasks']}, \"\n", " f\"total_cpu_time: {stats['timing']['total_cpu']:.2f} {stats['timing']['units']}, \"\n", " f\"wall_time: {stats['timing']['wallclock']:.2f} {stats['timing']['units']}\"\n", " )\n", " \n", " p_usd = figure(width=160, y_range=p_job.y_range, sizing_mode=\"stretch_height\")\n", " p_usd.hbar(y='y', right='cost', height=0.8, color='limegreen', source=source)\n", " x_max = 0.1\n", " x_min = -(x_max * 0.05)\n", " p_usd.x_range = Range1d(x_min, x_max*1.05)\n", " p_usd.xaxis.axis_label = \"task cost (USD)\"\n", " p_usd.title.text = f\"total: {total_cost:.2f} USD\"\n", " \n", " p_cpu = figure(width=160, y_range=p_job.y_range, sizing_mode=\"stretch_height\")\n", " p_cpu.hbar(y='y', right='cpus', height=0.8, color=\"darkgrey\", source=source)\n", " p_cpu.x_range = Range1d(-1, 32)\n", " p_cpu.xaxis.axis_label = \"vcpus\"\n", " p_cpu.yaxis.visible = False\n", " p_cpu.title.text = f\"max cpus: {max(source.data['cpus'])}\"\n", " \n", " p_mem = figure(width=160, y_range=p_job.y_range, sizing_mode=\"stretch_height\")\n", " p_mem.hbar(y='y', right='memory', height=0.8, color=\"darkgrey\", source=source)\n", " p_mem.x_range = Range1d(-1, 32)\n", " p_mem.xaxis.axis_label = \"memory (GiB)\"\n", " p_mem.yaxis.visible = False\n", " p_mem.title.text = f\"max mem: {max(source.data['memory']):.2f} GiB\"\n", " \n", " title_text = \"\"\n", " if info:\n", " info_text = f\"{info['context']['engine']} : {info['workflow']['name']} : {info['context']['launch_type']} : {info['state']} ({info['runid']})\"\n", " title_text = info_text\n", " \n", " g = gridplot([p_usd, p_cpu, p_mem, p_job], ncols=4, toolbar_location=\"right\")\n", " \n", " title = Div(text=f\"{title_text}\")\n", " \n", " layout = column(title, g)\n", " \n", " if show_plot:\n", " show(layout)\n", " \n", " return layout" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Start by reading in a JSON file with GA4GH WES RunLog output for a worklow that was run with Amazon Genomics CLI." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "runlog_file = 'logs/gatk4-data-processing__onDemandCtxCromwell__8cf8e737-6584-4309-ab5f-0aae8e885369.wes_runlog__sorted-with-job-desc.json'\n", "runlog_basename = path.basename(runlog_file).split('.')[0]\n", "runlog = parse_wes_runlog(runlog_file)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting - timing only" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\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", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd, {\n", " iopub: {\n", " output: function(msg) {\n", " var id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\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(\"1002\");\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", " const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\": \"kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\": \"xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\": \"Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\": \"cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j\"};\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", " if (url in hashes) {\n", " element.crossOrigin = \"anonymous\";\n", " element.integrity = \"sha384-\" + hashes[url];\n", " }\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " \n", " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.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(\"1002\")).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));" ], "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(\"1002\");\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 const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\": \"kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\": \"xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\": \"Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\": \"cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j\"};\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 if (url in hashes) {\n element.crossOrigin = \"anonymous\";\n element.integrity = \"sha384-\" + hashes[url];\n }\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.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(\"1002\")).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));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"e7e6a76b-9cc3-4392-8bab-39fb2be7b680\":{\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"}],\"left\":[{\"id\":\"1016\"}],\"plot_height\":800,\"plot_width\":960,\"renderers\":[{\"id\":\"1037\"},{\"id\":\"1042\"}],\"title\":{\"id\":\"1045\"},\"toolbar\":{\"id\":\"1027\"},\"x_range\":{\"id\":\"1044\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"names\":[\"PreProcessingForVariantDiscovery_GATK4.CreateSequenceGroupingTSV\",\"PreProcessingForVariantDiscovery_GATK4.GetBwaVersion\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4.MarkDuplicates\",\"PreProcessingForVariantDiscovery_GATK4.SortAndFixTags\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4.GatherBqsrReports\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4.GatherBamFiles\"],\"running_left\":[0.0,0.0,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,9.25,9.75,9.75,9.75,9.8,9.85,9.85,9.883333333333333,9.883333333333333,10.3,10.4,10.55,11.35,11.5,11.9,12.7,12.7,12.9,13.15,13.95,14.0,14.1,14.299999999999999,14.35,18.616666666666667,50.4,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,88.5,124.16666666666667,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,125.95,153.66666666666666],\"running_right\":[4.95,4.966666666666667,12.666666666666666,9.716666666666667,10.366666666666667,14.066666666666666,9.766666666666666,9.816666666666666,9.866666666666667,11.466666666666667,10.516666666666666,13.116666666666667,9.216666666666667,14.266666666666666,9.816666666666666,13.966666666666667,9.716666666666667,12.866666666666667,10.266666666666666,13.916666666666666,12.666666666666666,14.316666666666666,11.316666666666666,9.716666666666667,9.866666666666667,11.866666666666667,15.966666666666667,15.816666666666666,15.666666666666666,15.316666666666666,15.316666666666666,15.816666666666666,15.466666666666667,15.066666666666666,17.016666666666666,16.766666666666666,16.366666666666667,16.666666666666668,16.616666666666667,15.616666666666667,18.516666666666666,17.816666666666666,17.766666666666666,17.666666666666668,18.566666666666666,17.766666666666666,18.366666666666667,17.316666666666666,17.316666666666666,17.716666666666665,50.36666666666667,88.46666666666667,113.11666666666666,119.16666666666667,119.26666666666667,123.61666666666666,114.81666666666666,114.56666666666666,113.51666666666667,122.11666666666666,113.81666666666666,121.21666666666667,118.41666666666667,117.71666666666667,116.71666666666667,120.01666666666667,121.41666666666667,124.11666666666666,120.16666666666667,120.41666666666667,125.91666666666667,147.41666666666666,147.61666666666667,147.06666666666666,153.61666666666667,147.81666666666666,148.36666666666667,136.41666666666666,146.46666666666667,146.71666666666667,149.06666666666666,150.86666666666667,147.16666666666666,137.21666666666667,146.71666666666667,146.56666666666666,147.21666666666667,136.56666666666666,153.51666666666665,136.46666666666667,162.16666666666666],\"text_x\":[5.45,5.466666666666667,13.166666666666666,10.216666666666667,10.866666666666667,14.566666666666666,10.266666666666666,10.316666666666666,10.366666666666667,11.966666666666667,11.016666666666666,13.616666666666667,9.716666666666667,14.766666666666666,10.316666666666666,14.466666666666667,10.216666666666667,13.366666666666667,10.766666666666666,14.416666666666666,13.166666666666666,14.816666666666666,11.816666666666666,10.216666666666667,10.366666666666667,12.366666666666667,16.466666666666665,16.316666666666666,16.166666666666668,15.816666666666666,15.816666666666666,16.316666666666666,15.966666666666667,15.566666666666666,17.516666666666666,17.266666666666666,16.866666666666667,17.166666666666668,17.116666666666667,16.116666666666667,19.016666666666666,18.316666666666666,18.266666666666666,18.166666666666668,19.066666666666666,18.266666666666666,18.866666666666667,17.816666666666666,17.816666666666666,18.216666666666665,50.86666666666667,88.96666666666667,113.61666666666666,119.66666666666667,119.76666666666667,124.11666666666666,115.31666666666666,115.06666666666666,114.01666666666667,122.61666666666666,114.31666666666666,121.71666666666667,118.91666666666667,118.21666666666667,117.21666666666667,120.51666666666667,121.91666666666667,124.61666666666666,120.66666666666667,120.91666666666667,126.41666666666667,147.91666666666666,148.11666666666667,147.56666666666666,154.11666666666667,148.31666666666666,148.86666666666667,136.91666666666666,146.96666666666667,147.21666666666667,149.56666666666666,151.36666666666667,147.66666666666666,137.71666666666667,147.21666666666667,147.06666666666666,147.71666666666667,137.06666666666666,154.01666666666665,136.96666666666667,162.66666666666666],\"y\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]},\"selected\":{\"id\":\"1054\"},\"selection_policy\":{\"id\":\"1053\"}},\"id\":\"1001\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1001\"}},\"id\":\"1043\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"task execution time (min)\",\"formatter\":{\"id\":\"1048\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1053\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1054\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1013\",\"type\":\"BasicTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"1050\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"flipped\":true},\"id\":\"1006\",\"type\":\"DataRange1d\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"dimension\":1,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"1001\"},\"glyph\":{\"id\":\"1040\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1041\"},\"selection_glyph\":null,\"view\":{\"id\":\"1043\"}},\"id\":\"1042\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"text\":\"tasks: 91, wall_time: 162.17 min\"},\"id\":\"1045\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{\"text\":{\"field\":\"names\"},\"text_alpha\":{\"value\":0.4},\"text_baseline\":\"middle\",\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"1.5ex\"},\"x\":{\"field\":\"text_x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1040\",\"type\":\"Text\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"height\":{\"value\":0.8},\"left\":{\"field\":\"running_left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"running_right\"},\"y\":{\"field\":\"y\"}},\"id\":\"1036\",\"type\":\"HBar\"},{\"attributes\":{\"source\":{\"id\":\"1001\"}},\"id\":\"1038\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"height\":{\"value\":0.8},\"left\":{\"field\":\"running_left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"running_right\"},\"y\":{\"field\":\"y\"}},\"id\":\"1035\",\"type\":\"HBar\"},{\"attributes\":{\"data_source\":{\"id\":\"1001\"},\"glyph\":{\"id\":\"1035\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1036\"},\"selection_glyph\":null,\"view\":{\"id\":\"1038\"}},\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"end\":300.0,\"start\":-15.0},\"id\":\"1044\",\"type\":\"Range1d\"},{\"attributes\":{\"text\":{\"field\":\"names\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":\"middle\",\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"1.5ex\"},\"x\":{\"field\":\"text_x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1041\",\"type\":\"Text\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.1.1\"}};\n", " var render_items = [{\"docid\":\"e7e6a76b-9cc3-4392-8bab-39fb2be7b680\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"69965a44-2deb-4826-ad7f-5f6daa848fb2\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1003" } }, "output_type": "display_data" } ], "source": [ "plot1 = plot_tasks_bokeh1(runlog['task_logs'])\n", "html1 = save(plot1, filename=f\"{runlog_basename}__plot1.html\", title=runlog_basename, resources=CDN)\n", "png1 = export_png(plot1, filename=f\"{runlog_basename}__plot1.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting - timing, compute resources, costs" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\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", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd, {\n", " iopub: {\n", " output: function(msg) {\n", " var id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\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(\"1328\");\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", " const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\": \"kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\": \"xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\": \"Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\": \"cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j\"};\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", " if (url in hashes) {\n", " element.crossOrigin = \"anonymous\";\n", " element.integrity = \"sha384-\" + hashes[url];\n", " }\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " \n", " var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.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(\"1328\")).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));" ], "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(\"1328\");\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 const hashes = {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\": \"kLr4fYcqcSpbuI95brIH3vnnYCquzzSxHPU6XGQCIkQRGJwhg0StNbj1eegrHs12\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\": \"xIGPmVtaOm+z0BqfSOMn4lOR6ciex448GIKG4eE61LsAvmGj48XcMQZtKcE/UXZe\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\": \"Dc9u1wF/0zApGIWoBbH77iWEHtdmkuYWG839Uzmv8y8yBLXebjO9ZnERsde5Ln/P\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.min.js\": \"cT9JaBz7GiRXdENrJLZNSC6eMNF3nh3fa5fTF51Svp+ukxPdwcU5kGXGPBgDCa2j\"};\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 if (url in hashes) {\n element.crossOrigin = \"anonymous\";\n element.integrity = \"sha384-\" + hashes[url];\n }\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.1.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.1.1.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(\"1328\")).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));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"93be7b35-78a4-4e1d-af08-440b91913816\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1553\"},{\"id\":\"1552\"}]},\"id\":\"1554\",\"type\":\"Column\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1420\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1352\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1372\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1373\",\"type\":\"Selection\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1346\"},{\"id\":\"1347\"},{\"id\":\"1348\"},{\"id\":\"1349\"},{\"id\":\"1350\"},{\"id\":\"1351\"}]},\"id\":\"1353\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_color\":{\"field\":\"color\"},\"height\":{\"value\":0.8},\"left\":{\"field\":\"running_left\"},\"line_color\":{\"field\":\"color\"},\"right\":{\"field\":\"running_right\"},\"y\":{\"field\":\"y\"}},\"id\":\"1377\",\"type\":\"HBar\"},{\"attributes\":{\"label\":{\"value\":\"running\"},\"renderers\":[{\"id\":\"1379\"}]},\"id\":\"1390\",\"type\":\"LegendItem\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"field\":\"color\"},\"height\":{\"value\":0.8},\"left\":{\"field\":\"running_left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"field\":\"color\"},\"right\":{\"field\":\"running_right\"},\"y\":{\"field\":\"y\"}},\"id\":\"1378\",\"type\":\"HBar\"},{\"attributes\":{\"source\":{\"id\":\"1327\"}},\"id\":\"1380\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1339\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"1327\"}},\"id\":\"1432\",\"type\":\"CDSView\"},{\"attributes\":{\"text\":{\"field\":\"names\"},\"text_alpha\":{\"value\":0.1},\"text_baseline\":\"middle\",\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"1.5ex\"},\"x\":{\"field\":\"text_x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1393\",\"type\":\"Text\"},{\"attributes\":{\"data_source\":{\"id\":\"1327\"},\"glyph\":{\"id\":\"1429\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1430\"},\"selection_glyph\":null,\"view\":{\"id\":\"1432\"}},\"id\":\"1431\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"1327\"},\"glyph\":{\"id\":\"1377\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1378\"},\"selection_glyph\":null,\"view\":{\"id\":\"1380\"}},\"id\":\"1379\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"limegreen\"},\"height\":{\"value\":0.8},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"limegreen\"},\"right\":{\"field\":\"cost\"},\"y\":{\"field\":\"y\"}},\"id\":\"1430\",\"type\":\"HBar\"},{\"attributes\":{\"text\":\"total: 1.69 USD\"},\"id\":\"1434\",\"type\":\"Title\"},{\"attributes\":{\"end\":0.10500000000000001,\"start\":-0.005000000000000001},\"id\":\"1433\",\"type\":\"Range1d\"},{\"attributes\":{\"below\":[{\"id\":\"1443\"}],\"center\":[{\"id\":\"1446\"},{\"id\":\"1450\"}],\"left\":[{\"id\":\"1447\"}],\"plot_width\":160,\"renderers\":[{\"id\":\"1468\"}],\"sizing_mode\":\"stretch_height\",\"title\":{\"id\":\"1471\"},\"toolbar\":{\"id\":\"1458\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1470\"},\"x_scale\":{\"id\":\"1439\"},\"y_range\":{\"id\":\"1332\"},\"y_scale\":{\"id\":\"1441\"}},\"id\":\"1435\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1441\",\"type\":\"LinearScale\"},{\"attributes\":{\"source\":{\"id\":\"1327\"}},\"id\":\"1364\",\"type\":\"CDSView\"},{\"attributes\":{\"axis\":{\"id\":\"1443\"},\"ticker\":null},\"id\":\"1446\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1327\"}},\"id\":\"1506\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"lightgrey\"},\"height\":{\"value\":0.8},\"left\":{\"field\":\"queued_left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"lightgrey\"},\"right\":{\"field\":\"queued_right\"},\"y\":{\"field\":\"y\"}},\"id\":\"1362\",\"type\":\"HBar\"},{\"attributes\":{\"fill_color\":{\"value\":\"darkgrey\"},\"height\":{\"value\":0.8},\"line_color\":{\"value\":\"darkgrey\"},\"right\":{\"field\":\"cpus\"},\"y\":{\"field\":\"y\"}},\"id\":\"1466\",\"type\":\"HBar\"},{\"attributes\":{\"text\":\"max cpus: 16\"},\"id\":\"1471\",\"type\":\"Title\"},{\"attributes\":{\"data_source\":{\"id\":\"1327\"},\"glyph\":{\"id\":\"1361\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1362\"},\"selection_glyph\":null,\"view\":{\"id\":\"1364\"}},\"id\":\"1363\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1439\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"BasicTicker\"},{\"attributes\":{\"label\":{\"value\":\"queued\"},\"renderers\":[{\"id\":\"1363\"}]},\"id\":\"1375\",\"type\":\"LegendItem\"},{\"attributes\":{\"axis_label\":\"vcpus\",\"formatter\":{\"id\":\"1521\"},\"ticker\":{\"id\":\"1444\"}},\"id\":\"1443\",\"type\":\"LinearAxis\"},{\"attributes\":{\"items\":[{\"id\":\"1375\"},{\"id\":\"1390\"}]},\"id\":\"1374\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1451\",\"type\":\"PanTool\"},{\"attributes\":{\"formatter\":{\"id\":\"1523\"},\"ticker\":{\"id\":\"1448\"},\"visible\":false},\"id\":\"1447\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1448\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1447\"},\"dimension\":1,\"ticker\":null},\"id\":\"1450\",\"type\":\"Grid\"},{\"attributes\":{\"text\":\"tasks: 91, total_cpu_time: 2101.59 min, wall_time: 161.78 min\"},\"id\":\"1366\",\"type\":\"Title\"},{\"attributes\":{\"text\":{\"field\":\"names\"},\"text_alpha\":{\"value\":0.4},\"text_baseline\":\"middle\",\"text_color\":{\"value\":\"black\"},\"text_font_size\":{\"value\":\"1.5ex\"},\"x\":{\"field\":\"text_x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1392\",\"type\":\"Text\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1451\"},{\"id\":\"1452\"},{\"id\":\"1453\"},{\"id\":\"1454\"},{\"id\":\"1455\"},{\"id\":\"1456\"}]},\"id\":\"1458\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"1327\"},\"glyph\":{\"id\":\"1503\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1504\"},\"selection_glyph\":null,\"view\":{\"id\":\"1506\"}},\"id\":\"1505\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1327\"}},\"id\":\"1395\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1452\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1456\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1367\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1457\"}},\"id\":\"1453\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1406\"}],\"center\":[{\"id\":\"1409\"},{\"id\":\"1413\"}],\"left\":[{\"id\":\"1410\"}],\"plot_width\":160,\"renderers\":[{\"id\":\"1431\"}],\"sizing_mode\":\"stretch_height\",\"title\":{\"id\":\"1434\"},\"toolbar\":{\"id\":\"1421\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1433\"},\"x_scale\":{\"id\":\"1402\"},\"y_range\":{\"id\":\"1332\"},\"y_scale\":{\"id\":\"1404\"}},\"id\":\"1398\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1454\",\"type\":\"SaveTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1327\"},\"glyph\":{\"id\":\"1392\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1393\"},\"selection_glyph\":null,\"view\":{\"id\":\"1395\"}},\"id\":\"1394\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1455\",\"type\":\"ResetTool\"},{\"attributes\":{\"end\":300.0,\"start\":-15.0},\"id\":\"1396\",\"type\":\"Range1d\"},{\"attributes\":{\"axis\":{\"id\":\"1406\"},\"ticker\":null},\"id\":\"1409\",\"type\":\"Grid\"},{\"attributes\":{\"children\":[[{\"id\":\"1398\"},0,0],[{\"id\":\"1435\"},0,1],[{\"id\":\"1472\"},0,2],[{\"id\":\"1329\"},0,3]]},\"id\":\"1549\",\"type\":\"GridBox\"},{\"attributes\":{},\"id\":\"1404\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_color\":{\"value\":\"limegreen\"},\"height\":{\"value\":0.8},\"line_color\":{\"value\":\"limegreen\"},\"right\":{\"field\":\"cost\"},\"y\":{\"field\":\"y\"}},\"id\":\"1429\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"1402\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1407\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"task cost (USD)\",\"formatter\":{\"id\":\"1511\"},\"ticker\":{\"id\":\"1407\"}},\"id\":\"1406\",\"type\":\"LinearAxis\"},{\"attributes\":{\"toolbars\":[{\"id\":\"1421\"},{\"id\":\"1458\"},{\"id\":\"1495\"},{\"id\":\"1353\"}],\"tools\":[{\"id\":\"1414\"},{\"id\":\"1415\"},{\"id\":\"1416\"},{\"id\":\"1417\"},{\"id\":\"1418\"},{\"id\":\"1419\"},{\"id\":\"1451\"},{\"id\":\"1452\"},{\"id\":\"1453\"},{\"id\":\"1454\"},{\"id\":\"1455\"},{\"id\":\"1456\"},{\"id\":\"1488\"},{\"id\":\"1489\"},{\"id\":\"1490\"},{\"id\":\"1491\"},{\"id\":\"1492\"},{\"id\":\"1493\"},{\"id\":\"1346\"},{\"id\":\"1347\"},{\"id\":\"1348\"},{\"id\":\"1349\"},{\"id\":\"1350\"},{\"id\":\"1351\"}]},\"id\":\"1550\",\"type\":\"ProxyToolbar\"},{\"attributes\":{},\"id\":\"1414\",\"type\":\"PanTool\"},{\"attributes\":{\"formatter\":{\"id\":\"1369\"},\"ticker\":{\"id\":\"1343\"},\"visible\":false},\"id\":\"1342\",\"type\":\"LinearAxis\"},{\"attributes\":{\"toolbar\":{\"id\":\"1550\"}},\"id\":\"1551\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"formatter\":{\"id\":\"1513\"},\"ticker\":{\"id\":\"1411\"}},\"id\":\"1410\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1411\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1410\"},\"dimension\":1,\"ticker\":null},\"id\":\"1413\",\"type\":\"Grid\"},{\"attributes\":{\"end\":32,\"start\":-1},\"id\":\"1507\",\"type\":\"Range1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1414\"},{\"id\":\"1415\"},{\"id\":\"1416\"},{\"id\":\"1417\"},{\"id\":\"1418\"},{\"id\":\"1419\"}]},\"id\":\"1421\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"darkgrey\"},\"height\":{\"value\":0.8},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"darkgrey\"},\"right\":{\"field\":\"memory\"},\"y\":{\"field\":\"y\"}},\"id\":\"1504\",\"type\":\"HBar\"},{\"attributes\":{\"below\":[{\"id\":\"1338\"}],\"center\":[{\"id\":\"1341\"},{\"id\":\"1345\"},{\"id\":\"1374\"}],\"left\":[{\"id\":\"1342\"}],\"plot_height\":800,\"plot_width\":960,\"renderers\":[{\"id\":\"1363\"},{\"id\":\"1379\"},{\"id\":\"1394\"}],\"sizing_mode\":\"stretch_both\",\"title\":{\"id\":\"1366\"},\"toolbar\":{\"id\":\"1353\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1396\"},\"x_scale\":{\"id\":\"1334\"},\"y_range\":{\"id\":\"1332\"},\"y_scale\":{\"id\":\"1336\"}},\"id\":\"1329\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text\":\"max mem: 14.00 GiB\"},\"id\":\"1508\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1419\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1369\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"overlay\":{\"id\":\"1420\"}},\"id\":\"1416\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1457\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1417\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1418\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1343\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1533\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"source\":{\"id\":\"1327\"}},\"id\":\"1469\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"1327\"},\"glyph\":{\"id\":\"1466\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1467\"},\"selection_glyph\":null,\"view\":{\"id\":\"1469\"}},\"id\":\"1468\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"darkgrey\"},\"height\":{\"value\":0.8},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"darkgrey\"},\"right\":{\"field\":\"cpus\"},\"y\":{\"field\":\"y\"}},\"id\":\"1467\",\"type\":\"HBar\"},{\"attributes\":{\"end\":32,\"start\":-1},\"id\":\"1470\",\"type\":\"Range1d\"},{\"attributes\":{\"axis\":{\"id\":\"1480\"},\"ticker\":null},\"id\":\"1483\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1478\",\"type\":\"LinearScale\"},{\"attributes\":{\"below\":[{\"id\":\"1480\"}],\"center\":[{\"id\":\"1483\"},{\"id\":\"1487\"}],\"left\":[{\"id\":\"1484\"}],\"plot_width\":160,\"renderers\":[{\"id\":\"1505\"}],\"sizing_mode\":\"stretch_height\",\"title\":{\"id\":\"1508\"},\"toolbar\":{\"id\":\"1495\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1507\"},\"x_scale\":{\"id\":\"1476\"},\"y_range\":{\"id\":\"1332\"},\"y_scale\":{\"id\":\"1478\"}},\"id\":\"1472\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1511\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"darkgrey\"},\"height\":{\"value\":0.8},\"line_color\":{\"value\":\"darkgrey\"},\"right\":{\"field\":\"memory\"},\"y\":{\"field\":\"y\"}},\"id\":\"1503\",\"type\":\"HBar\"},{\"attributes\":{},\"id\":\"1476\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1481\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"memory (GiB)\",\"formatter\":{\"id\":\"1531\"},\"ticker\":{\"id\":\"1481\"}},\"id\":\"1480\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1488\",\"type\":\"PanTool\"},{\"attributes\":{\"flipped\":true},\"id\":\"1332\",\"type\":\"DataRange1d\"},{\"attributes\":{\"formatter\":{\"id\":\"1533\"},\"ticker\":{\"id\":\"1485\"},\"visible\":false},\"id\":\"1484\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1521\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1484\"},\"dimension\":1,\"ticker\":null},\"id\":\"1487\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1489\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1493\",\"type\":\"HelpTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1494\"}},\"id\":\"1490\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1491\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1492\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1349\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1523\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"1549\"},{\"id\":\"1551\"}]},\"id\":\"1552\",\"type\":\"Row\"},{\"attributes\":{\"fill_color\":{\"value\":\"lightgrey\"},\"height\":{\"value\":0.8},\"left\":{\"field\":\"queued_left\"},\"line_color\":{\"value\":\"lightgrey\"},\"right\":{\"field\":\"queued_right\"},\"y\":{\"field\":\"y\"}},\"id\":\"1361\",\"type\":\"HBar\"},{\"attributes\":{\"text\":\"cromwell : gatk4-data-processing : on-demand : COMPLETE (8cf8e737-6584-4309-ab5f-0aae8e885369)\"},\"id\":\"1553\",\"type\":\"Div\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1494\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"axis\":{\"id\":\"1342\"},\"dimension\":1,\"ticker\":null},\"id\":\"1345\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1347\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1352\"}},\"id\":\"1348\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"data\":{\"color\":[\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\",\"cornflowerblue\"],\"cost\":[0.00018331323253333338,9.16177490888889e-05,0.031739239734876676,0.034581489618466674,0.03494483702724334,0.03446425833387334,0.03606096930207334,0.03577606597245334,0.03367807820574001,0.03433172088749334,0.030587451060430003,0.036549027142680005,0.03426684363355667,0.03345944359931001,0.03361476635471334,0.03419066069193667,0.03532801287288,0.033560672987490006,0.03577432663588667,0.034890221859050004,0.03589086218585334,0.03423275263685001,0.035373931358240004,0.03467106545165,0.035083810018920004,0.036656692076156676,0.0039562768588994445,0.0037170217482305557,0.003940842583556667,0.0038903434149016665,0.003998081332793889,0.003977067829186111,0.0038076246003972227,0.004016154217515556,0.003924534070166667,0.0038924097957405562,0.0038491747504961113,0.0038490316933611113,0.004040553406651667,0.003533972196379445,0.0038465361411172227,0.0038420377889833335,0.003876466872806667,0.0038471560553688896,0.003943958050052223,0.0031844677203372224,0.003307703494521111,0.0018901662390433335,0.0018715052305444447,0.0017182115627733334,0.03266126292045486,0.04763813879155556,0.02084579426906222,0.027444330346203336,0.021270848670786668,0.026274194701604445,0.02090646770376555,0.02223827377889222,0.020303298167333336,0.027640520324612224,0.021615309691132224,0.026594185715512222,0.026792722378286667,0.02668541978783111,0.021920038299853332,0.02647059964346667,0.026819861514270002,0.033389502920558894,0.025774153881908894,0.026722142711108888,0.0012183063521344446,0.01362174144232778,0.014408825903860556,0.01425799599785889,0.019851657138256668,0.014426898788582223,0.013975648899080557,0.004363337988923334,0.014349250554751667,0.013631739546540556,0.014427852502815556,0.013634918593985001,0.014261763169080555,0.004391170549299445,0.014268836549644446,0.013598168805527222,0.014339204764827224,0.004027217302622222,0.02016177321646222,0.004325380162436667,0.003072211796518334],\"cpus\":[1,1,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],\"memory\":[2.0,1.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,14.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,7.5,10.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,6.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,4.0,3.0],\"names\":[\"PreProcessingForVariantDiscovery_GATK4_CreateSequenceGroupingTSV\",\"PreProcessingForVariantDiscovery_GATK4_GetBwaVersion\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_SamToFastqAndBwaMem\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MergeBamAlignment\",\"PreProcessingForVariantDiscovery_GATK4_MarkDuplicates\",\"PreProcessingForVariantDiscovery_GATK4_SortAndFixTags\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_BaseRecalibrator\",\"PreProcessingForVariantDiscovery_GATK4_GatherBqsrReports\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_ApplyBQSR\",\"PreProcessingForVariantDiscovery_GATK4_GatherBamFiles\"],\"queued_left\":[0.0,0.013466666666666667,0.19983333333333334,0.13574999999999998,0.19235,0.27091666666666664,0.15193333333333334,0.22646666666666668,0.23315,0.15903333333333333,0.18313333333333331,0.25478333333333336,0.11846666666666668,0.2858333333333334,0.1093,0.2627833333333333,0.14401666666666665,0.2781666666666667,0.21803333333333333,0.29268333333333335,0.23956666666666668,0.24763333333333334,0.17673333333333335,0.12768333333333334,0.16805,0.208,9.23395,9.74545,9.729716666666667,9.737533333333335,9.777116666666668,9.825716666666667,9.83525,9.85905,9.8664,10.276966666666667,10.377450000000001,10.5274,11.3611,11.48125,11.8766,12.68505,12.677416666666666,12.876866666666666,13.126283333333333,13.927766666666667,13.974766666666666,14.075883333333334,14.259250000000002,14.325283333333333,18.594566666666665,50.375033333333334,88.55021666666667,88.57098333333333,88.59355000000001,88.51923333333335,88.54395,88.60885,88.61683333333333,88.60096666666666,88.58670000000001,88.53545000000001,88.49725,88.51025,88.57823333333334,88.56433333333332,88.52579999999999,88.48968333333333,88.50316666666667,88.55763333333334,124.1452,126.0212,126.05918333333334,125.96116666666667,126.00031666666666,126.07306666666666,126.04326666666667,126.02911666666667,125.95368333333334,125.94563333333333,125.96963333333333,126.00758333333333,125.98533333333333,126.0509,126.01483333333334,125.93896666666666,125.99313333333333,126.03536666666668,125.97833333333332,126.06588333333333,153.64348333333334],\"queued_right\":[3.4381,3.9476833333333334,8.750466666666666,5.258,6.27325,9.280399999999998,5.7966500000000005,5.766733333333334,5.750266666666667,5.800816666666667,5.792383333333333,8.757816666666667,5.267883333333333,9.2797,5.295483333333333,8.757833333333334,5.283683333333333,9.2783,5.769883333333333,8.760516666666666,8.780949999999999,8.768066666666668,5.75415,5.28265,5.803416666666666,5.828783333333334,10.702716666666667,10.6985,10.697783333333332,10.702200000000001,10.703433333333333,11.241216666666668,10.703800000000001,10.7035,11.24105,11.242233333333333,11.242616666666667,11.242600000000001,11.492333333333333,11.576833333333333,13.328966666666668,13.328766666666667,13.328949999999999,13.329,13.328916666666666,14.073416666666667,14.073366666666667,14.724016666666667,14.724583333333333,15.2545,21.17823333333333,50.52056666666667,93.26153333333333,92.7346,93.25813333333333,92.73556666666667,93.25865,93.26001666666667,93.2565,93.26235,93.26208333333334,92.73446666666666,92.73475,92.73778333333333,93.25898333333333,92.73698333333333,92.73586666666667,92.73656666666668,92.73436666666666,92.73705,124.25945,130.73526666666666,130.7382,130.73643333333334,130.73935,130.73813333333334,130.73676666666665,130.71208333333334,130.7405,130.73501666666667,130.73656666666668,130.7358,130.73363333333333,130.71176666666668,130.74063333333334,130.73486666666668,130.73226666666667,130.71205,130.73436666666666,130.7115,158.33691666666667],\"running_left\":[3.4381,3.9476833333333334,8.750466666666666,5.258,6.27325,9.280399999999998,5.7966500000000005,5.766733333333334,5.750266666666667,5.800816666666667,5.792383333333333,8.757816666666667,5.267883333333333,9.2797,5.295483333333333,8.757833333333334,5.283683333333333,9.2783,5.769883333333333,8.760516666666666,8.780949999999999,8.768066666666668,5.75415,5.28265,5.803416666666666,5.828783333333334,10.702716666666667,10.6985,10.697783333333332,10.702200000000001,10.703433333333333,11.241216666666668,10.703800000000001,10.7035,11.24105,11.242233333333333,11.242616666666667,11.242600000000001,11.492333333333333,11.576833333333333,13.328966666666668,13.328766666666667,13.328949999999999,13.329,13.328916666666666,14.073416666666667,14.073366666666667,14.724016666666667,14.724583333333333,15.2545,21.17823333333333,50.52056666666667,93.26153333333333,92.7346,93.25813333333333,92.73556666666667,93.25865,93.26001666666667,93.2565,93.26235,93.26208333333334,92.73446666666666,92.73475,92.73778333333333,93.25898333333333,92.73698333333333,92.73586666666667,92.73656666666668,92.73436666666666,92.73705,124.25945,130.73526666666666,130.7382,130.73643333333334,130.73935,130.73813333333334,130.73676666666665,130.71208333333334,130.7405,130.73501666666667,130.73656666666668,130.7358,130.73363333333333,130.71176666666668,130.74063333333334,130.73486666666668,130.73226666666667,130.71205,130.73436666666666,130.7115,158.33691666666667],\"running_right\":[3.6582666666666666,4.06635,11.791783333333335,8.571666666666665,9.621733333333333,12.582833333333333,9.252083333333333,9.194866666666666,8.977366666666667,9.09055,8.723333333333333,12.260016666666667,8.551400000000001,12.485850000000001,8.516516666666666,12.03405,8.668883333333333,12.49415,9.197849999999999,12.103766666666667,12.220083333333333,12.048316666666667,9.14375,8.604899999999999,9.165216666666666,9.3413,14.851,14.595916666666666,14.829883333333333,14.78135,14.89555,15.411299999999999,14.696216666666666,14.914566666666667,15.356050000000002,15.32355,15.278599999999999,15.278433333333334,15.728983333333334,15.282316666666667,17.362183333333334,17.357266666666664,17.39355,17.362866666666665,17.464283333333334,17.412433333333336,17.541600000000003,16.705916666666667,16.68691666666667,17.0561,49.19815,86.69163333333334,112.65626666666667,118.26855,113.04833333333335,117.18083333333334,112.70983333333334,113.9503,112.1465,118.97883333333334,113.37276666666666,117.47744999999999,117.66245,117.56565,113.65318333333333,117.36498333333334,117.68881666666665,123.80185,116.71440000000001,117.59908333333333,125.53688333333332,145.01809999999998,145.84631666666667,145.6864,151.55445,145.86520000000002,145.39068333333336,135.28718333333333,145.78615,145.02833333333334,145.86463333333333,145.03245,145.68755000000002,135.31605,145.70196666666666,144.9929833333333,145.76738333333333,134.93471666666667,151.87463333333335,135.2468,161.77661666666665],\"text_x\":[4.158266666666667,4.56635,12.291783333333335,9.071666666666665,10.121733333333333,13.082833333333333,9.752083333333333,9.694866666666666,9.477366666666667,9.59055,9.223333333333333,12.760016666666667,9.051400000000001,12.985850000000001,9.016516666666666,12.53405,9.168883333333333,12.99415,9.697849999999999,12.603766666666667,12.720083333333333,12.548316666666667,9.64375,9.104899999999999,9.665216666666666,9.8413,15.351,15.095916666666666,15.329883333333333,15.28135,15.39555,15.911299999999999,15.196216666666666,15.414566666666667,15.856050000000002,15.82355,15.778599999999999,15.778433333333334,16.228983333333332,15.782316666666667,17.862183333333334,17.857266666666664,17.89355,17.862866666666665,17.964283333333334,17.912433333333336,18.041600000000003,17.205916666666667,17.18691666666667,17.5561,49.69815,87.19163333333334,113.15626666666667,118.76855,113.54833333333335,117.68083333333334,113.20983333333334,114.4503,112.6465,119.47883333333334,113.87276666666666,117.97744999999999,118.16245,118.06565,114.15318333333333,117.86498333333334,118.18881666666665,124.30185,117.21440000000001,118.09908333333333,126.03688333333332,145.51809999999998,146.34631666666667,146.1864,152.05445,146.36520000000002,145.89068333333336,135.78718333333333,146.28615,145.52833333333334,146.36463333333333,145.53245,146.18755000000002,135.81605,146.20196666666666,145.4929833333333,146.26738333333333,135.43471666666667,152.37463333333335,135.7468,162.27661666666665],\"y\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90]},\"selected\":{\"id\":\"1373\"},\"selection_policy\":{\"id\":\"1372\"}},\"id\":\"1327\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1346\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1350\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"task execution time (min)\",\"formatter\":{\"id\":\"1367\"},\"ticker\":{\"id\":\"1339\"}},\"id\":\"1338\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1531\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1488\"},{\"id\":\"1489\"},{\"id\":\"1490\"},{\"id\":\"1491\"},{\"id\":\"1492\"},{\"id\":\"1493\"}]},\"id\":\"1495\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1338\"},\"ticker\":null},\"id\":\"1341\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1351\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1336\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1513\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1334\",\"type\":\"LinearScale\"}],\"root_ids\":[\"1554\"]},\"title\":\"Bokeh Application\",\"version\":\"2.1.1\"}};\n", " var render_items = [{\"docid\":\"93be7b35-78a4-4e1d-af08-440b91913816\",\"root_ids\":[\"1554\"],\"roots\":{\"1554\":\"ad2b7143-cdb8-4a99-a88c-a62dfaf72cb6\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1554" } }, "output_type": "display_data" } ], "source": [ "info = {\n", " 'state': runlog['state'],\n", " 'runid': runlog['run_id'],\n", " 'context': {'engine': 'cromwell', 'launch_type': 'on-demand'}, \n", " 'workflow': {'name': 'gatk4-data-processing'}}\n", "plot2 = plot_tasks_bokeh2(runlog['task_logs'], info=info)\n", "html2 = save(plot2, filename=f\"{runlog_basename}__plot2.html\", title=runlog_basename, resources=CDN)\n", "png2 = export_png(plot2, filename=f\"{runlog_basename}__plot2.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note:** The input for the above workflow is a small dataset used for testing and demo purposes. The overall cost shown is not representative of a workflow processing a full 30x human whole genome sample." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 4 }