Bokeh plot so slowly

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

···

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

thanks for response. You are right, I will post all what I have soon. Hopefully the project performance could be improved.

···

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

I hope some guys could give a bright clue, here is my total source code.

runserver.py

from os import environ

from DataVisualizationWebApp import app, views

from threading import Thread

import socket

Thread(target=views.bk_worker).start()

if name == ‘main’:

app.run(port=8080)

``

view.py

“”"

Routes and views for the flask application.

“”"

from datetime import datetime

from DataVisualizationWebApp import bk_plotter as bk_plter

from DataVisualizationWebApp import bk_bar_stacked as bk_bar__stacked_plter

from DataVisualizationWebApp import importdata as dataLoader

from flask import Flask, render_template, request

from DataVisualizationWebApp import app

from flask import Flask, render_template

from bokeh.embed import server_document

from bokeh.layouts import column

from bokeh.models import ColumnDataSource, Slider

from bokeh.plotting import figure, curdoc

from bokeh.server.server import Server

from bokeh.themes import Theme

from tornado.ioloop import IOLoop

from bokeh.io import curdoc

from bokeh.sampledata.sea_surface_temperature import sea_surface_temperature

#paramater

@app.route(’/’, methods=[‘GET’])

def bkapp_page():

“”“Renders the home page.”""

script = server_document(‘http://localhost:5006/bkapp’)

return render_template(“embed.html”, script=script, template=“Flask”)

def bk_worker():

Can’t pass num_procs > 1 in this configuration. If you need to run multiple

processes, see e.g. flask_gunicorn_embed.py

server = Server({’/bkapp’: bk_plter.plot_doc}, io_loop=IOLoop(), allow_websocket_origin=[“localhost:8080”])

server.start()

server.io_loop.start()

``

bk_plotter.py

Create a polynomial line graph with those arguments

import flask

from bokeh.models import FactorRange, Spacer

from bokeh.embed import components

from bokeh.plotting import figure

from bokeh.resources import INLINE

from bokeh.util.string import encode_utf8

import pandas as pd

from bokeh.io import curdoc

from bokeh.layouts import row, column, gridplot

from bokeh.models import ColumnDataSource, TapTool, OpenURL, VBar, Rect

from bokeh.models.widgets import PreText, Select, CheckboxGroup

from bokeh.themes import Theme

from bokeh import events

from bokeh.events import MouseEnter, Event, MouseLeave, Tap

from bokeh.models.widgets import Button, Div

from DataVisualizationWebApp import importdata as dataLoader

from pandas import DataFrame

from bokeh.layouts import row, widgetbox

from bokeh.palettes import Spectral5

from bokeh.core.properties import value

from bokeh.io import show, output_file, output_notebook

from bokeh.layouts import layout

from bokeh.models import ColumnDataSource, VBar

from bokeh.plotting import figure

from bokeh.models import HoverTool, Range1d

from copy import deepcopy

from numpy import pi

from operator import add

from bokeh.models import Arrow, NormalHead, VeeHead, Text

from bokeh.models.callbacks import CustomJS

from bokeh.models.glyphs import Text, Line

selected_rig = ‘’

selected_job = ‘’

def plot_doc(doc):

from bokeh.sampledata.autompg import autompg_clean as df



all_connection_dict, novos_connection_dict = dataLoader.load_data()

all_connection_dict = {k.replace(' ', ''): v for k, v in all_connection_dict.items()}

novos_connection_dict = {k.replace(' ', ''): v for k, v in novos_connection_dict.items()}

all_connection_table = pd.DataFrame.from_dict(all_connection_dict)

novos_connection_table = pd.DataFrame.from_dict(novos_connection_dict)



#menu bar

# 1. data

rigs_list = all_connection_table['RigNumber'].unique().tolist()

jobs_list = all_connection_table['JobNumber'].unique().tolist()

crewshift_list = all_connection_table['CrewShift'].unique().tolist()

#crewshift_list.insert(0, ' ')



def nix(val, lst, columnName = ''):

    global selected_rig

    if val == '':

        return [x for x in lst]

    else:

        target = []

        target.append(val)

        target.append('')

        if columnName == 'JobNumber':

            selected_rig = val

            selected_rig_table = all_connection_table.query("RigNumber in @target")

            jobs_list = selected_rig_table[columnName].unique().tolist()

            return jobs_list

        elif columnName == 'CrewShift':

            selected_rig_table = all_connection_table.query("RigNumber in @selected_rig")

            selected_job_table = selected_rig_table.query("JobNumber in @target")

            crewShift_list = selected_job_table[columnName].unique().tolist()

            return crewShift_list



def rigs_combx_change(attrname, old, new):

    test_list = nix(new, jobs_list, 'JobNumber')

    jobs_combx.options = test_list

    if len(test_list) > 0:

        jobs_combx.value = test_list[0]

    else:

        jobs_combx.value = '0'

    

    rig_mainplot_data = {}

    rig_depth_list = []

    rig_mainplot_data, rig_depth_list = update()

    rig_depth_list = [str(x) for x in rig_depth_list]

    main_plot.x_range.factors = []

    main_plot.x_range.factors = rig_depth_list

    mainplot_source.data['VBarTop'] = []

    mainplot_source.data['VBarBottom'] = []

    mainplot_source.data['VBarColors'] = []

    mainplot_source.data['VBarType'] = []

    mainplot_source.data['HoleDepth'] = [item  if item in rig_depth_list else '-1' for item in mainplot_data_all['HoleDepth']]

    mainplot_source.data['VBarTop'] = updateSourceData('VBarTop', rig_mainplot_data, mainplot_source.data)      

    mainplot_source.data['VBarBottom'] = updateSourceData('VBarBottom', rig_mainplot_data, mainplot_source.data) 

    mainplot_source.data['VBarColors'] = updateSourceData('VBarColors', rig_mainplot_data, mainplot_source.data) 

    mainplot_source.data['VBarType'] = updateSourceData('VBarType', rig_mainplot_data, mainplot_source.data) 

    rig, job = new, jobs_combx.value

    global selected_rig

    global selected_job

    selected_rig = rig

    selected_job = job

    well_connection_colors, x, well_connnection_counts, well_connnection_data = update_well_selection_chart(all_connection_dict, rig, job)

    well_connnection_source.data['colors'] = well_connection_colors

    well_connnection_source.data['x'] = x

    well_connnection_source.data['counts'] = well_connnection_counts

    

    #20180620 start

    update_pie_charts()

    print ('############ Test #############')

    #20180620 end



def updateSourceData(in_mainplot_data_type, in_mainplot_data, in_all_data):

    in_mainplot_data_length = len(in_mainplot_data[in_mainplot_data_type])

    new_list = []

    i = 0

    for item in in_all_data['HoleDepth']: 

        if item != '-1':

            if i >= in_mainplot_data_length:

                if in_mainplot_data_type == 'VBarColors':

                    new_list.append('white')

                else:

                    new_list.append('0')

            else:  

                var = in_mainplot_data[in_mainplot_data_type][i]

                new_list.append(var)

                i = i + 1

        else:

            if in_mainplot_data_type == 'VBarColors':

                new_list.append('white')

            else:

                new_list.append('0')

    return new_list

def jobs_combx_change(attrname, old, new):

    crewshift_combx.options = nix(new, rigs_list, 'CrewShift')

    job_mainplot_data = {}

    job_depth_list = []

    job_mainplot_data, job_depth_list = update()

    job_depth_list = [str(x) for x in job_depth_list]

    main_plot.x_range.factors = [] 

    main_plot.x_range.factors = job_depth_list 

    mainplot_source.data['VBarTop'] = []

    mainplot_source.data['VBarBottom'] = []

    mainplot_source.data['VBarColors'] = []

    mainplot_source.data['VBarType'] = []

    

    mainplot_source.data['HoleDepth'] = [item  if item in job_depth_list else '-1' for item in mainplot_data_all['HoleDepth']]

    mainplot_source.data['VBarTop'] = updateSourceData('VBarTop', job_mainplot_data, mainplot_source.data)      

    mainplot_source.data['VBarBottom'] = updateSourceData('VBarBottom', job_mainplot_data, mainplot_source.data) 

    mainplot_source.data['VBarColors'] = updateSourceData('VBarColors', job_mainplot_data, mainplot_source.data) 

    mainplot_source.data['VBarType'] = updateSourceData('VBarType', job_mainplot_data, mainplot_source.data)  

    

    rig, job = rigs_combx.value, new

    global selected_rig

    global selected_job

    selected_rig = rig

    selected_job = job

    well_connection_colors, x, well_connnection_counts, well_connnection_data = update_well_selection_chart(all_connection_dict, rig, job)

    well_connnection_source.data['colors'] = well_connection_colors

    well_connnection_source.data['x'] = x

    well_connnection_source.data['counts'] = well_connnection_counts

    

    #20180620 start

    update_pie_charts()

    print ('############ Test #############')

    #20180620 end

def crewshift_combx_change(attrname, old, new):

    pass

    #crewshift_combx.options = nix(new, rig_number_list, 'Crewshift')



  



def get_default_value(all_connection_dict, comboBx, selectedRig = '', selectedJob = ''):

    default_number = ''

    comboBx_list = []

    all_connection_table = pd.DataFrame.from_dict(all_connection_dict)

    if comboBx == 'Rigs':

        comboBx_list = all_connection_table['RigNumber'].unique().tolist()

    elif comboBx == 'Jobs':

        target = []

        target.append(selectedRig)

        target.append('')

        selected_rig_table = all_connection_table.query("RigNumber in @target")

        comboBx_list = selected_rig_table['JobNumber'].unique().tolist()

    elif comboBx == 'CrewShift':

        #TODO need to test

        selected_rig_table = all_connection_table.query("RigNumber in @selectedRig")

        selected_job_table = selected_rig_table.query("JobNumber in @selectedJob")

        comboBx_list = selected_job_table['CrewShift'].unique().tolist()

        comboBx_list.insert(0, ' ')

    # maybe need logic to handle no records in table. it is 0

    if len(comboBx_list) >= 1:

        default_number = comboBx_list[0]

    return default_number, comboBx_list



default_rig_number, rigs_list = get_default_value(all_connection_dict, comboBx = 'Rigs',)

rigs_combx = Select(title='Rigs:', value=default_rig_number, width=120, options=nix('', rigs_list))

rigs_combx.on_change('value', rigs_combx_change)



default_job_number, jobs_list = get_default_value(all_connection_dict, comboBx = 'Jobs', selectedRig = rigs_combx.value)

jobs_combx = Select(title='Jobs:', value=default_job_number, width=120, options=nix('', jobs_list))

jobs_combx.on_change('value', jobs_combx_change)

default_crew, crewshift_list = get_default_value(all_connection_dict, comboBx = 'CrewShift', selectedRig = rigs_combx.value, selectedJob = jobs_combx.value)

crewshift_combx = Select(title='CrewShift:', value=default_crew, width=120, options=nix('', crewshift_list))

crewshift_combx.on_change('value', crewshift_combx_change)

#size.on_change('value', update)



global selected_rig

selected_rig = rigs_combx.value

global selected_job

selected_job = jobs_combx.value

# 2. checkbox group

checkbox_group_1 = CheckboxGroup( 

labels=["Build", "Lateral", "Vertical"], active=[], name = 'wellSelection')

checkbox_group_2 = CheckboxGroup( 

labels=["Driller", "Novos", "Hybrid"], active=[], name = 'connectionType')



checkbox_group_3 = CheckboxGroup( 

labels=["B2S", "S2S", "S2B", "Survey", "BackReam"], active=[], name = 'connectionPhase')



# 3. plot     

subplot = figure(x_range = [0, 50], y_range = [0, 30], plot_width=100, plot_height=50, toolbar_location=None, sizing_mode='scale_both')

subplot_height = 50

subplot_weight = 190

#controls = row(children=[rigs_combx, jobs_combx, crewshift_combx], sizing_mode='scale_width')

#row_1 = row(controls, sizing_mode='scale_width')

#controls = widgetbox([x, y, color, size], width=200)



def update_well_selection_chart(all_connection_dict, rig = -1, job = -1):

    #TODO:

    #create a function to get selected jobs table

    #need logic to handle rig == -1 and job == -1

    all_connection_table = {}

    all_connection_table = pd.DataFrame.from_dict(all_connection_dict)

    rig_target = []

    rig_target.append(rig)

    rig_target.append('')

    selected_rig_table = all_connection_table.query("RigNumber in @rig_target")

    job_target = []

    job_target.append(job)

    job_target.append('')

    selected_job_table = selected_rig_table.query("JobNumber in @job_target")

    #1st chart

    build_table = selected_job_table.query('WellSection in ["Build",]')

    build_count = build_table.groupby('ConnectionType').size().to_dict()

    vertical_table = selected_job_table.query('WellSection in ["Vertical",]')

    vertical_count = vertical_table.groupby('ConnectionType').size().to_dict()

    lateral_table = selected_job_table.query('WellSection in ["Lateral",]')

    lateral_count = lateral_table.groupby('ConnectionType').size().to_dict()

    drilling_connection_by_well_selection = {"Build" : build_count, "Vertical" : vertical_count, "Lateral" : lateral_count }

    well_selection_list = ["Vertical", "Build", "Lateral"]

    collection_type_keys_list = list(build_count.keys())



    well_connnection_data = {'well_selection': well_selection_list,

                   'Driller' : [vertical_count['Driller'], build_count['Driller'], lateral_count['Driller']],

                   'Hybrid'  : [vertical_count['Hybrid'], build_count['Hybrid'], lateral_count['Hybrid']],

                   'Novos'   : [vertical_count['Novos'], build_count['Novos'], lateral_count['Novos']],

                   }

    x = [ (well_selection, collection_type) for  well_selection in well_selection_list for collection_type in collection_type_keys_list]

    counts = sum(zip(well_connnection_data['Driller'], well_connnection_data['Hybrid'], well_connnection_data['Novos']), ())

   

    m_colors = ["blue", "red", "yellow", "green", "orange"]

    def generate_well_selectin_colors(m_colors ,in_well_connnection_data):

        colors_list = []

        driller_list = in_well_connnection_data['Driller']

        driller_list_length = len(driller_list)

        for item in in_well_connnection_data['well_selection']:

            colors_list += m_colors[:driller_list_length]

        return colors_list



    #well_connection_colors = ["blue" for item in well_connnection_data['Driller']] + ["red" for item in well_connnection_data['Hybrid']] + ["yellow" for item in well_connnection_data['Novos']] 

    well_connection_colors = generate_well_selectin_colors(m_colors, well_connnection_data)

    return well_connection_colors, x, counts, well_connnection_data

rig, job = rigs_combx.value, jobs_combx.value

well_connection_colors, x, well_connnection_counts, well_connnection_data = update_well_selection_chart(all_connection_dict, rig, job)

well_connnection_source = ColumnDataSource(data=dict(colors=well_connection_colors, x = x, counts=well_connnection_counts))

well_connection_chart = figure(x_range=FactorRange(*x), plot_width = 600, plot_height=600, sizing_mode='scale_both', title="Drilling Connection Breakdown By Well Section",)

well_connection_chart.vbar(x='x', width=0.1, bottom=0, top='counts', color='colors', source=well_connnection_source)

well_connection_chart.title.align = 'center'

well_connection_chart.toolbar.active_drag = None

well_connection_chart.toolbar.logo = None

well_connection_chart.toolbar_location = None

well_connection_chart.y_range.start = 0

well_connection_chart.x_range.range_padding = 0.1

well_connection_chart.xaxis.major_label_orientation = 1

well_connection_chart.xgrid.grid_line_color = None

well_connection_chart.min_border_left = 0

well_connection_chart.min_border_right = 0

well_connection_chart.min_border_top = 0

well_connection_chart.min_border_bottom = 0

for well_item in well_connnection_data['well_selection']:

    for sub_item in well_connnection_data['Driller']:

        well_connection_chart.add_tools(HoverTool(tooltips=[(str(well_item), "@counts")]))

#need to test

def update_pie_charts():

    selected_job_table = get_novos_job_table()

    update_offBottom_pie_chart(selected_job_table)

    update_clearBit_pie_chart(selected_job_table)

    update_setWeight_pie_chart(selected_job_table)

    update_setBoxHeight_pie_chart(selected_job_table)

    update_unWeightBit_pie_chart(selected_job_table)

    update_cleanHole_pie_chart(selected_job_table)

    update_addStand_pie_chart(selected_job_table)

    update_takeWeight_pie_chart(selected_job_table)

    update_flowSetpoint_pie_chart(selected_job_table)

    update_rotateDrill_pie_chart(selected_job_table)

    update_tagBottom_pie_chart(selected_job_table)

def update_offBottom_pie_chart(selected_job_table):

    offBottom_table = selected_job_table.query('ConnectionPhase in ["B2S",]').query('Type in ["OffBottom",]').query('Status in ["Canceled", "Completed"]')

    offBottom_pie_dict = offBottom_table.groupby('Status').size().to_dict()

    offBottom_pie_legend = list(offBottom_pie_dict.keys())

    starts, ends = calculate_percentage(offBottom_pie_dict)

    offbottom_pie_source.data['start_angle'] = starts

    offbottom_pie_source.data['end_angle'] = ends

    offbottom_pie_source.data['legend'] = offBottom_pie_legend



def update_clearBit_pie_chart(selected_job_table):

    clearBit_table = selected_job_table.query('ConnectionPhase in ["B2S",]').query('Type in ["ClearBit",]').query('Status in ["Canceled", "Completed"]')

    clearBit_pie_dict = clearBit_table.groupby('Status').size().to_dict()

    clearBit_pie_legend = list(clearBit_pie_dict.keys())

    starts, ends = calculate_percentage(clearBit_pie_dict)

    clearBit_pie_source.data['start_angle'] = starts

    clearBit_pie_source.data['end_angle'] = ends

    clearBit_pie_source.data['legend'] = clearBit_pie_legend

def update_setWeight_pie_chart(selected_job_table):

    setWeight_table = selected_job_table.query('ConnectionPhase in ["B2S",]').query('Type in ["SetWeight",]').query('Status in ["Canceled", "Completed", "Failed"]')

    setWeight_pie_dict = setWeight_table.groupby('Status').size().to_dict()

    setWeight_pie_legend = list(setWeight_pie_dict.keys())

    starts, ends = calculate_percentage(setWeight_pie_dict)

    setWeight_pie_source.data['start_angle'] = starts

    setWeight_pie_source.data['end_angle'] = ends

    setWeight_pie_source.data['legend'] = setWeight_pie_legend

def update_setBoxHeight_pie_chart(selected_job_table):

    setBoxHeight_table = selected_job_table.query('ConnectionPhase in ["B2S",]').query('Type in ["SetBoxHeight",]').query('Status in ["Canceled", "Completed"]')

    setBoxHeight_pie_dict = setBoxHeight_table.groupby('Status').size().to_dict()

    setBoxHeight_pie_legend = list(setBoxHeight_pie_dict.keys())

    starts, ends = calculate_percentage(setBoxHeight_pie_dict)

    setBoxHeight_pie_source.data['start_angle'] = starts

    setBoxHeight_pie_source.data['end_angle'] = ends

    setBoxHeight_pie_source.data['legend'] = setBoxHeight_pie_legend

def update_unWeightBit_pie_chart(selected_job_table):

    unWeightBit_table = selected_job_table.query('ConnectionPhase in ["B2S",]').query('Type in ["SetBoxHeight",]').query('Status in ["Canceled", "Completed"]')

    unWeightBit_pie_dict = unWeightBit_table.groupby('Status').size().to_dict()

    unWeightBit_pie_legend = list(unWeightBit_pie_dict.keys())

    starts, ends = calculate_percentage(unWeightBit_pie_dict)

    unWeightBit_pie_source.data['start_angle'] = starts

    unWeightBit_pie_source.data['end_angle'] = ends

    unWeightBit_pie_source.data['legend'] = unWeightBit_pie_legend

def update_cleanHole_pie_chart(selected_job_table):

    cleanHole_table = selected_job_table.query('ConnectionPhase in ["B2S",]').query('Type in ["CleanHole",]').query('Status in ["Canceled", "Completed"]')

    cleanHole_pie_dict = cleanHole_table.groupby('Status').size().to_dict()

    cleanHole_pie_legend = list(cleanHole_pie_dict.keys())

    starts, ends = calculate_percentage(cleanHole_pie_dict)

    cleanHole_pie_source.data['start_angle'] = starts

    cleanHole_pie_source.data['end_angle'] = ends

    cleanHole_pie_source.data['legend'] = cleanHole_pie_legend

def update_addStand_pie_chart(selected_job_table):

    addStand_table = selected_job_table.query('ConnectionPhase in ["S2B",]').query('Type in ["AddStand",]').query('Status in ["Canceled", "Completed", "Failed"]')

    addStand_pie_dict = addStand_table.groupby('Status').size().to_dict()

    addStand_pie_legend = list(addStand_pie_dict.keys())

    starts, ends = calculate_percentage(addStand_pie_dict)

    addStand_pie_source.data['start_angle'] = starts

    addStand_pie_source.data['end_angle'] = ends

    addStand_pie_source.data['legend'] = addStand_pie_legend

def update_takeWeight_pie_chart(selected_job_table):

    takeWeight_table = selected_job_table.query('ConnectionPhase in ["S2B",]').query('Type in ["TakeWeight",]').query('Status in ["Canceled", "Completed", "Failed"]')

    takeWeight_pie_dict = takeWeight_table.groupby('Status').size().to_dict()

    takeWeight_pie_legend = list(takeWeight_pie_dict.keys())

    starts, ends = calculate_percentage(takeWeight_pie_dict)

    takeWeight_pie_source.data['start_angle'] = starts

    takeWeight_pie_source.data['end_angle'] = ends

    takeWeight_pie_source.data['legend'] = takeWeight_pie_legend

def update_flowSetpoint_pie_chart(selected_job_table):

    flowSetpoint_table = selected_job_table.query('ConnectionPhase in ["S2B",]').query('Type in ["FlowSetpoint",]').query('Status in ["Canceled", "Failed"]')

    flowSetpoint_pie_dict = flowSetpoint_table.groupby('Status').size().to_dict()

    flowSetpoint_pie_legend = list(flowSetpoint_pie_dict.keys())

    starts, ends = calculate_percentage(flowSetpoint_pie_dict)

    flowSetpoint_pie_source.data['start_angle'] = starts

    flowSetpoint_pie_source.data['end_angle'] = ends

    flowSetpoint_pie_source.data['legend'] = flowSetpoint_pie_legend

def update_rotateDrill_pie_chart(selected_job_table):

    rotateDrill_table = selected_job_table.query('ConnectionPhase in ["S2B",]').query('Type in ["RotateDrill",]').query('Status in ["Canceled", "Completed", "Failed"]')

    rotateDrill_pie_dict = rotateDrill_table.groupby('Status').size().to_dict()

    rotateDrill_pie_legend = list(rotateDrill_pie_dict.keys())

    starts, ends = calculate_percentage(rotateDrill_pie_dict)

    rotateDrill_pie_source.data['start_angle'] = starts

    rotateDrill_pie_source.data['end_angle'] = ends

    rotateDrill_pie_source.data['legend'] = rotateDrill_pie_legend

def update_tagBottom_pie_chart(selected_job_table):

    tagBottom_table = selected_job_table.query('ConnectionPhase in ["S2B",]').query('Type in ["TagBottom",]').query('Status in ["Canceled", "Completed", "Failed"]')

    tagBottom_pie_dict = tagBottom_table.groupby('Status').size().to_dict()

    tagBottom_pie_legend = list(tagBottom_pie_dict.keys())

    starts, ends = calculate_percentage(tagBottom_pie_dict)

    tagBottom_pie_source.data['start_angle'] = starts

    tagBottom_pie_source.data['end_angle'] = ends

    tagBottom_pie_source.data['legend'] = tagBottom_pie_legend

def calculate_percentage(in_dict):

    in_list = in_dict.values()

    total = sum(in_list)

    percents = [value * 1. / total for value in in_list]

    percents = [0.0] + percents

    percents[-1] = 1.0

    starts = [p*2*pi for p in percents[:-1]]

    ends = [p*2*pi for p in percents[1:]]

    return starts, ends 

# 2nd pie chart

# data

#TODO: rename it to get_job_table

# could be a function 

def get_novos_job_table():

    global selected_rig

    global selected_job

    rig = selected_rig

    job = selected_job

    rig_target = []

    rig_target.append(rig)

    rig_target.append('')

    selected_rig_table = novos_connection_table.query("RigNumber in @rig_target")

    job_target = []

    job_target.append(job)

    job_target.append('')

    selected_job_table = selected_rig_table.query("JobNumber in @job_target")

    return selected_job_table

selected_rig_table = get_novos_job_table()

offBottom_table = selected_rig_table.query('ConnectionPhase in ["B2S",]').query('Type in ["OffBottom",]').query('Status in ["Canceled", "Completed"]')

offBottom_pie_dict = offBottom_table.groupby('Status').size().to_dict()

offBottom_pie_legend = list(offBottom_pie_dict.keys())

starts, ends = calculate_percentage(offBottom_pie_dict)

pie_colors = ["red", "green", "blue", "orange", "yellow"]

offbottom_pie_colors = ["red", "green"]

offbottom_pie_source = ColumnDataSource(data=dict(colors=offbottom_pie_colors, start_angle = starts, end_angle=ends, legend=offBottom_pie_legend))

# pie offbottom

offbottom_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Off Bottom")

#for i in range(len(starts)): 

#    offbottom_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=offBottom_pie_legend[i])

offbottom_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source=offbottom_pie_source)

offbottom_pie.title.align = 'center'

offbottom_pie.xaxis.visible = None

offbottom_pie.yaxis.visible = None

offbottom_pie.toolbar.active_drag = None

offbottom_pie.toolbar.logo = None

offbottom_pie.toolbar_location = None

offbottom_pie.min_border_left = 0

offbottom_pie.min_border_right = 0

offbottom_pie.min_border_top = 0

offbottom_pie.min_border_bottom = 0

offbottom_pie.legend.location = "center_right"

offbottom_pie.legend.label_text_font_size = '6pt'

offbottom_pie.legend.glyph_height = 10

offbottom_pie.legend.glyph_width = 10

offbottom_pie.legend.background_fill_alpha = 0

offbottom_pie.legend.border_line_alpha = 0

offbottom_pie.legend.padding = 0

offbottom_pie.legend.spacing = 1 



# pie clearbit

clearBit_table = selected_rig_table.query('ConnectionPhase in ["B2S",]').query('Type in ["ClearBit",]').query('Status in ["Canceled", "Completed"]')

clearBit_pie_dict = clearBit_table.groupby('Status').size().to_dict()

clearBit_pie_legend = list(clearBit_pie_dict.keys())

starts, ends = calculate_percentage(clearBit_pie_dict)

clearBit_pie_colors = ["red", "green"]

clearBit_pie_source = ColumnDataSource(data=dict(colors=clearBit_pie_colors, start_angle = starts, end_angle=ends, legend=clearBit_pie_legend))

clearBit_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="clear Bit")

#for i in range(len(starts)): 

#    clearBit_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=clearBit_pie_legend[i])

clearBit_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle = 'start_angle', end_angle = 'end_angle', color = 'colors', legend = 'legend',  source = clearBit_pie_source)

clearBit_pie.title.align = 'center'

clearBit_pie.xaxis.visible = None

clearBit_pie.yaxis.visible = None

clearBit_pie.toolbar.active_drag = None

clearBit_pie.toolbar.logo = None

clearBit_pie.toolbar_location = None

clearBit_pie.min_border_left = 0

clearBit_pie.min_border_right = 0

clearBit_pie.min_border_top = 0

clearBit_pie.min_border_bottom = 0

clearBit_pie.legend.location = "center_right"

clearBit_pie.legend.label_text_font_size = '6pt'

clearBit_pie.legend.glyph_height = 10

clearBit_pie.legend.glyph_width = 10

clearBit_pie.legend.background_fill_alpha = 0

clearBit_pie.legend.border_line_alpha = 0

clearBit_pie.legend.padding = 0

clearBit_pie.legend.spacing = 1 



# pie setWeight

setWeight_table = selected_rig_table.query('ConnectionPhase in ["B2S",]').query('Type in ["SetWeight",]').query('Status in ["Canceled", "Completed", "Failed"]')

setWeight_pie_dict = setWeight_table.groupby('Status').size().to_dict()

setWeight_pie_legend = list(setWeight_pie_dict.keys())

starts, ends = calculate_percentage(setWeight_pie_dict)

setWeight_pie_colors = ["red", "green", "blue"]

setWeight_pie_source = ColumnDataSource(data=dict(colors=setWeight_pie_colors, start_angle = starts, end_angle=ends, legend=setWeight_pie_legend))

setWeight_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Set Weight")

#for i in range(len(starts)): 

#    setWeight_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=setWeight_pie_legend[i])

setWeight_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source=setWeight_pie_source)

setWeight_pie.title.align = 'center'

setWeight_pie.xaxis.visible = None

setWeight_pie.yaxis.visible = None

setWeight_pie.toolbar.active_drag = None

setWeight_pie.toolbar.logo = None

setWeight_pie.toolbar_location = None

setWeight_pie.min_border_left = 0

setWeight_pie.min_border_right = 0

setWeight_pie.min_border_top = 0

setWeight_pie.min_border_bottom = 0

setWeight_pie.legend.location = "center_right"

setWeight_pie.legend.label_text_font_size = '6pt'

setWeight_pie.legend.glyph_height = 10

setWeight_pie.legend.glyph_width = 10

setWeight_pie.legend.background_fill_alpha = 0

setWeight_pie.legend.border_line_alpha = 0

setWeight_pie.legend.padding = 0

setWeight_pie.legend.spacing = 1 

 # pie setBoxHeight

setBoxHeight_table = selected_rig_table.query('ConnectionPhase in ["B2S",]').query('Type in ["SetBoxHeight",]').query('Status in ["Canceled", "Completed"]')

setBoxHeight_pie_dict = setBoxHeight_table.groupby('Status').size().to_dict()

setBoxHeight_pie_legend = list(setBoxHeight_pie_dict.keys())

starts, ends = calculate_percentage(setBoxHeight_pie_dict)

setBoxHeight_pie_colors = ["red", "green"]

setBoxHeight_pie_source = ColumnDataSource(data=dict(colors = setBoxHeight_pie_colors, start_angle = starts, end_angle=ends, legend = setBoxHeight_pie_legend))

setBoxHeight_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Set Box Height")

#for i in range(len(starts)): 

#    setBoxHeight_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=setBoxHeight_pie_legend[i])

setBoxHeight_pie.wedge(x=-0.25 , y=0, radius=.5,  start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = setBoxHeight_pie_source)

setBoxHeight_pie.title.align = 'center'

setBoxHeight_pie.xaxis.visible = None

setBoxHeight_pie.yaxis.visible = None

setBoxHeight_pie.toolbar.active_drag = None

setBoxHeight_pie.toolbar.logo = None

setBoxHeight_pie.toolbar_location = None

setBoxHeight_pie.min_border_left = 0

setBoxHeight_pie.min_border_right = 0

setBoxHeight_pie.min_border_top = 0

setBoxHeight_pie.min_border_bottom = 0

setBoxHeight_pie.legend.location = "center_right"

setBoxHeight_pie.legend.label_text_font_size = '6pt'

setBoxHeight_pie.legend.glyph_height = 10

setBoxHeight_pie.legend.glyph_width = 10

setBoxHeight_pie.legend.background_fill_alpha = 0

setBoxHeight_pie.legend.border_line_alpha = 0

setBoxHeight_pie.legend.padding = 0

setBoxHeight_pie.legend.spacing = 1 



# pie unWeightBit

unWeightBit_table = selected_rig_table.query('ConnectionPhase in ["B2S",]').query('Type in ["SetBoxHeight",]').query('Status in ["Canceled", "Completed"]')

unWeightBit_pie_dict = unWeightBit_table.groupby('Status').size().to_dict()

unWeightBit_pie_legend = list(unWeightBit_pie_dict.keys())

starts, ends = calculate_percentage(unWeightBit_pie_dict)

unWeightBit_pie_colors = ["red", "green"]

unWeightBit_pie_source = ColumnDataSource(data=dict(colors=unWeightBit_pie_colors, start_angle = starts, end_angle=ends, legend=unWeightBit_pie_legend))

unWeightBit_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="UnWeight Bit")

#for i in range(len(starts)): 

#    unWeightBit_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=unWeightBit_pie_legend[i])

unWeightBit_pie.wedge(x=-0.25 , y=0, radius=.5,  start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = unWeightBit_pie_source)

unWeightBit_pie.title.align = 'center'

unWeightBit_pie.xaxis.visible = None

unWeightBit_pie.yaxis.visible = None

unWeightBit_pie.toolbar.active_drag = None

unWeightBit_pie.toolbar.logo = None

unWeightBit_pie.toolbar_location = None

unWeightBit_pie.min_border_left = 0

unWeightBit_pie.min_border_right = 0

unWeightBit_pie.min_border_top = 0

unWeightBit_pie.min_border_bottom = 0

unWeightBit_pie.legend.location = "center_right"

unWeightBit_pie.legend.label_text_font_size = '6pt'

unWeightBit_pie.legend.glyph_height = 10

unWeightBit_pie.legend.glyph_width = 10

unWeightBit_pie.legend.background_fill_alpha = 0

unWeightBit_pie.legend.border_line_alpha = 0

unWeightBit_pie.legend.padding = 0

unWeightBit_pie.legend.spacing = 1 



# pie cleanHole

cleanHole_table = selected_rig_table.query('ConnectionPhase in ["B2S",]').query('Type in ["CleanHole",]').query('Status in ["Canceled", "Completed"]')

cleanHole_pie_dict = cleanHole_table.groupby('Status').size().to_dict()

cleanHole_pie_legend = list(cleanHole_pie_dict.keys())

starts, ends = calculate_percentage(cleanHole_pie_dict)

cleanHole_pie_colors = ["red", "green"]

cleanHole_pie_source = ColumnDataSource(data=dict(colors=cleanHole_pie_colors, start_angle = starts, end_angle=ends, legend=cleanHole_pie_legend))

cleanHole_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Clean Hole")

#for i in range(len(starts)): 

#    cleanHole_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=cleanHole_pie_legend[i])

cleanHole_pie.wedge(x=-0.25 , y=0, radius=.5,  start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source=cleanHole_pie_source)

cleanHole_pie.title.align = 'center'

cleanHole_pie.xaxis.visible = None

cleanHole_pie.yaxis.visible = None

cleanHole_pie.toolbar.active_drag = None

cleanHole_pie.toolbar.logo = None

cleanHole_pie.toolbar_location = None

cleanHole_pie.min_border_left = 0

cleanHole_pie.min_border_right = 0

cleanHole_pie.min_border_top = 0

cleanHole_pie.min_border_bottom = 0

cleanHole_pie.legend.location = "center_right"

cleanHole_pie.legend.label_text_font_size = '6pt'

cleanHole_pie.legend.glyph_height = 10

cleanHole_pie.legend.glyph_width = 10

cleanHole_pie.legend.background_fill_alpha = 0

cleanHole_pie.legend.border_line_alpha = 0

cleanHole_pie.legend.padding = 0

cleanHole_pie.legend.spacing = 1 



novos_connection_b2s_layout = gridplot([[offbottom_pie, clearBit_pie], 

                                        [setWeight_pie, setBoxHeight_pie], 

                                        [unWeightBit_pie, cleanHole_pie]], 

                                        plot_width=200, plot_height=200, 

                                        title="haha", toolbar_location = None)

# pie addStand

addStand_table = selected_rig_table.query('ConnectionPhase in ["S2B",]').query('Type in ["AddStand",]').query('Status in ["Canceled", "Completed", "Failed"]')

addStand_pie_dict = addStand_table.groupby('Status').size().to_dict()

addStand_pie_legend = list(addStand_pie_dict.keys())

starts, ends = calculate_percentage(addStand_pie_dict)

addStand_pie_colors = ["red", "green", "blue"]

addStand_pie_source = ColumnDataSource(data = dict(colors = addStand_pie_colors, start_angle = starts, end_angle = ends, legend = addStand_pie_legend))

addStand_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Add Stand")

#for i in range(len(starts)): 

#    addStand_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=addStand_pie_legend[i])

addStand_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = addStand_pie_source)

addStand_pie.title.align = 'center'

addStand_pie.xaxis.visible = None

addStand_pie.yaxis.visible = None

addStand_pie.toolbar.logo = None

addStand_pie.toolbar_location = None

addStand_pie.min_border_left = 0

addStand_pie.min_border_right = 0

addStand_pie.min_border_top = 0

addStand_pie.min_border_bottom = 0

addStand_pie.legend.location = "center_right"

addStand_pie.legend.label_text_font_size = '6pt'

addStand_pie.legend.glyph_height = 10

addStand_pie.legend.glyph_width = 10

addStand_pie.legend.background_fill_alpha = 0

addStand_pie.legend.border_line_alpha = 0

addStand_pie.legend.padding = 0

addStand_pie.legend.spacing = 1 



# pie takeWeight

takeWeight_table = selected_rig_table.query('ConnectionPhase in ["S2B",]').query('Type in ["TakeWeight",]').query('Status in ["Canceled", "Completed", "Failed"]')

takeWeight_pie_dict = takeWeight_table.groupby('Status').size().to_dict()

takeWeight_pie_legend = list(takeWeight_pie_dict.keys())

starts, ends = calculate_percentage(takeWeight_pie_dict)

takeWeight_pie_colors = ["red", "green", "blue"]

takeWeight_pie_source = ColumnDataSource(data = dict(colors = takeWeight_pie_colors, start_angle = starts, end_angle = ends, legend = takeWeight_pie_legend))



takeWeight_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Take Weight")

#for i in range(len(starts)): 

#    takeWeight_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=takeWeight_pie_legend[i])

takeWeight_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = takeWeight_pie_source)

takeWeight_pie.title.align = 'center'

takeWeight_pie.xaxis.visible = None

takeWeight_pie.yaxis.visible = None

takeWeight_pie.toolbar.logo = None

takeWeight_pie.toolbar_location = None

takeWeight_pie.min_border_left = 0

takeWeight_pie.min_border_right = 0

takeWeight_pie.min_border_top = 0

takeWeight_pie.min_border_bottom = 0

takeWeight_pie.legend.location = "center_right"

takeWeight_pie.legend.label_text_font_size = '6pt'

takeWeight_pie.legend.glyph_height = 10

takeWeight_pie.legend.glyph_width = 10

takeWeight_pie.legend.background_fill_alpha = 0

takeWeight_pie.legend.border_line_alpha = 0

takeWeight_pie.legend.padding = 0

takeWeight_pie.legend.spacing = 1 



# pie flowSetpoint

flowSetpoint_table = selected_rig_table.query('ConnectionPhase in ["S2B",]').query('Type in ["FlowSetpoint",]').query('Status in ["Canceled", "Failed"]')

flowSetpoint_pie_dict = flowSetpoint_table.groupby('Status').size().to_dict()

flowSetpoint_pie_legend = list(flowSetpoint_pie_dict.keys())

starts, ends = calculate_percentage(flowSetpoint_pie_dict)

flowSetpoint_pie_colors = ["red", "green"]

flowSetpoint_pie_source = ColumnDataSource(data = dict(colors = flowSetpoint_pie_colors, start_angle = starts, end_angle = ends, legend = flowSetpoint_pie_legend))

flowSetpoint_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Flow Setpoint")

#for i in range(len(starts)): 

#    flowSetpoint_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=flowSetpoint_pie_legend[i])

flowSetpoint_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = flowSetpoint_pie_source)

flowSetpoint_pie.title.align = 'center'

flowSetpoint_pie.xaxis.visible = None

flowSetpoint_pie.yaxis.visible = None

flowSetpoint_pie.toolbar.logo = None

flowSetpoint_pie.toolbar_location = None

flowSetpoint_pie.min_border_left = 0

flowSetpoint_pie.min_border_right = 0

flowSetpoint_pie.min_border_top = 0

flowSetpoint_pie.min_border_bottom = 0

flowSetpoint_pie.legend.location = "center_right"

flowSetpoint_pie.legend.label_text_font_size = '6pt'

flowSetpoint_pie.legend.glyph_height = 10

flowSetpoint_pie.legend.glyph_width = 10

flowSetpoint_pie.legend.background_fill_alpha = 0

flowSetpoint_pie.legend.border_line_alpha = 0

flowSetpoint_pie.legend.padding = 0

flowSetpoint_pie.legend.spacing = 1 
···
#########################

# pie rotateDrill

rotateDrill_table = selected_rig_table.query('ConnectionPhase in ["S2B",]').query('Type in ["RotateDrill",]').query('Status in ["Canceled", "Completed", "Failed"]')

rotateDrill_pie_dict = rotateDrill_table.groupby('Status').size().to_dict()

rotateDrill_pie_legend = list(rotateDrill_pie_dict.keys())

starts, ends = calculate_percentage(rotateDrill_pie_dict)

rotateDrill_pie_colors = ["red", "green", "blue"]

rotateDrill_pie_source = ColumnDataSource(data = dict(colors = rotateDrill_pie_colors, start_angle = starts, end_angle = ends, legend = rotateDrill_pie_legend))

rotateDrill_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Rotate Drill")

#for i in range(len(starts)): 

#    rotateDrill_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=rotateDrill_pie_legend[i])

rotateDrill_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = rotateDrill_pie_source)

rotateDrill_pie.title.align = 'center'

rotateDrill_pie.xaxis.visible = None

rotateDrill_pie.yaxis.visible = None

rotateDrill_pie.toolbar.logo = None

rotateDrill_pie.toolbar_location = None

rotateDrill_pie.min_border_left = 0

rotateDrill_pie.min_border_right = 0

rotateDrill_pie.min_border_top = 0

rotateDrill_pie.min_border_bottom = 0

rotateDrill_pie.legend.location = "center_right"

rotateDrill_pie.legend.label_text_font_size = '6pt'

rotateDrill_pie.legend.glyph_height = 10

rotateDrill_pie.legend.glyph_width = 10

rotateDrill_pie.legend.background_fill_alpha = 0

rotateDrill_pie.legend.border_line_alpha = 0

rotateDrill_pie.legend.padding = 0

rotateDrill_pie.legend.spacing = 1 



#########################

# pie tagBottom

tagBottom_table = selected_rig_table.query('ConnectionPhase in ["S2B",]').query('Type in ["TagBottom",]').query('Status in ["Canceled", "Completed", "Failed"]')

tagBottom_pie_dict = tagBottom_table.groupby('Status').size().to_dict()

tagBottom_pie_legend = list(tagBottom_pie_dict.keys())

starts, ends = calculate_percentage(tagBottom_pie_dict)

tagBottom_pie_colors = ["red", "green", "blue"]

tagBottom_pie_source = ColumnDataSource(data = dict(colors = tagBottom_pie_colors, start_angle = starts, end_angle = ends, legend = tagBottom_pie_legend))

tagBottom_pie = figure(x_range=(-0.9, 1), y_range=(-0.6, 0.6),  plot_width = 200, plot_height = 180, title="Tag Bottom")

#for i in range(len(starts)): 

#    tagBottom_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle=starts[i], end_angle=ends[i], color=pie_colors[i], legend=tagBottom_pie_legend[i])

tagBottom_pie.wedge(x=-0.25 , y=0, radius=.5, start_angle='start_angle', end_angle='end_angle', color='colors', legend='legend',  source = tagBottom_pie_source)

tagBottom_pie.title.align = 'center'

tagBottom_pie.xaxis.visible = None

tagBottom_pie.yaxis.visible = None

tagBottom_pie.toolbar.logo = None

tagBottom_pie.toolbar_location = None

tagBottom_pie.min_border_left = 0

tagBottom_pie.min_border_right = 0

tagBottom_pie.min_border_top = 0

tagBottom_pie.min_border_bottom = 0

tagBottom_pie.legend.location = "center_right"

tagBottom_pie.legend.label_text_font_size = '6pt'

tagBottom_pie.legend.glyph_height = 10

tagBottom_pie.legend.glyph_width = 10

tagBottom_pie.legend.background_fill_alpha = 0

tagBottom_pie.legend.border_line_alpha = 0

tagBottom_pie.legend.padding = 0

tagBottom_pie.legend.spacing = 1 

novos_connection_s2b_layout = gridplot([[addStand_pie, takeWeight_pie], 

                                        [flowSetpoint_pie, rotateDrill_pie],

                                        [tagBottom_pie,]], 

                                        plot_width=200, plot_height=200, 

                                        title="haha", toolbar_location = None)



m_b2s_title = Div(text='Bottom to Slips', width = 400,  height=15, style={'font-size': '100%', "text-align":"center", "font-weight": "bold"})

novos_b2s_column = column(children=[m_b2s_title, novos_connection_b2s_layout]) 

m_s2b_title = Div(text='Slips to Bottom', width = 400, height=15, style={'font-size': '100%', "text-align":"center", "font-weight": "bold"})

novos_s2b_column = column(children=[m_s2b_title, novos_connection_s2b_layout]) 

line_figure = figure(x_range=(0, 5), y_range=(0, 600),  plot_width = 30, plot_height = 600)

line_figure.line(x=[1, 1], y= [0, 600], line_width = 3, line_color='black')

line_figure.xaxis.visible = None

line_figure.yaxis.visible = None

line_figure.toolbar.logo = None

line_figure.toolbar_location = None

line_figure.toolbar.active_drag = None

line_figure.min_border_left = 0

line_figure.min_border_right = 0

line_figure.min_border_top = 0

line_figure.min_border_bottom = 0

summary_layout = layout(row(well_connection_chart, novos_b2s_column, line_figure, novos_s2b_column))   



def get_data(all_connection_dict, rig = -1, job = -1):

    all_connection_table = {}

    all_connection_table = pd.DataFrame.from_dict(all_connection_dict)

    

    depth_list = []

    b2s_list = []

    s2s_list = []

    s2b_list = []

    survey_list = []

    ream_list = []

    b2s_s2s_list = []

    b2s_s2s_s2b_list = []

    b2s_s2s_s2b_survey_list = []

    b2s_s2s_s2b__survey_ream_list = []

    if(( rig == -1) or (job == -1)):

        depth_list = list(map(float, all_connection_table['HoleDepth']))

        depth_list.sort(key=float)

        b2s_list = list(map(float, all_connection_table['PreSlipTime(min)']))

        s2s_list = list(map(float, all_connection_table['SlipToSlip(min)']))

        s2b_list = list(map(float, all_connection_table['PostSlipTime(min)']))

        survey_list = list(map(float, all_connection_table['SurveyTime']))

        ream_list = list(map(float, all_connection_table['BackReamTime']))

    else:

        rig_target = []

        rig_target.append(rig)

        rig_target.append('')

        selected_rig_table = all_connection_table.query("RigNumber in @rig_target")

        job_target = []

        job_target.append(job)

        job_target.append('')

        selected_job_table = selected_rig_table.query("JobNumber in @job_target")

        depth_list = list(map(float, selected_job_table['HoleDepth']))

        depth_list.sort(key=float)

        b2s_list = list(map(float, selected_job_table['PreSlipTime(min)']))

        s2s_list = list(map(float, selected_job_table['SlipToSlip(min)']))

        s2b_list = list(map(float, selected_job_table['PostSlipTime(min)']))

        survey_list = list(map(float, all_connection_table['SurveyTime']))

        ream_list = list(map(float, all_connection_table['BackReamTime']))

    b2s_s2s_list = list(map(add, b2s_list, s2s_list))

    b2s_s2s_s2b_list = list(map(add, b2s_s2s_list, s2b_list))

    b2s_s2s_s2b_survey_list = list(map(add, b2s_s2s_s2b_list, survey_list))

    b2s_s2s_s2b__survey_ream_list = list(map(add, b2s_s2s_s2b_survey_list, ream_list))

    

    # could be a function

    rig_job_dict = {}

    rig_job_dict['VBarTop'] = []

    rig_job_dict['VBarBottom'] = []

    rig_job_dict['VBarColors'] = []

    rig_job_dict['VBarType'] = []

    rig_job_dict['HoleDepth'] = depth_list + depth_list + depth_list + depth_list + depth_list

    rig_job_dict['VBarTop'] = b2s_list + b2s_s2s_list + b2s_s2s_s2b_list + b2s_s2s_s2b_survey_list + b2s_s2s_s2b__survey_ream_list

    rig_job_dict['VBarBottom'] = [ 0 for item in b2s_list] + b2s_list  + b2s_s2s_list + b2s_s2s_s2b_list + b2s_s2s_s2b_survey_list

    rig_job_dict['VBarColors'] = [ "blue" for item in b2s_list] \

                                    +  [ "red" for item in b2s_s2s_list] \

                                    +  [ "yellow" for item in b2s_s2s_s2b_list] \

                                    +  [ "green" for item in b2s_s2s_s2b_survey_list]\

                                    +  [ "orange" for item in b2s_s2s_s2b__survey_ream_list]

    rig_job_dict['VBarType'] =  ['B2S' for item in b2s_s2s_s2b_list] \

                                   + ['S2S' for item in b2s_s2s_s2b_list] \

                                   + ['S2B' for item in b2s_s2s_s2b_list] \

                                   + ['Survey' for item in b2s_s2s_s2b_list] \

                                   + ['Ream' for item in b2s_s2s_s2b_list] 

    

    return rig_job_dict, depth_list 



def update(selected = None):

    rig_job_dict = {}

    depth_list = []

    if selected != None:

        rig_job_dict, depth_list = get_data(all_connection_dict)

    else:

        rig, job = rigs_combx.value, jobs_combx.value

        rig_job_dict, depth_list = get_data(all_connection_dict, rig, job)

    return rig_job_dict, depth_list

#replace 0 with the previous depth value

def remove_empty_depth(in_dict):

    out_dict = {}

    out_dict.update([(key, in_dict[key]) for key in in_dict.keys() if ((in_dict['Depth'] != ''))])

    return out_dict

novos_connection_dict_without_emptydepth = remove_empty_depth(novos_connection_dict)

novos_source = ColumnDataSource(data=novos_connection_dict_without_emptydepth)



mainplot_data_all, depth_list_all = update("all")

depth_list_all = [str(x) for x in depth_list_all]

main_plot = figure(output_backend="webgl", x_range=FactorRange(), y_range = (0, 40), plot_height=150, tools = "tap, pan, box_zoom, box_select, wheel_zoom, reset", sizing_mode='scale_width', title="Overall Connection Times")

main_plot.title.align = 'center'

main_plot.legend.location = "top_left"

main_plot.legend.click_policy="hide"

main_plot.x_range.factors = []

main_plot.x_range.factors = depth_list_all

mainplot_data_all['HoleDepth'] = [str(x) for x in mainplot_data_all['HoleDepth']]

mainplot_source = ColumnDataSource(data=dict(HoleDepth = mainplot_data_all['HoleDepth'], 

                                             VBarTop = mainplot_data_all['VBarTop'], 

                                             VBarBottom = mainplot_data_all['VBarBottom'], 

                                             VBarColors = mainplot_data_all['VBarColors'], 

                                             VBarType = mainplot_data_all['VBarType'])) 

main_plot.vbar(x='HoleDepth', width=0.1, bottom='VBarBottom', top='VBarTop', color='VBarColors', source=mainplot_source, legend='VBarColors')

#20180622 start

def merge(a, b, path=None):

    "merges b into a"

    if path is None: path = []

    for key in b:

        if key in a:

            if isinstance(a[key], dict) and isinstance(b[key], dict):

                merge(a[key], b[key], path + [str(key)])

            elif a[key] == b[key]:

                pass # same leaf value

            else:

                raise Exception('Conflict at %s' % '.'.join(path + [str(key)]))

        else:

            a[key] = b[key]

    return a

def update_checkBx_groups_dict(checkbox_group_1_selections = [],

                     checkbox_group_2_selections = []):

    #1. get jobs table

    all_connection_table = {}

    all_connection_table = pd.DataFrame.from_dict(all_connection_dict)

    

    global selected_rig

    global selected_job

    rig = selected_rig

    job = selected_job

    

    rig_target = []

    rig_target.append(rig)

    rig_target.append('')

    selected_rig_table = all_connection_table.query("RigNumber in @rig_target")

    job_target = []

    job_target.append(job)

    job_target.append('')

    selected_job_table = selected_rig_table.query("JobNumber in @job_target")

    #2. generate a table based on selections from 3 groups

    main_plot_group1_dict = {}

    group_1_table = selected_job_table

    if not checkbox_group_1_selections:

        main_plot_group1_dict = group_1_table.query('WellSection in ["Build", "Vertical", "Lateral"]').to_dict('dict')

    else:

        for selected in checkbox_group_1_selections:

            if selected == 'Build':

                build_dict={}

                build_dict = group_1_table.query('WellSection in ["Build",]').to_dict('dict')

                #to merge multiple dicts with same key

                if not bool(main_plot_group1_dict):

                    main_plot_group1_dict = build_dict

                else:

                    #main_plot_group1_dict = {i:list(j) for i in build_dict.keys() for j in zip(build_dict.values(),main_plot_group1_dict.values())}

                    main_plot_group1_dict = merge(main_plot_group1_dict, build_dict)

                #main_plot_group1_dict = {i:list(j) for i in build_dict.keys() for j in zip(build_dict.values(),main_plot_group1_dict.values())}

                

                print(len(main_plot_group1_dict['WellSection']))

                print(len(main_plot_group1_dict['WellSection']))

            elif selected == 'Vertical':

                vertical_dict={}

                vertical_dict = group_1_table.query('WellSection in ["Vertical",]').to_dict('dict')

                if not bool(main_plot_group1_dict):

                    main_plot_group1_dict = vertical_dict

                else:

                    #main_plot_group1_dict = {i:list(j) for i in vertical_dict.keys() for j in zip(vertical_dict.values(),main_plot_group1_dict.values())}

                    main_plot_group1_dict = merge(main_plot_group1_dict, vertical_dict)

                print(len(main_plot_group1_dict['WellSection']))

                print(len(main_plot_group1_dict['WellSection']))

                #main_plot_dict.update(group_1_table.query('WellSection in ["Vertical",]'))

            elif selected == "Lateral":

                lateral_dict={}

                lateral_dict = group_1_table.query('WellSection in ["Lateral",]').to_dict('dict')

                if not bool(main_plot_group1_dict):

                    main_plot_group1_dict = lateral_dict

                else:

                    #main_plot_group1_dict = {i:list(j) for i in lateral_dict.keys() for j in zip(lateral_dict.values(),main_plot_group1_dict.values())}

                    main_plot_group1_dict = merge(main_plot_group1_dict, lateral_dict)

                print(len(main_plot_group1_dict['WellSection']))

                print(len(main_plot_group1_dict['WellSection']))

                #main_plot_dict.update(group_1_table.query('WellSection in ["Lateral",]'))

    

    main_plot_group2_dict = {}

    group_2_table = pd.DataFrame.from_dict(main_plot_group1_dict)

    if not checkbox_group_2_selections:

        main_plot_group2_dict = group_2_table.query('ConnectionType in ["Driller", "Hybrid", "Novos"]').to_dict('dict')

    else:

        for selected in checkbox_group_2_selections:

            if selected == 'Driller':

                driller_dict = {}

                driller_dict = group_2_table.query('ConnectionType in ["Driller",]').to_dict('dict')

                if not bool(main_plot_group2_dict):

                    main_plot_group2_dict = driller_dict

                else:

                    main_plot_group2_dict = merge(main_plot_group2_dict, driller_dict)

                

                print(len(main_plot_group2_dict['ConnectionType']))

                print(len(main_plot_group2_dict['ConnectionType']))

            elif selected == 'Hybrid':

                hybrid_dict = {}

                hybrid_dict = group_2_table.query('ConnectionType in ["Hybrid",]').to_dict('dict')

                if not bool(main_plot_group2_dict):

                    main_plot_group2_dict = hybrid_dict

                else:

                    main_plot_group2_dict = merge(main_plot_group2_dict, hybrid_dict)

                print(len(main_plot_group2_dict['ConnectionType']))

                print(len(main_plot_group2_dict['ConnectionType']))

                #main_plot_dict.update(group_2_table.query('ConnectionType in ["Hybrid",]'))

            elif selected == "Novos":

                novos_dict = {}

                novos_dict = group_2_table.query('ConnectionType in ["Novos",]').to_dict('dict')

                if not bool(main_plot_group2_dict):

                    main_plot_group2_dict = novos_dict

                else:

                    main_plot_group2_dict = merge(main_plot_group2_dict, novos_dict)

                

                print(len(main_plot_group2_dict['ConnectionType']))

                print(len(main_plot_group2_dict['ConnectionType']))

                #main_plot_dict.update(group_2_table.query('ConnectionType in ["Novos",]'))

    return main_plot_group2_dict   

def update_main_plot_dict(in_main_plot_dict, checkbox_group_3_selections = []):

    "update main dict"

    wellSel_connType_groups_table = pd.DataFrame.from_dict(in_main_plot_dict)

    

    depth_list = []

    b2s_list = []

    s2s_list = []

    s2b_list = []

    survey_list = []

    ream_list = []

    b2s_s2s_list = []

    b2s_s2s_s2b_list = []

    b2s_s2s_s2b_survey_list = []

    b2s_s2s_s2b__survey_ream_list = []

    

    depth_list = list(map(float, wellSel_connType_groups_table['HoleDepth']))

    b2s_list = list(map(float, wellSel_connType_groups_table['PreSlipTime(min)']))

    s2s_list = list(map(float, wellSel_connType_groups_table['SlipToSlip(min)']))

    s2b_list = list(map(float, wellSel_connType_groups_table['PostSlipTime(min)']))

    survey_list = list(map(float, wellSel_connType_groups_table['SurveyTime']))

    ream_list = list(map(float, wellSel_connType_groups_table['BackReamTime']))

    

    # could be a function

    main_plot_dict = {}

    main_plot_dict['VBarTop'] = []

    main_plot_dict['VBarBottom'] = []

    main_plot_dict['VBarColors'] = []

    main_plot_dict['VBarType'] = []

    main_plot_dict['HoleDepth'] = []

    

    main_plot_list = []

    main_plot_depth_list = [] 

    main_plot_top_list = []

    main_plot_bottom_list = []

    main_plot_color_list = []

    main_plot_type_list = []

    if not checkbox_group_3_selections:

        b2s_s2s_list = list(map(add, b2s_list, s2s_list))

        b2s_s2s_s2b_list = list(map(add, b2s_s2s_list, s2b_list))

        b2s_s2s_s2b_survey_list = list(map(add, b2s_s2s_s2b_list, survey_list))

        b2s_s2s_s2b__survey_ream_list = list(map(add, b2s_s2s_s2b_survey_list, ream_list))

        main_plot_depth_list = depth_list + depth_list + depth_list + depth_list + depth_list

        main_plot_top_list = b2s_list + b2s_s2s_list + b2s_s2s_s2b_list + b2s_s2s_s2b_survey_list + b2s_s2s_s2b__survey_ream_list

        main_plot_bottom_list = [ 0 for item in b2s_list] + b2s_list + b2s_s2s_list + b2s_s2s_s2b_list + b2s_s2s_s2b_survey_list

        main_plot_color_list = [ "blue" for item in b2s_list] \

                                    +  [ "red" for item in b2s_s2s_list] \

                                    +  [ "yellow" for item in b2s_s2s_s2b_list] \

                                    +  [ "green" for item in b2s_s2s_s2b_survey_list]\

                                    +  [ "orange" for item in b2s_s2s_s2b__survey_ream_list]

        main_plot_type_list = ['B2S' for item in b2s_list] \

                                   + ['S2S' for item in s2s_list] \

                                   + ['S2B' for item in s2b_list] \

                                   + ['Survey' for item in survey_list] \

                                   + ['Ream' for item in ream_list] 

    else:

        for selected in checkbox_group_3_selections:

            if selected == 'B2S':

                main_plot_depth_list = main_plot_depth_list + depth_list

                main_plot_list = main_plot_list + b2s_list

                main_plot_type_list = main_plot_type_list + ['B2S' for item in b2s_list] 

                main_plot_color_list = main_plot_color_list  + [ "blue" for item in b2s_list]

            elif selected == 'S2S':

                main_plot_depth_list = main_plot_depth_list + depth_list

                main_plot_list = main_plot_list + s2s_list

                main_plot_type_list = main_plot_type_list + ['S2S' for item in s2s_list] 

                main_plot_color_list = main_plot_color_list  + [ "red" for item in s2s_list]

            elif selected == "S2B":

                main_plot_depth_list = main_plot_depth_list + depth_list

                main_plot_list = main_plot_list + s2b_list

                main_plot_type_list = main_plot_type_list + ['S2B' for item in s2b_list] 

                main_plot_color_list = main_plot_color_list  + [ "yellow" for item in s2b_list]

            elif selected == "Survey":

                main_plot_depth_list = main_plot_depth_list + depth_list

                main_plot_list = main_plot_list + survey_list

                main_plot_type_list = main_plot_type_list + ['Survey' for item in survey_list] 

                main_plot_color_list = main_plot_color_list  + [ "green" for item in survey_list]

            elif selected == "BackReam":

                main_plot_depth_list = main_plot_depth_list + depth_list

                main_plot_list = main_plot_list + ream_list

                main_plot_type_list = main_plot_type_list + ['BackReam' for item in ream_list] 

                main_plot_color_list = main_plot_color_list  + [ "orange" for item in ream_list]

        

        # generate top&bottom values  

        section_length = len(depth_list)

        main_plot_top_list = main_plot_list

        connectionPhase_selections = int(len(main_plot_list) / len(depth_list))

        for i in range(0, connectionPhase_selections):

            if i > 0 :

                prev_section_head = (i - 1) * section_length

                current_section_head = i * section_length

                temp_list = [(main_plot_top_list[prev_section_head + k] + main_plot_list[current_section_head + k]) for k in range(0, section_length)]

                main_plot_top_list = main_plot_top_list + temp_list

            else:

                main_plot_top_list = [main_plot_list[k] for k in range(0, section_length)]

                

        bottom_list_slice_upbound = (connectionPhase_selections - 1) * section_length

        main_plot_bottom_list = [ 0 for k in range(0, section_length)]

        if (connectionPhase_selections - 1) > 0:

            main_plot_bottom_list = main_plot_bottom_list + main_plot_top_list[:bottom_list_slice_upbound]

        else:

            main_plot_bottom_list = main_plot_bottom_list

        print("check the length of slice")

        print(len(main_plot_top_list))

        print(len(main_plot_bottom_list))

    main_plot_dict['HoleDepth'] = main_plot_depth_list

    main_plot_dict['VBarTop'] = main_plot_top_list

    main_plot_dict['VBarBottom'] = main_plot_bottom_list

    main_plot_dict['VBarColors'] = main_plot_color_list

    main_plot_dict['VBarType'] = main_plot_type_list

    

    return main_plot_dict, depth_list 



def update_main_plot_source(mainplot_data, depth_list):     

    def update_holeDepth_list(mainplot_data, mainplot_data_all ):

        mainplot_data_length = len(mainplot_data['HoleDepth'])

        mainplot_data_all_length = len(mainplot_data_all['HoleDepth'])

        mainplot_data_holeDepth_list = []

        

        i = 0

        for item in mainplot_data_all['HoleDepth']:

            if item in depth_list:

                if i >= mainplot_data_length:

                    mainplot_data_holeDepth_list.append('-1')

                else:

                    mainplot_data_holeDepth_list.append(item)

                i = i + 1

            else:

               mainplot_data_holeDepth_list.append('-1')

        return mainplot_data_holeDepth_list

     

    mainplot_source.data['HoleDepth'] = update_holeDepth_list(mainplot_data, mainplot_data_all)

    mainplot_source.data['VBarTop'] = updateSourceData('VBarTop', mainplot_data, mainplot_source.data)      

    mainplot_source.data['VBarBottom'] = updateSourceData('VBarBottom', mainplot_data, mainplot_source.data) 

    mainplot_source.data['VBarColors'] = updateSourceData('VBarColors', mainplot_data, mainplot_source.data) 

    mainplot_source.data['VBarType'] = updateSourceData('VBarType', mainplot_data, mainplot_source.data) 

    

def update_main_plot(main_plot, from_comboBx_group = False):

    main_plot_dict = {}

    depth_list = []

    checkbox_group_1_selections = []

    checkbox_group_2_selections = []

    checkbox_group_3_selections = []

    if from_comboBx_group == True:

        checkbox_group_1_selections = [checkbox_group_1.labels[i] for i in 

                        checkbox_group_1.active]

        checkbox_group_2_selections = [checkbox_group_2.labels[i] for i in 

                        checkbox_group_2.active]

        checkbox_group_3_selections = [checkbox_group_3.labels[i] for i in 

                        checkbox_group_3.active]

        main_plot_dict = update_checkBx_groups_dict(checkbox_group_1_selections,

                         checkbox_group_2_selections)

        main_plot_dict, depth_list = update_main_plot_dict(main_plot_dict, checkbox_group_3_selections)

    else:

        main_plot_dict = update_checkBx_groups_dict()

        main_plot_dict, depth_list = update_main_plot_dict(main_plot_dict)

    

    depth_list = [str(x) for x in depth_list]

    update_main_plot_source(main_plot_dict, depth_list)

    main_plot.x_range.factors = []

    main_plot.x_range.factors = depth_list

def checkbox_callback_1(attr, old, new):

    update_main_plot(main_plot, True)

    

def checkbox_callback_2(attr, old, new):

    update_main_plot(main_plot, True)

    

def checkbox_callback_3(attr, old, new):

    update_main_plot(main_plot, True)

    

checkbox_group_1.on_change('active', checkbox_callback_1)

checkbox_group_2.on_change('active', checkbox_callback_2)

checkbox_group_3.on_change('active', checkbox_callback_3)

#20180622 End



update_main_plot(main_plot)

main_plot.toolbar.logo = None 

taptool = main_plot.select(type=TapTool)



#subplot

subplot_dict = {}

subplot_dict['B2SText'] = ['Cleanhole - Active', 'Cleanhole - Completed', 'Setboxheight - Active', 'Setboxheight - Completed', 'Setweight - Active', 'Setweight - Completed', 'Offbottom-Active', 'Unweightbit - Active', 'Unweightbit - Completed', 'Clearbit - Active', 'Clearbit - Completed', 'Offbottom - Completed']

subplot_dict['text_x'] = [4, 12, 20, 28, 36, 44, 4, 12, 20, 28, 36, 44]

subplot_dict['B2SColors'] = ['white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white']

subplot_dict['B2STextColors'] = ['black', 'black', 'black', 'black', 'black', 'black', 'black', 'black', 'black', 'black', 'black', 'black']

subplot_dict['B2SHideColors'] = ['white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white', 'white']

subplot_dict['subplot_x'] = [7, 15, 23, 31, 39, 47,7, 15, 23, 31, 39, 47]

subplot_dict['subplot_y'] = [20, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 25]

subplot_dict['B2SArrowColors'] = ['#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0', '#ebebe0']

subplot_dict['ArrowStartX'] = [10, 18, 26, 34, 42, 42, 10, 18, 26, 34, 42, 42]

subplot_dict['ArrowEndX'] = [12, 20, 28, 36, 44, 44, 12, 20, 28, 36, 44, 44]

subplot_dict['ArrowY'] = [20, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 25]

subplot_dict['arrow_end_y'] = [20, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 25]

subplot_dict['Text'] = ['', '', '', '','', '', '', '','', '', '', '']

subplot_source = ColumnDataSource(data=subplot_dict)



subplot.rect(x='subplot_x', y='subplot_y', width=subplot_weight, height=subplot_height, color="B2SColors",

      width_units="screen", height_units="screen", source=subplot_source)

b2s_text = Text(x='text_x', y='subplot_y', text_color="B2STextColors", text="Text", )

subplot.add_glyph(subplot_source, b2s_text)



subplot.xaxis.visible = None

subplot.yaxis.visible = None

subplot.background_fill_color = "white"

m_color_white = subplot.background_fill_color

subplot.outline_line_color = None



#show or hide

code = """

console.log('@@@@@@@@@@@@@@@@@@@ click vbar index here @@@@@@@@@@@@@@@@@@@@@@@@@@@@')



"""

subplot_colors_length = len(subplot_dict['B2SColors'])

novos_length = len(novos_connection_dict['Depth'])

taptool.callback = CustomJS(args=dict(allSource=mainplot_source, novosSource=novos_source, subplotSource=subplot_source, subplotColorsLength=subplot_colors_length, novosLength=novos_length,subplot=subplot),code=code)



hide_subplot_callback = CustomJS(args=dict(m_color=m_color_white, subplot=subplot, subplotColorsLength=subplot_colors_length, subplotSource=subplot_source), code="""

for(i = 0; i < subplotColorsLength; i++) {

   subplotSource.data['B2SColors'][i] = 'white' 

   subplotSource.data['B2STextColors'][i] = 'white' 

}

subplotSource.change.emit()

subplot.background_fill_color = 'white' 

""")

main_plot.js_on_event(events.DoubleTap, hide_subplot_callback)

# layout

m_well_selection = Div(text='Well Selection:', height=1)

m_well_connection = Div(text='Connection Type:', height=1)

m_well_conn_phase = Div(text='Connection Phase:', height=1)

spacer_1 = Spacer(width=300, height=100)

spacer_2 = Spacer(width=300, height=100)

menu_column_1_layout = column(rigs_combx, m_well_selection,checkbox_group_1)

menu_column_2_layout = column(jobs_combx, m_well_connection, checkbox_group_2)

menu_column_3_layout = column(crewshift_combx, m_well_conn_phase, checkbox_group_3)



menu_layout = layout(row(menu_column_1_layout, spacer_1, menu_column_2_layout, spacer_2, menu_column_3_layout))





main_layout = column(children=[menu_layout, summary_layout, main_plot, subplot], sizing_mode='scale_width')

doc.add_root(main_layout)

doc.theme = Theme(filename="theme.yaml")   

``

embed.html

<!doctype html>

Embedding a Bokeh Server With {{ framework }}

{{ script|safe }}

``

ALL_Connection.csv

Hole Depth,Connection Type,Stand Length,Start Date and Time (EDR),Stop Date and Time (EDR),Hole Depth,Weight to Weight Time (min),All_Pre Slip Time (min),Slip To Slip (min),All_Post Slip Time (min),Rig Number,Job Number,Rig-Job,Include,Rotate/Slide,cut off Hook Load,Operator Name,WellSection,SurveyTime,BackReamTime,Pre Slip Time (min),Post Slip Time (min),CrewShift,W2W

152.46,Driller,94.26, 2018-02-17 21:30:09, 2018-02-17 21:37:29,152.46,7.33333,0.166667,4,3.16667,566,94,566-94,YES,Slide,53.62,Anadarko Petroleum,Vertical,0.00,0.00,0.17,3.17,Driller2,7.33333

249.76,Driller,98.53, 2018-02-17 22:28:49, 2018-02-17 22:45:49,249.76,17,1.5,5.66667,9.83333,566,94,566-94,YES,Rotate,48.48,Anadarko Petroleum,Vertical,0.00,0.00,1.50,9.83,Driller2,17

310.65,Driller,99.21, 2018-02-17 23:19:19, 2018-02-17 23:29:59,310.65,10.6667,0.833333,6.16667,3.66667,566,94,566-94,YES,Rotate,55.94,Anadarko Petroleum,Vertical,0.00,0.00,0.83,3.67,Driller2,10.6667

400.56,Driller,100.71, 2018-02-17 23:42:09, 2018-02-18 00:09:39,400.56,27.5,0.666667,8,18.8333,566,94,566-94,NO,Rotate,54.84,Anadarko Petroleum,Vertical,0.00,0.00,0.67,18.83,Driller2,20

490.43,Driller,95.83, 2018-02-18 00:23:29, 2018-02-18 00:35:09,490.43,11.6667,0.833333,6.66667,4.16667,566,94,566-94,YES,Rotate,61.94,Anadarko Petroleum,Vertical,0.00,0.00,0.83,4.17,Driller1,11.6667

579.59,Driller,100.55, 2018-02-18 00:56:49, 2018-02-18 01:19:29,579.59,22.6667,0.666667,13.8333,8.16667,566,94,566-94,NO,Rotate,65.64,Anadarko Petroleum,Vertical,0.00,0.00,0.67,8.17,Driller1,20

670.46,Hybrid,97.41, 2018-02-18 01:33:39, 2018-02-18 01:42:59,670.46,9.33333,0.666667,3.5,5.16667,566,94,566-94,YES,Rotate,60.48,Anadarko Petroleum,Vertical,0.00,0.00,0.67,5.17,Driller1,9.33333

760.56,Hybrid,95.4, 2018-02-18 01:57:49, 2018-02-18 02:05:39,760.56,7.83333,0.833333,3.66667,3.33333,566,94,566-94,YES,Rotate,60.98,Anadarko Petroleum,Vertical,0.00,0.00,0.83,3.33,Driller1,7.83333

853.3,Hybrid,97.42, 2018-02-18 02:20:29, 2018-02-18 02:26:09,853.3,5.66667,0.666667,3.66667,1.33333,566,94,566-94,YES,Rotate,63.02,Anadarko Petroleum,Vertical,0.00,0.00,0.67,1.33,Driller1,5.66667

946.94,Hybrid,97.23, 2018-02-18 02:40:19, 2018-02-18 02:48:59,946.94,8.66667,0.5,3.33333,4.83333,566,94,566-94,YES,Rotate,71.28,Anadarko Petroleum,Vertical,0.00,0.00,0.50,4.83,Driller1,8.66667

1040.16,Hybrid,94.68, 2018-02-18 03:00:59, 2018-02-18 03:08:19,1040.16,7.33333,0.5,3.33333,3.5,566,94,566-94,YES,Rotate,73.76,Anadarko Petroleum,Vertical,0.00,0.00,0.50,3.50,Driller1,7.33333

1129.76,Hybrid,92.71, 2018-02-18 03:24:39, 2018-02-18 03:50:09,1129.76,25.5,0.666667,2.16667,22.6667,566,94,566-94,YES,Rotate,70.24,Anadarko Petroleum,Vertical,0.00,0.00,0.67,22.67,Driller1,20

1217.25,Hybrid,94.81, 2018-02-18 04:20:39, 2018-02-18 04:30:29,1217.25,9.83333,1.5,3,5.33333,566,94,566-94,YES,Rotate,74.38,Anadarko Petroleum,Vertical,0.00,0.00,1.50,5.33,Driller1,9.83333

1307.46,Hybrid,95.78, 2018-02-18 04:50:29, 2018-02-18 04:57:19,1307.46,6.83333,0.5,4,2.33333,566,94,566-94,YES,Rotate,72.98,Anadarko Petroleum,Vertical,0.00,0.00,0.50,2.33,Driller1,6.83333

1397.29,Driller,93.03, 2018-02-18 05:12:39, 2018-02-18 05:23:39,1397.29,11,0.666667,6.83333,3.5,566,94,566-94,YES,Slide,74.3,Anadarko Petroleum,Vertical,0.00,0.00,0.67,3.50,Driller1,11

1487.25,Driller,93.87, 2018-02-18 06:02:09, 2018-02-18 06:06:39,1487.25,4.5,0.5,2.5,1.5,566,94,566-94,YES,Rotate,75.02,Anadarko Petroleum,Vertical,0.00,0.00,0.50,1.50,Driller1,4.5

1577.18,Hybrid,94.42, 2018-02-18 06:40:09, 2018-02-18 06:45:59,1577.18,5.83333,0.833333,2.66667,2.33333,566,94,566-94,YES,Rotate,70.48,Anadarko Petroleum,Vertical,0.00,0.00,0.83,2.33,Driller1,5.83333

1667.08,Hybrid,93.28, 2018-02-18 07:26:39, 2018-02-18 07:45:39,1667.08,19,0.666667,2,16.3333,566,94,566-94,YES,Rotate,75.2,Anadarko Petroleum,Vertical,0.00,0.00,0.67,16.33,Driller1,19

1754.69,Hybrid,95.85, 2018-02-18 08:12:29, 2018-02-18 08:17:29,1754.69,5,0.666667,2,2.33333,566,94,566-94,YES,Rotate,78.78,Anadarko Petroleum,Vertical,0.00,0.00,0.67,2.33,Driller1,5

1844.97,Hybrid,94.05, 2018-02-18 08:49:59, 2018-02-18 08:54:49,1844.97,4.83333,0.5,2.16667,2.16667,566,94,566-94,YES,Rotate,73.34,Anadarko Petroleum,Vertical,0.00,0.00,0.50,2.17,Driller1,4.83333

1935.61,Driller,94, 2018-02-18 09:29:39, 2018-02-18 09:35:29,1935.61,5.83333,0.666667,2,3.16667,566,94,566-94,YES,Rotate,79.46,Anadarko Petroleum,Vertical,0.00,0.00,0.67,3.17,Driller1,5.83333

2025.58,Hybrid,94.53, 2018-02-18 10:08:49, 2018-02-18 10:24:09,2025.58,15.3333,1,2,12.3333,566,94,566-94,YES,Rotate,77.2,Anadarko Petroleum,Vertical,0.00,0.00,1.00,12.33,Driller1,15.3333

2113.16,Driller,95.04, 2018-02-18 10:44:49, 2018-02-18 10:55:09,2113.16,10.3333,0.666667,2.16667,7.5,566,94,566-94,YES,Slide,79.42,Anadarko Petroleum,Vertical,0.00,0.00,0.67,7.50,Driller1,10.3333

2203.26,Hybrid,94.09, 2018-02-18 11:24:19, 2018-02-18 11:30:09,2203.26,5.83333,0.333333,1.66667,3.83333,566,94,566-94,YES,Rotate,77.04,Anadarko Petroleum,Vertical,2.65,0.00,0.33,1.18,Driller1,5.83333

2293.74,Hybrid,94.81, 2018-02-18 12:15:49, 2018-02-18 12:23:19,2293.74,7.5,0.666667,2.5,4.33333,566,94,566-94,YES,Rotate,80.74,Anadarko Petroleum,Vertical,3.15,0.00,0.67,1.18,Driller2,7.5

2383.96,Hybrid,94.96, 2018-02-18 12:47:29, 2018-02-18 12:51:49,2383.96,4.33333,0.5,2.33333,1.5,566,94,566-94,YES,Rotate,77.46,Anadarko Petroleum,Vertical,0.00,0.00,0.50,1.50,Driller2,4.33333

2474.45,Hybrid,93.76, 2018-02-18 13:25:29, 2018-02-18 13:30:49,2474.45,5.33333,0.333333,1.66667,3.33333,566,94,566-94,YES,Rotate,79.22,Anadarko Petroleum,Vertical,2.23,0.00,0.33,1.10,Driller2,5.33333

2564.8,Hybrid,95.02, 2018-02-18 13:58:29, 2018-02-18 14:03:49,2564.8,5.33333,0.5,1.83333,3,566,94,566-94,YES,Rotate,77.8,Anadarko Petroleum,Vertical,2.02,0.00,0.50,0.98,Driller2,5.33333

2650.64,Hybrid,94.3, 2018-02-18 14:49:09, 2018-02-18 14:54:29,2650.64,5.33333,0.5,2,2.83333,566,94,566-94,YES,Rotate,82.68,Anadarko Petroleum,Vertical,0.00,0.00,0.50,2.83,Driller2,5.33333

2740.9,Hybrid,94.89, 2018-02-18 15:21:59, 2018-02-18 15:36:49,2740.9,14.8333,9.83333,2.33333,2.66667,566,94,566-94,YES,Rotate,84.42,Anadarko Petroleum,Vertical,0.00,0.00,9.83,2.67,Driller2,14.8333

2831.13,Hybrid,91.79, 2018-02-18 16:01:19, 2018-02-18 16:06:29,2831.13,5.16667,0.333333,1.66667,3.16667,566,94,566-94,YES,Rotate,84.9,Anadarko Petroleum,Vertical,2.13,0.00,0.33,1.03,Driller2,5.16667

2921.44,Hybrid,93.96, 2018-02-18 16:30:49, 2018-02-18 16:36:19,2921.44,5.5,0.5,1.66667,3.33333,566,94,566-94,YES,Rotate,85.46,Anadarko Petroleum,Vertical,2.17,0.00,0.50,1.17,Driller2,5.5

3008.2,Hybrid,94.53, 2018-02-18 17:14:59, 2018-02-18 17:19:49,3008.2,4.83333,0.5,2,2.33333,566,94,566-94,YES,Rotate,75.09,Anadarko Petroleum,Vertical,1.25,0.00,0.50,1.08,Driller2,4.83333

3098.76,Driller,94.86, 2018-02-18 18:06:19, 2018-02-18 18:13:29,3098.76,7.16667,1,3,3.16667,566,94,566-94,YES,Rotate,71.35,Anadarko Petroleum,Vertical,0.00,0.00,1.00,3.17,Driller2,7.16667

3187.52,Hybrid,114.87, 2018-02-18 19:04:59, 2018-02-18 19:15:19,3187.52,10.3333,0.833333,6.33333,3.16667,566,94,566-94,YES,Rotate,72.67,Anadarko Petroleum,Vertical,1.87,0.00,0.83,1.30,Driller2,10.3333

3276.86,Hybrid,92.76, 2018-02-18 20:20:49, 2018-02-18 20:26:39,3276.86,5.83333,0.666667,2.16667,3,566,94,566-94,YES,Rotate,68.28,Anadarko Petroleum,Vertical,0.00,0.00,0.67,3.00,Driller2,5.83333

3367.21,Hybrid,92.3, 2018-02-18 21:06:09, 2018-02-18 21:12:29,3367.21,6.33333,0.666667,2,3.66667,566,94,566-94,YES,Rotate,76.56,Anadarko Petroleum,Vertical,0.00,0.00,0.67,3.67,Driller2,6.33333

3456.1,Driller,94.26, 2018-02-18 21:33:09, 2018-02-18 21:39:59,3456.1,6.83333,0.5,3,3.33333,566,94,566-94,YES,Rotate,74.67,Anadarko Petroleum,Vertical,0.00,0.00,0.50,3.33,Driller2,6.83333

3546.57,Hybrid,94.69, 2018-02-18 22:07:39, 2018-02-18 22:16:09,3546.57,8.5,0.5,2,6,566,94,566-94,YES,Rotate,71.96,Anadarko Petroleum,Vertical,0.00,0.00,0.50,6.00,Driller2,8.5

3636.68,Driller,93.95, 2018-02-18 22:55:59, 2018-02-18 23:22:19,3636.68,26.3333,0.5,3.33333,22.5,566,94,566-94,YES,Rotate,81.62,Anadarko Petroleum,Vertical,0.00,0.00,0.50,22.50,Driller2,20

3726.51,Hybrid,93.4, 2018-02-19 00:02:09, 2018-02-19 00:08:39,3726.51,6.5,1.5,2.5,2.5,566,94,566-94,YES,Rotate,75.91,Anadarko Petroleum,Vertical,0.00,0.00,1.50,2.50,Driller1,6.5

3814.62,Driller,93.75, 2018-02-19 00:54:49, 2018-02-19 01:00:29,3814.62,5.66667,0.5,2.33333,2.83333,566,94,566-94,YES,Rotate,74.11,Anadarko Petroleum,Vertical,0.00,0.00,0.50,2.83,Driller1,5.66667

3904.71,Driller,91.81, 2018-02-19 02:10:19, 2018-02-19 02:15:29,3904.71,5.16667,0.5,2.16667,2.5,566,94,566-94,YES,Rotate,77.98,Anadarko Petroleum,Vertical,0.00,0.00,0.50,2.50,Driller1,5.16667

3994.42,Hybrid,94.04, 2018-02-19 02:56:29, 2018-02-19 03:08:09,3994.42,11.6667,6.83333,2.33333,2.5,566,94,566-94,YES,Rotate,78.34,Anadarko Petroleum,Vertical,0.00,0.00,6.83,2.50,Driller1,11.6667

4084.34,Hybrid,93.64, 2018-02-19 04:11:09, 2018-02-19 04:16:19,4084.34,5.16667,0.666667,2.5,2,566,94,566-94,YES,Slide,77.42,Anadarko Petroleum,Vertical,0.00,0.00,0.67,2.00,Driller1,5.16667

4174.28,Hybrid,94.62, 2018-02-19 04:55:59, 2018-02-19 05:01:39,4174.28,5.66667,0.666667,2.16667,2.83333,566,94,566-94,YES,Rotate,78.03,Anadarko Petroleum,Vertical,0.00,0.00,0.67,2.83,Driller1,5.66667

4261.61,Hybrid,93.35, 2018-02-19 05:46:39, 2018-02-19 05:54:49,4261.61,8.16667,0.5,2.66667,5,566,94,566-94,YES,Rotate,83.32,Anadarko Petroleum,Vertical,0.00,0.00,0.50,5.00,Driller1,8.16667

4351.24,Hybrid,94.78, 2018-02-19 06:36:39, 2018-02-19 06:42:59,4351.24,6.33333,0.5,2.5,3.33333,566,94,566-94,YES,Rotate,73.75,Anadarko Petroleum,Vertical,2.18,0.00,0.50,1.15,Driller1,6.33333

4441.8,Hybrid,95.49, 2018-02-19 07:12:49, 2018-02-19 07:21:19,4441.8,8.5,0.833333,2.16667,5.5,566,94,566-94,YES,Rotate,81.89,Anadarko Petroleum,Vertical,4.15,0.00,0.83,1.35,Driller1,8.5

4531.77,Driller,49.54, 2018-02-19 08:09:19, 2018-02-19 08:14:49,4531.77,5.5,0.333333,2,3.16667,566,94,566-94,YES,Rotate,84.6,Anadarko Petroleum,Vertical,0.00,0.00,0.33,3.17,Driller1,5.5

4546.55,Driller,44.08, 2018-02-19 21:29:39, 2018-02-19 22:02:49,4546.55,33.1667,0.5,3.66667,29,566,94,566-94,YES,Slide,91.92,Anadarko Petroleum,Vertical,0.00,0.00,0.50,29.00,Driller2,20

4640.88,Driller,99.96, 2018-02-21 13:32:39, 2018-02-21 13:50:09,4640.88,17.5,3.5,1.83333,12.1667,566,94,566-94,YES,Slide,83.86,Anadarko Petroleum,Vertical,0.00,0.00,3.50,12.17,Driller2,17.5

4735.58,Hybrid,98.03, 2018-02-21 14:53:49, 2018-02-21 15:01:19,4735.58,7.5,1.16667,3.16667,3.16667,566,94,566-94,YES,Rotate,84.69,Anadarko Petroleum,Vertical,2.13,0.00,1.17,1.03,Driller2,7.5

4831.15,Hybrid,99.57, 2018-02-21 15:17:59, 2018-02-21 15:26:39,4831.15,8.66667,0.5,2.16667,6,566,94,566-94,YES,Rotate,87.55,Anadarko Petroleum,Vertical,4.72,0.00,0.50,1.28,Driller2,8.66667

4926.3,Hybrid,98.9, 2018-02-21 15:40:49, 2018-02-21 15:46:19,4926.3,5.5,0.5,1.83333,3.16667,566,94,566-94,YES,Rotate,84.74,Anadarko Petroleum,Vertical,1.97,0.00,0.50,1.20,Driller2,5.5

5019.18,Hybrid,98.86, 2018-02-21 16:01:09, 2018-02-21 16:08:29,5019.18,7.33333,0.833333,2.5,4,566,94,566-94,YES,Rotate,88.59,Anadarko Petroleum,Vertical,2.75,0.00,0.83,1.25,Driller2,7.33333

5114.68,Hybrid,99.42, 2018-02-21 16:21:59, 2018-02-21 16:30:29,5114.68,8.5,0.333333,1.83333,6.33333,566,94,566-94,YES,Rotate,86.49,Anadarko Petroleum,Vertical,4.63,0.00,0.33,1.70,Driller2,8.5

5210.1,Hybrid,97.39, 2018-02-21 16:42:29, 2018-02-21 16:47:39,5210.1,5.16667,0.5,1.66667,3,566,94,566-94,YES,Rotate,88.75,Anadarko Petroleum,Vertical,1.97,0.00,0.50,1.03,Driller2,5.16667

5302.89,Driller,101.92, 2018-02-21 17:04:19, 2018-02-21 17:16:09,5302.89,11.8333,0.333333,1.83333,9.66667,566,94,566-94,YES,Slide,84.53,Anadarko Petroleum,Vertical,0.00,0.00,0.33,9.67,Driller2,11.8333

5398.09,Hybrid,98.39, 2018-02-21 17:47:29, 2018-02-21 17:53:09,5398.09,5.66667,0.333333,2.33333,3,566,94,566-94,YES,Rotate,86.69,Anadarko Petroleum,Vertical,1.82,0.00,0.33,1.18,Driller2,5.66667

5493.53,Hybrid,100.14, 2018-02-21 18:05:09, 2018-02-21 18:09:59,5493.53,4.83333,0.666667,2.16667,2,566,94,566-94,YES,Rotate,80.71,Anadarko Petroleum,Vertical,0.97,0.00,0.67,1.03,Driller2,4.83333

5586.24,Hybrid,97.34, 2018-02-21 18:22:49, 2018-02-21 18:29:09,5586.24,6.33333,1.33333,2.33333,2.66667,566,94,566-94,YES,Rotate,84.84,Anadarko Petroleum,Vertical,1.53,0.00,1.33,1.13,Driller2,6.33333

5681.57,Novos,98.94, 2018-02-21 18:42:19, 2018-02-21 18:49:29,5681.57,7.16667,1,2.33333,3.83333,566,94,566-94,YES,Rotate,86.95,Anadarko Petroleum,Vertical,1.75,0.00,1.00,2.08,Driller2,7.16667

5776.77,Novos,99.92, 2018-02-21 19:27:39, 2018-02-21 19:34:49,5776.77,7.16667,1.33333,3,2.83333,566,94,566-94,YES,Rotate,85.25,Anadarko Petroleum,Vertical,1.70,0.00,1.33,1.13,Driller2,7.16667

5872.42,Novos,98.84, 2018-02-21 19:51:09, 2018-02-21 19:58:09,5872.42,7,1.33333,2.5,3.16667,566,94,566-94,YES,Rotate,80.92,Anadarko Petroleum,Vertical,1.85,0.00,1.33,1.32,Driller2,7

5964.27,Novos,98.46, 2018-02-21 20:11:39, 2018-02-21 20:17:59,5964.27,6.33333,1.33333,2.33333,2.66667,566,94,566-94,YES,Rotate,86.14,Anadarko Petroleum,Vertical,1.47,0.00,1.33,1.20,Driller2,6.33333

6059.34,Novos,99.17, 2018-02-21 20:34:29, 2018-02-21 20:45:59,6059.34,11.5,1.33333,2.16667,8,566,94,566-94,YES,Rotate,94.37,Anadarko Petroleum,Vertical,2.05,0.00,1.33,5.95,Driller2,11.5

6154.57,Novos,99.32, 2018-02-21 20:55:59, 2018-02-21 21:02:39,6154.57,6.66667,1.33333,2.5,2.83333,566,94,566-94,YES,Rotate,85.69,Anadarko Petroleum,Vertical,1.95,0.00,1.33,0.88,Driller2,6.66667

6247.35,Novos,98.16, 2018-02-21 21:15:49, 2018-02-21 21:23:09,6247.35,7.33333,2.83333,2,2.5,566,94,566-94,YES,Rotate,86.39,Anadarko Petroleum,Vertical,1.38,0.00,2.83,1.12,Driller2,7.33333

6342.9,Novos,96.97, 2018-02-21 21:38:29, 2018-02-21 21:45:09,6342.9,6.66667,1.16667,3,2.5,566,94,566-94,YES,Rotate,92.26,Anadarko Petroleum,Vertical,1.43,0.00,1.17,1.07,Driller2,6.66667

6438.82,Novos,99.63, 2018-02-21 21:59:39, 2018-02-21 22:05:09,6438.82,5.5,1.5,2,2,566,94,566-94,YES,Rotate,95.73,Anadarko Petroleum,Vertical,1.32,0.00,1.50,0.68,Driller2,5.5

6534.74,Hybrid,97, 2018-02-21 22:21:09, 2018-02-21 22:30:09,6534.74,9,4,2.16667,2.83333,566,94,566-94,YES,Rotate,95.17,Anadarko Petroleum,Vertical,1.70,0.00,4.00,1.13,Driller2,9

6630.11,Novos,98.42, 2018-02-21 22:47:49, 2018-02-21 22:53:59,6630.11,6.16667,1.33333,2.16667,2.66667,566,94,566-94,YES,Rotate,89.09,Anadarko Petroleum,Vertical,1.40,0.00,1.33,1.27,Driller2,6.16667

6725.41,Novos,100.61, 2018-02-21 23:11:39, 2018-02-21 23:17:29,6725.41,5.83333,1.5,2,2.33333,566,94,566-94,YES,Rotate,92.71,Anadarko Petroleum,Vertical,1.40,0.00,1.50,0.93,Driller2,5.83333

6820.83,Novos,99.08, 2018-02-21 23:35:59, 2018-02-21 23:42:09,6820.83,6.16667,1.33333,2.16667,2.66667,566,94,566-94,YES,Rotate,94.32,Anadarko Petroleum,Vertical,1.62,0.00,1.33,1.05,Driller2,6.16667

6916.25,Novos,99.69, 2018-02-22 00:02:09, 2018-02-22 00:11:19,6916.25,9.16667,1.33333,5.33333,2.5,566,94,566-94,YES,Rotate,95.13,Anadarko Petroleum,Vertical,1.32,0.00,1.33,1.18,Driller1,9.16667

7003.51,Hybrid,99.53, 2018-02-22 00:31:49, 2018-02-22 00:41:29,7003.51,9.66667,3.16667,2,4.5,566,94,566-94,YES,Slide,96.37,Anadarko Petroleum,Vertical,1.43,0.00,3.17,3.07,Driller1,9.66667

7098.74,Novos,98.77, 2018-02-22 01:54:19, 2018-02-22 02:01:49,7098.74,7.5,1.33333,2.33333,3.83333,566,94,566-94,YES,Slide,98.59,Anadarko Petroleum,Vertical,2.80,0.00,1.33,1.03,Driller1,7.5

7192.27,Novos,99.85, 2018-02-22 02:56:19, 2018-02-22 03:02:29,7192.27,6.16667,1.33333,2,2.83333,566,94,566-94,YES,Slide,97.35,Anadarko Petroleum,Vertical,1.73,0.00,1.33,1.10,Driller1,6.16667

7287.63,Novos,98.75, 2018-02-22 03:36:09, 2018-02-22 03:42:19,7287.63,6.16667,1.5,1.83333,2.83333,566,94,566-94,YES,Slide,92.92,Anadarko Petroleum,Vertical,1.78,0.00,1.50,1.05,Driller1,6.16667

7381.1,Novos,99.89, 2018-02-22 04:21:29, 2018-02-22 04:27:59,7381.1,6.5,1.5,2.16667,2.83333,566,94,566-94,YES,Slide,93,Anadarko Petroleum,Vertical,1.78,0.00,1.50,1.05,Driller1,6.5

7476.79,Novos,98.61, 2018-02-22 05:04:09, 2018-02-22 05:10:29,7476.79,6.33333,1.33333,2,3,566,94,566-94,YES,Slide,91.64,Anadarko Petroleum,Vertical,1.58,0.00,1.33,1.42,Driller1,6.33333

7569.89,Hybrid,98.87, 2018-02-22 05:52:29, 2018-02-22 06:03:49,7569.89,11.3333,5.16667,2.33333,3.83333,566,94,566-94,YES,Slide,104.47,Anadarko Petroleum,Vertical,2.60,0.00,5.17,1.23,Driller1,11.3333

7664.85,Hybrid,98.86, 2018-02-22 06:50:49, 2018-02-22 06:57:59,7664.85,7.16667,0.5,2.33333,4.33333,566,94,566-94,YES,Slide,101.46,Anadarko Petroleum,Vertical,2.62,0.00,0.50,1.72,Driller1,7.16667

7760.18,Hybrid,99.75, 2018-02-22 07:40:39, 2018-02-22 07:46:39,7760.18,6,0.5,2.16667,3.33333,566,94,566-94,YES,Slide,103.15,Anadarko Petroleum,Vertical,2.30,0.00,0.50,1.03,Driller1,6

7853.97,Hybrid,98.34, 2018-02-22 08:30:49, 2018-02-22 08:37:39,7853.97,6.83333,0.333333,2.33333,4.16667,566,94,566-94,YES,Slide,103.56,Anadarko Petroleum,Vertical,3.03,0.00,0.33,1.13,Driller1,6.83333

7949.61,Hybrid,97.74, 2018-02-22 09:20:19, 2018-02-22 09:25:49,7949.61,5.5,0.333333,1.83333,3.33333,566,94,566-94,YES,Slide,104.52,Anadarko Petroleum,Vertical,2.17,0.00,0.33,1.17,Driller1,5.5

8044.77,Hybrid,99.31, 2018-02-22 10:12:59, 2018-02-22 10:23:29,8044.77,10.5,0.333333,2,8.16667,566,94,566-94,YES,Slide,106.43,Anadarko Petroleum,Vertical,6.87,0.00,0.33,1.30,Driller1,10.5

8137.17,Hybrid,99.89, 2018-02-22 11:06:19, 2018-02-22 11:11:59,8137.17,5.66667,0.5,1.83333,3.33333,566,94,566-94,YES,Slide,104.98,Anadarko Petroleum,Vertical,2.32,0.00,0.50,1.02,Driller1,5.66667

8232.66,Driller,98.38, 2018-02-22 12:08:49, 2018-02-22 12:16:19,8232.66,7.5,0.333333,2,5.16667,566,94,566-94,YES,Slide,105.75,Anadarko Petroleum,Vertical,0.00,0.00,0.33,5.17,Driller2,7.5

8327.68,Driller,99.97, 2018-02-22 13:34:09, 2018-02-22 13:40:29,8327.68,6.33333,0.833333,1.83333,3.66667,566,94,566-94,YES,Slide,107.64,Anadarko Petroleum,Vertical,0.00,0.00,0.83,3.67,Driller2,6.33333

8420.71,Driller,99.41, 2018-02-22 15:03:29, 2018-02-22 15:33:49,8420.71,30.3333,25.5,2,2.83333,566,94,566-94,YES,Slide,106.52,Anadarko Petroleum,Vertical,0.00,0.00,25.50,2.83,Driller2,20

8516.11,Driller,98.59, 2018-02-22 16:57:49, 2018-02-22 17:03:39,8516.11,5.83333,0.333333,2,3.5,566,94,566-94,YES,Slide,103.43,Anadarko Petroleum,Vertical,0.00,0.00,0.33,3.50,Driller2,5.83333

8611.07,Novos,100.22, 2018-02-22 18:55:19, 2018-02-22 19:01:49,8611.07,6.5,1.33333,2.16667,3,566,94,566-94,YES,Slide,100.99,Anadarko Petroleum,Vertical,1.68,0.00,1.33,1.32,Driller2,6.5

8703.73,Novos,98.61, 2018-02-22 20:22:29, 2018-02-22 20:28:59,8703.73,6.5,1.33333,2,3.16667,566,94,566-94,YES,Slide,100.58,Anadarko Petroleum,Vertical,1.97,0.00,1.33,1.20,Driller2,6.5

8797.83,Novos,99.44, 2018-02-22 21:45:39, 2018-02-22 21:51:49,8797.83,6.16667,1.33333,1.66667,3.16667,566,94,566-94,YES,Slide,104.95,Anadarko Petroleum,Vertical,1.97,0.00,1.33,1.20,Driller2,6.16667

8893.22,Driller,99.52, 2018-02-22 23:09:19, 2018-02-22 23:16:19,8893.22,7,1.83333,2.16667,3,566,94,566-94,YES,Slide,106.77,Anadarko Petroleum,Vertical,0.00,0.00,1.83,3.00,Driller2,7

8986.87,Novos,98.18, 2018-02-23 00:26:19, 2018-02-23 00:32:29,8986.87,6.16667,1.5,2,2.66667,566,94,566-94,YES,Slide,112.17,Anadarko Petroleum,Vertical,1.40,0.00,1.50,1.27,Driller1,6.16667

9081.91,Novos,99.32, 2018-02-23 01:21:09, 2018-02-23 01:27:09,9081.91,6,0.833333,2.16667,3,566,94,566-94,YES,Slide,109.91,Anadarko Petroleum,Vertical,1.82,0.00,0.83,1.18,Driller1,6

9177.22,Novos,99.4, 2018-02-23 02:07:49, 2018-02-23 02:13:59,9177.22,6.16667,1.33333,1.83333,3,566,94,566-94,YES,Slide,109.38,Anadarko Petroleum,Vertical,1.85,0.00,1.33,1.15,Driller1,6.16667

9270.28,Hybrid,99.84, 2018-02-23 03:32:59, 2018-02-23 04:01:59,9270.28,29,22.3333,3.5,3.16667,566,94,566-94,YES,Slide,109.21,Anadarko Petroleum,Vertical,2.03,0.00,22.33,1.13,Driller1,20

9365.72,Novos,98.74, 2018-02-23 05:07:59, 2018-02-23 05:14:49,9365.72,6.83333,1.66667,1.83333,3.33333,566,94,566-94,YES,Slide,99.75,Anadarko Petroleum,Vertical,1.88,0.00,1.67,1.45,Driller1,6.83333

9458.71,Novos,99.3, 2018-02-23 06:23:29, 2018-02-23 06:30:59,9458.71,7.5,1.5,2.5,3.5,566,94,566-94,YES,Slide,113.89,Anadarko Petroleum,Vertical,1.97,0.00,1.50,1.53,Driller1,7.5

9554.2,Novos,99.17, 2018-02-23 07:18:19, 2018-02-23 07:24:39,9554.2,6.33333,1.33333,2,3,566,94,566-94,YES,Slide,111.4,Anadarko Petroleum,Vertical,1.92,0.00,1.33,1.08,Driller1,6.33333

9649.23,Novos,99.37, 2018-02-23 08:09:59, 2018-02-23 08:17:29,9649.23,7.5,1.5,2.33333,3.66667,566,94,566-94,YES,Slide,117.31,Anadarko Petroleum,Vertical,1.85,0.00,1.50,1.82,Driller1,7.5

9744.54,Hybrid,98.6, 2018-02-23 08:57:59, 2018-02-23 09:21:49,9744.54,23.8333,17.5,3.16667,3.16667,566,94,566-94,YES,Slide,110.34,Anadarko Petroleum,Vertical,0.00,0.00,17.50,3.17,Driller1,20

9839.41,Novos,100.62, 2018-02-23 10:06:19, 2018-02-23 10:15:29,9839.41,9.16667,1.5,2.5,5.16667,566,94,566-94,YES,Slide,111.27,Anadarko Petroleum,Vertical,1.42,0.00,1.50,3.75,Driller1,9.16667

9934.68,Novos,99.29, 2018-02-23 12:37:59, 2018-02-23 12:44:29,9934.68,6.5,1.5,1.83333,3.16667,566,94,566-94,YES,Slide,117.18,Anadarko Petroleum,Vertical,1.68,0.00,1.50,1.48,Driller2,6.5

10026,Novos,100, 2018-02-23 13:41:09, 2018-02-23 13:47:49,10026,6.66667,1.5,2.16667,3,566,94,566-94,YES,Slide,119.44,Anadarko Petroleum,Vertical,1.72,0.00,1.50,1.28,Driller2,6.66667

10121.4,Novos,99.1, 2018-02-23 15:59:19, 2018-02-23 16:05:39,10121.4,6.33333,1.5,2,2.83333,566,94,566-94,YES,Slide,118.8,Anadarko Petroleum,Vertical,1.65,0.00,1.50,1.18,Driller2,6.33333

10214.9,Novos,99.42, 2018-02-23 16:55:39, 2018-02-23 17:02:09,10214.9,6.5,1.33333,2.16667,3,566,94,566-94,YES,Slide,117.61,Anadarko Petroleum,Vertical,1.67,0.00,1.33,1.33,Driller2,6.5

10309.8,Novos,100.66, 2018-02-23 19:01:19, 2018-02-23 19:07:19,10309.8,6,1.33333,2.16667,2.5,566,94,566-94,YES,Slide,109.98,Anadarko Petroleum,Vertical,1.32,0.00,1.33,1.18,Driller2,6

10405.3,Driller,98.99, 2018-02-23 20:08:29, 2018-02-23 20:16:59,10405.3,8.5,3.5,2.16667,2.83333,566,94,566-94,YES,Slide,117.97,Anadarko Petroleum,Vertical,0.00,0.00,3.50,2.83,Driller2,8.5

10500.64,Novos,10500.64,21.37,1.50,2.299999993,17.52,566,94,566-94,YES,Slide,117.97,Anadarko Petroleum,Vertical,15.00,0.00,1.50,2.52,Driller2,20

10593.34,Novos,10593.34,5.9,1.22,2.016666667,2.67,566,94,566-94,YES,Slide,117.97,Anadarko Petroleum,Vertical,1.73,0.00,1.22,0.94,Driller1,5.9

10687.5,Novos,99.41, 2018-02-24 01:00:59, 2018-02-24 01:06:59,10687.5,6,1.16667,2,2.83333,566,94,566-94,YES,Slide,112.5,Anadarko Petroleum,Vertical,1.80,0.00,1.17,1.03,Driller1,6

10783,Novos,99.5, 2018-02-24 02:02:49, 2018-02-24 02:10:39,10783,7.83333,1.33333,3.5,3,566,94,566-94,YES,Slide,110.99,Anadarko Petroleum,Vertical,2.03,0.00,1.33,0.97,Driller1,7.83333

10876.5,Hybrid,97.07, 2018-02-24 04:08:29, 2018-02-24 04:27:09,10876.5,18.6667,12.8333,2.5,3.33333,566,94,566-94,YES,Slide,122.73,Anadarko Petroleum,Vertical,1.62,0.00,12.83,1.72,Driller1,18.6667

10971.8,Novos,100.19, 2018-02-24 06:46:39, 2018-02-24 06:55:19,10971.8,8.66667,1.5,3.66667,3.5,566,94,566-94,YES,Rotate,123.57,Anadarko Petroleum,Vertical,1.82,0.00,1.50,1.68,Driller1,8.66667

11067.1,Novos,100.32, 2018-02-24 07:40:09, 2018-02-24 07:52:09,11067.1,12,6,2.83333,3.16667,566,94,566-94,YES,Rotate,121.52,Anadarko Petroleum,Vertical,1.72,0.00,6.00,1.45,Driller1,12

11160.1,Novos,99.56, 2018-02-24 08:42:59, 2018-02-24 08:57:59,11160.1,15,9.16667,2.83333,3,566,94,566-94,YES,Rotate,123.29,Anadarko Petroleum,Vertical,1.80,0.05,9.12,1.20,Driller1,15

11255.5,Novos,99.47, 2018-02-24 10:56:09, 2018-02-24 11:16:29,11255.5,20.3333,13.3333,3,4,566,94,566-94,YES,Rotate,127.33,Anadarko Petroleum,Vertical,2.28,0.00,13.33,1.72,Driller1,20

11434,Hybrid,98.41, 2018-02-25 05:14:19, 2018-02-25 05:22:29,11434,8.16667,0.5,2.33333,5.33333,566,94,566-94,YES,Rotate,112.59,Anadarko Petroleum,Vertical,4.17,0.00,0.50,1.17,Driller1,8.16667

11529.2,Novos,98.66, 2018-02-25 06:55:59, 2018-02-25 07:04:29,11529.2,8.5,1.66667,1.83333,5,566,94,566-94,YES,Rotate,114.71,Anadarko Petroleum,Vertical,3.75,0.00,1.67,1.25,Driller1,8.5

11623,Novos,98.23, 2018-02-25 07:53:39, 2018-02-25 08:03:49,11623,10.1667,1.33333,1.83333,7,566,94,566-94,YES,Rotate,115.03,Anadarko Petroleum,Vertical,5.55,0.00,1.33,1.45,Driller1,10.1667

11717.9,Novos,98.75, 2018-02-25 08:51:29, 2018-02-25 08:59:29,11717.9,8,1.33333,1.66667,5,566,94,566-94,YES,Rotate,117.74,Anadarko Petroleum,Vertical,3.82,0.00,1.33,1.18,Driller1,8

11812.1,Novos,99.89, 2018-02-25 22:40:59, 2018-02-25 23:00:29,11812.1,19.5,5.33333,3.33333,10.8333,566,94,566-94,YES,Rotate,115.97,Anadarko Petroleum,Build,9.53,0.00,5.33,1.30,Driller2,19.5

11907.3,Hybrid,98.36, 2018-02-26 00:55:09, 2018-02-26 01:13:19,11907.3,18.1667,4.66667,4,9.5,566,94,566-94,YES,Rotate,116.4,Anadarko Petroleum,Build,8.37,0.00,4.67,1.13,Driller1,18.1667

12001.1,Novos,99.4, 2018-02-26 02:15:59, 2018-02-26 02:31:59,12001.1,16,4,2,10,566,94,566-94,YES,Rotate,113.87,Anadarko Petroleum,Build,8.28,0.00,4.00,1.72,Driller1,16

12095.5,Hybrid,98.08, 2018-02-26 03:24:29, 2018-02-26 03:37:39,12095.5,13.1667,3.66667,2.16667,7.33333,566,94,566-94,YES,Rotate,120.86,Anadarko Petroleum,Build,1.43,0.00,3.67,5.90,Driller1,13.1667

12189.8,Novos,98.84, 2018-02-26 04:39:49, 2018-02-26 04:54:29,12189.8,14.6667,4,2.33333,8.33333,566,94,566-94,YES,Rotate,114.9,Anadarko Petroleum,Build,7.25,0.00,4.00,1.08,Driller1,14.6667

12283.4,Hybrid,97.09, 2018-02-26 06:21:59, 2018-02-26 06:35:39,12283.4,13.6667,1,2,10.6667,566,94,566-94,YES,Rotate,121.81,Anadarko Petroleum,Build,1.42,0.00,1.00,9.25,Driller1,13.6667

12378.7,Hybrid,99.23, 2018-02-26 07:43:29, 2018-02-26 08:01:09,12378.7,17.6667,7.16667,2.5,8,566,94,566-94,YES,Slide,120.32,Anadarko Petroleum,Build,6.00,0.00,7.17,2.00,Driller1,17.6667

12474.1,Hybrid,99.38, 2018-02-26 10:25:59, 2018-02-26 11:07:29,12474.1,41.5,24.1667,2.5,14.8333,566,94,566-94,YES,Slide,121.96,Anadarko Petroleum,Build,2.48,0.00,24.17,12.35,Driller1,20

12569.6,Driller,97.78, 2018-02-26 12:51:09, 2018-02-26 13:10:09,12569.6,19,6.33333,1.83333,10.8333,566,94,566-94,YES,Slide,118.77,Anadarko Petroleum,Build,0.00,0.00,6.33,10.83,Driller2,19

12605.9,Driller,32.58, 2018-02-27 17:30:09, 2018-02-27 17:59:59,12605.9,29.8333,0.166667,7.66667,22,566,94,566-94,YES,Slide,141.03,Anadarko Petroleum,Lateral,0.00,0.00,0.17,22.00,Driller2,20

12669.7,Driller,99.99, 2018-03-03 03:03:59, 2018-03-03 03:15:39,12669.7,11.6667,0.666667,3.16667,7.83333,566,94,566-94,YES,Slide,100.89,Anadarko Petroleum,Lateral,0.00,0.00,0.67,7.83,Driller1,11.6667

12764.9,Driller,97.98, 2018-03-03 06:04:39, 2018-03-03 06:33:49,12764.9,29.1667,0.666667,3.5,25,566,94,566-94,YES,Slide,104.95,Anadarko Petroleum,Lateral,0.00,0.00,0.67,25.00,Driller1,20

12859.9,Driller,99.11, 2018-03-03 10:33:39, 2018-03-03 10:52:09,12859.9,18.5,0.666667,3,14.8333,566,94,566-94,YES,Slide,107.72,Anadarko Petroleum,Lateral,0.00,0.00,0.67,14.83,Driller1,18.5

12954.7,Novos,98.58, 2018-03-03 14:40:09, 2018-03-03 14:55:39,12954.7,15.5,1.16667,3,11.3333,566,94,566-94,YES,Rotate,83.26,Anadarko Petroleum,Lateral,8.67,0.00,1.17,2.67,Driller2,15.5

13047.7,Novos,98.59, 2018-03-03 16:10:19, 2018-03-03 16:21:49,13047.7,11.5,1.33333,2.66667,7.5,566,94,566-94,YES,Slide,104.54,Anadarko Petroleum,Lateral,5.90,0.00,1.33,1.60,Driller2,11.5

13143.1,Hybrid,98.36, 2018-03-03 17:32:59, 2018-03-03 17:55:59,13143.1,23,12.3333,3.16667,7.5,566,94,566-94,YES,Rotate,105.74,Anadarko Petroleum,Lateral,6.07,0.00,12.33,1.43,Driller2,20

13236.7,Novos,100.95, 2018-03-03 19:05:19, 2018-03-03 19:15:29,13236.7,10.1667,1.5,3.66667,5,566,94,566-94,YES,Rotate,96.53,Anadarko Petroleum,Lateral,2.92,0.00,1.50,2.08,Driller2,10.1667

13332.1,Novos,99.17, 2018-03-03 20:13:19, 2018-03-03 20:22:09,13332.1,8.83333,1.5,3.16667,4.16667,566,94,566-94,YES,Rotate,98.57,Anadarko Petroleum,Lateral,2.40,0.00,1.50,1.77,Driller2,8.83333

13427.96,Novos,99.91, 2018-03-03 21:21:19, 2018-03-03 20:30:49,13427.96,9.47,1.52,3.88,4.07,566,94,566-94,YES,Rotate,98.57,Anadarko Petroleum,Lateral,2.87,0.00,1.52,1.20,Driller2,9.47

13523.3,Hybrid,97.66, 2018-03-03 23:58:49, 2018-03-04 00:06:49,13523.3,8,0.833333,3.16667,4,566,94,566-94,YES,Rotate,98.51,Anadarko Petroleum,Lateral,2.58,0.00,0.83,1.42,Driller2,8

13615.2,Novos,99.45, 2018-03-04 01:12:49, 2018-03-04 01:22:19,13615.2,9.5,1.33333,3.66667,4.5,566,94,566-94,YES,Rotate,97.95,Anadarko Petroleum,Lateral,2.08,0.00,1.33,2.42,Driller1,9.5

13710,Hybrid,98.87, 2018-03-04 05:03:29, 2018-03-04 05:12:09,13710,8.66667,0.666667,3.33333,4.66667,566,94,566-94,YES,Rotate,100.62,Anadarko Petroleum,Lateral,2.25,0.00,0.67,2.42,Driller1,8.66667

13805,Novos,99.39, 2018-03-04 06:17:29, 2018-03-04 06:30:49,13805,13.3333,1.33333,2.83333,9.16667,566,94,566-94,YES,Rotate,102.27,Anadarko Petroleum,Lateral,8.45,0.00,1.33,0.72,Driller1,13.3333

13898.13,Novos,99.91, 2018-03-04 07:31:59,13898.13,10.75,1.2,2.93,6.62,566,94,566-94,YES,Rotate,98.57,Anadarko Petroleum,Lateral,6.05,0.00,1.20,0.57,Driller1,10.75

13993.2,Novos,97.87, 2018-03-04 10:06:59, 2018-03-04 10:18:29,13993.2,11.5,1.5,2.5,7.5,566,94,566-94,YES,Rotate,101.04,Anadarko Petroleum,Lateral,6.60,0.00,1.50,0.90,Driller1,11.5

14087,Novos,99.38, 2018-03-04 13:24:49, 2018-03-04 13:38:29,14087,13.6667,1.16667,2.83333,9.66667,566,94,566-94,YES,Rotate,103.36,Anadarko Petroleum,Lateral,5.42,0.00,1.17,4.25,Driller2,13.6667

14182.5,Novos,98.99, 2018-03-04 15:03:29, 2018-03-04 15:11:59,14182.5,8.5,1.16667,3.33333,4,566,94,566-94,YES,Rotate,103.29,Anadarko Petroleum,Lateral,1.98,0.00,1.17,2.02,Driller2,8.5

14275.9,Hybrid,98.82, 2018-03-04 16:15:29, 2018-03-04 16:36:09,14275.9,20.6667,14.1667,3,3.5,566,94,566-94,YES,Rotate,99.59,Anadarko Petroleum,Lateral,1.48,0.00,14.17,2.02,Driller2,20

14369.9,Hybrid,97.64, 2018-03-04 17:47:09, 2018-03-04 17:59:59,14369.9,12.8333,3.83333,3,6,566,94,566-94,YES,Rotate,102.96,Anadarko Petroleum,Lateral,5.00,0.00,3.83,1.00,Driller2,12.8333

14464.3,Novos,99.22, 2018-03-04 19:39:59, 2018-03-04 19:52:29,14464.3,12.5,1.33333,3.83333,7.33333,566,94,566-94,YES,Rotate,93.1,Anadarko Petroleum,Lateral,3.32,0.00,1.33,4.02,Driller2,12.5

14559.6,Novos,99.91, 2018-03-04 21:14:59, 2018-03-04 21:24:39,14559.6,9.66667,1.5,3.33333,4.83333,566,94,566-94,YES,Rotate,97.99,Anadarko Petroleum,Lateral,0.42,0.00,1.50,4.42,Driller2,9.66667

14655,Novos,98.84, 2018-03-04 22:30:49, 2018-03-04 22:41:29,14655,10.6667,1.16667,3.83333,5.66667,566,94,566-94,YES,Rotate,100.75,Anadarko Petroleum,Lateral,0.80,0.00,1.17,4.87,Driller2,10.6667

14750.1,Driller,100.11, 2018-03-04 23:53:29, 2018-03-05 00:01:59,14750.1,8.5,1.33333,3.16667,4,566,94,566-94,YES,Rotate,85.35,Anadarko Petroleum,Lateral,0.00,0.00,1.33,4.00,Driller2,8.5

14843.3,Novos,98.82, 2018-03-05 03:27:59, 2018-03-05 03:37:59,14843.3,10,1.33333,3,5.66667,566,94,566-94,YES,Rotate,92.58,Anadarko Petroleum,Lateral,2.55,0.00,1.33,3.12,Driller1,10

14928,Hybrid,105.19, 2018-03-05 05:03:29, 2018-03-05 12:44:49,14928,461.333,6.66667,11.3333,443.333,566,94,566-94,NO,Slide,116.6,Anadarko Petroleum,Lateral,2.85,0.00,6.67,440.48,Driller1,20

14937,Driller,99.35, 2018-03-05 13:03:59, 2018-03-05 13:31:49,14937,27.8333,17.3333,2.66667,7.83333,566,94,566-94,YES,Rotate,99.37,Anadarko Petroleum,Lateral,0.00,0.00,17.33,7.83,Driller2,20

15033.1,Novos,98.09, 2018-03-05 17:17:39, 2018-03-05 17:26:09,15033.1,8.5,1.33333,2.83333,4.33333,566,94,566-94,YES,Rotate,100.16,Anadarko Petroleum,Lateral,1.47,0.00,1.33,2.87,Driller2,8.5

15126.1,Novos,99, 2018-03-05 20:22:39, 2018-03-05 20:33:29,15126.1,10.8333,1.33333,3.33333,6.16667,566,94,566-94,YES,Rotate,102.31,Anadarko Petroleum,Lateral,3.03,0.00,1.33,3.13,Driller2,10.8333

15221.6,Hybrid,98.88, 2018-03-05 21:51:39, 2018-03-05 22:14:29,15221.6,22.8333,14.6667,2.66667,5.5,566,94,566-94,YES,Rotate,100.12,Anadarko Petroleum,Lateral,0.00,0.00,14.67,5.50,Driller2,20

15316.8,Novos,99.78, 2018-03-05 23:50:19, 2018-03-06 00:05:59,15316.8,15.6667,4.5,2.66667,8.5,566,94,566-94,YES,Rotate,106.5,Anadarko Petroleum,Lateral,4.33,0.00,4.50,4.17,Driller2,15.6667

15410.5,Novos,99.67, 2018-03-06 02:49:39, 2018-03-06 03:01:39,15410.5,12,1.33333,3,7.66667,566,94,566-94,YES,Rotate,100.73,Anadarko Petroleum,Lateral,4.40,0.00,1.33,3.27,Driller1,12

15505.9,Novos,98.5, 2018-03-06 06:37:59, 2018-03-06 06:51:29,15505.9,13.5,1.5,2.5,9.5,566,94,566-94,YES,Rotate,98.77,Anadarko Petroleum,Lateral,4.67,0.00,1.50,4.83,Driller1,13.5

15600.5,Novos,98.87, 2018-03-06 08:30:49, 2018-03-06 08:44:09,15600.5,13.3333,2,2.33333,9,566,94,566-94,YES,Rotate,100.88,Anadarko Petroleum,Lateral,3.97,0.00,2.00,5.03,Driller1,13.3333

15693.2,Hybrid,99.01, 2018-03-06 10:42:49, 2018-03-06 10:52:29,15693.2,9.66667,1.5,2.5,5.66667,566,94,566-94,YES,Rotate,99.5,Anadarko Petroleum,Lateral,0.00,0.00,1.50,5.67,Driller1,9.66667

15787.8,Novos,98.44, 2018-03-06 12:45:39, 2018-03-06 12:54:09,15787.8,8.5,1.16667,2.66667,4.66667,566,94,566-94,YES,Rotate,100.49,Anadarko Petroleum,Lateral,1.72,0.00,1.17,2.95,Driller2,8.5

15882.9,Driller,97.38, 2018-03-06 17:40:59, 2018-03-06 17:55:19,15882.9,14.3333,0.833333,3.16667,10.3333,566,94,566-94,YES,Rotate,103.67,Anadarko Petroleum,Lateral,0.00,0.00,0.83,10.33,Driller2,14.3333

15978,Driller,100, 2018-03-06 22:50:09, 2018-03-06 23:04:39,15978,14.5,1.5,3.5,9.5,566,94,566-94,YES,Rotate,88.67,Anadarko Petroleum,Lateral,0.00,0.00,1.50,9.50,Driller2,14.5

16073.1,Driller,99.31, 2018-03-07 02:48:39, 2018-03-07 02:59:09,16073.1,10.5,1.33333,3.16667,6,566,94,566-94,YES,Rotate,101.03,Anadarko Petroleum,Lateral,0.00,0.00,1.33,6.00,Driller1,10.5

16168.5,Driller,97.84, 2018-03-07 05:06:29, 2018-03-07 05:16:29,16168.5,10,0.666667,3.16667,6.16667,566,94,566-94,YES,Rotate,99.97,Anadarko Petroleum,Lateral,0.00,0.00,0.67,6.17,Driller1,10

16292.3,Hybrid,98.45, 2018-03-08 05:12:49, 2018-03-08 05:23:19,16292.3,10.5,0.833333,3.66667,6,566,94,566-94,YES,Rotate,103.83,Anadarko Petroleum,Lateral,4.80,0.00,0.83,1.20,Driller1,10.5

16387.3,Novos,99.41, 2018-03-08 06:32:59, 2018-03-08 06:43:19,16387.3,10.3333,1.83333,2.66667,5.83333,566,94,566-94,YES,Rotate,98.66,Anadarko Petroleum,Lateral,3.63,0.00,1.83,2.20,Driller1,10.3333

16481.2,Novos,100.62, 2018-03-08 08:35:09, 2018-03-08 08:54:29,16481.2,19.3333,1.66667,3.5,14.1667,566,94,566-94,YES,Rotate,99.04,Anadarko Petroleum,Lateral,12.32,0.00,1.67,1.85,Driller1,19.3333

16576.6,Novos,100.37, 2018-03-08 10:08:59, 2018-03-08 10:28:09,16576.6,19.1667,1.66667,3.33333,14.1667,566,94,566-94,YES,Rotate,99.4,Anadarko Petroleum,Lateral,12.72,0.00,1.67,1.45,Driller1,19.1667

16669.5,Novos,98.24, 2018-03-08 12:46:09, 2018-03-08 12:58:09,16669.5,12,1.33333,2.83333,7.83333,566,94,566-94,YES,Rotate,101.81,Anadarko Petroleum,Lateral,6.17,0.00,1.33,1.67,Driller2,12

16764.8,Novos,97.56, 2018-03-08 14:59:09, 2018-03-08 15:20:39,16764.8,21.5,1.5,2.5,17.5,566,94,566-94,YES,Rotate,100.23,Anadarko Petroleum,Lateral,15.10,0.00,1.50,2.40,Driller2,20

16859.2,Hybrid,96.62, 2018-03-08 16:32:59, 2018-03-08 16:55:39,16859.2,22.6667,11.8333,2.5,8.33333,566,94,566-94,YES,Rotate,102.24,Anadarko Petroleum,Lateral,6.00,0.00,11.83,2.33,Driller2,20

16954.1,Novos,99.21, 2018-03-08 19:00:59, 2018-03-08 19:11:29,16954.1,10.5,1.66667,2.83333,6,566,94,566-94,YES,Rotate,99.82,Anadarko Petroleum,Lateral,3.20,0.00,1.67,2.80,Driller2,10.5

17049.2,Hybrid,99.42, 2018-03-08 21:47:09, 2018-03-08 22:06:19,17049.2,19.1667,1.5,3.16667,14.5,566,94,566-94,YES,Rotate,100.24,Anadarko Petroleum,Lateral,0.00,0.00,1.50,14.50,Driller2,19.1667

17144.3,Novos,99.8, 2018-03-09 01:53:09, 2018-03-09 02:04:09,17144.3,11,1.5,4.16667,5.33333,566,94,566-94,YES,Rotate,100.42,Anadarko Petroleum,Lateral,3.02,0.00,1.50,2.32,Driller1,11

17238.2,Novos,98.6, 2018-03-09 04:05:39, 2018-03-09 04:15:49,17238.2,10.1667,1.5,3.16667,5.5,566,94,566-94,YES,Rotate,103.22,Anadarko Petroleum,Lateral,2.77,0.00,1.50,2.73,Driller1,10.1667

17333.3,Novos,113.05, 2018-03-09 06:20:49, 2018-03-09 06:34:29,17333.3,13.6667,1.5,4.83333,7.33333,566,94,566-94,YES,Rotate,104.26,Anadarko Petroleum,Lateral,5.17,0.00,1.50,2.17,Driller1,13.6667

17426.3,Hybrid,96.31, 2018-03-09 09:02:59, 2018-03-09 09:11:29,17426.3,8.5,0.5,2.66667,5.33333,566,94,566-94,YES,Rotate,107.35,Anadarko Petroleum,Lateral,3.00,0.00,0.50,2.33,Driller1,8.5

17521,Driller,96.83, 2018-03-09 11:41:09, 2018-03-09 11:49:49,17521,8.66667,0.666667,2.5,5.5,566,94,566-94,YES,Rotate,102.25,Anadarko Petroleum,Lateral,0.00,0.00,0.67,5.50,Driller1,8.66667

17615.5,Novos,98.53, 2018-03-09 13:46:19, 2018-03-09 13:56:19,17615.5,10,1.66667,2.33333,6,566,94,566-94,YES,Rotate,103.01,Anadarko Petroleum,Lateral,2.82,0.00,1.67,3.18,Driller2,10

17710.2,Novos,97.98, 2018-03-09 16:33:09, 2018-03-09 16:42:59,17710.2,9.83333,1.33333,2.66667,5.83333,566,94,566-94,YES,Rotate,102.08,Anadarko Petroleum,Lateral,2.17,0.00,1.33,3.67,Driller2,9.83333

17805,Hybrid,99.92, 2018-03-09 18:31:29, 2018-03-09 18:39:19,17805,7.83333,1.16667,2.66667,4,566,94,566-94,YES,Rotate,105.27,Anadarko Petroleum,Lateral,3.00,0.00,1.17,1.00,Driller2,7.83333

17900.2,Novos,98.44, 2018-03-09 20:54:19, 2018-03-09 21:04:39,17900.2,10.3333,1.16667,3.33333,5.83333,566,94,566-94,YES,Rotate,102.63,Anadarko Petroleum,Lateral,3.40,0.00,1.17,2.43,Driller2,10.3333

17995.5,Novos,99.61, 2018-03-09 23:13:19, 2018-03-09 23:23:09,17995.5,9.83333,1.33333,3.33333,5.16667,566,94,566-94,YES,Rotate,103.93,Anadarko Petroleum,Lateral,2.73,0.00,1.33,2.43,Driller2,9.83333

18088.5,Novos,98.86, 2018-03-10 02:03:59, 2018-03-10 02:15:09,18088.5,11.1667,1.5,2.83333,6.83333,566,94,566-94,YES,Rotate,100.17,Anadarko Petroleum,Lateral,4.70,0.00,1.50,2.13,Driller1,11.1667

18183,Hybrid,98.67, 2018-03-10 06:58:29, 2018-03-10 07:12:49,18183,14.3333,5.33333,2.66667,6.33333,566,94,566-94,YES,Rotate,111.04,Anadarko Petroleum,Lateral,2.67,0.00,5.33,3.67,Driller1,14.3333

18277.4,Novos,98.91, 2018-03-10 11:11:49, 2018-03-10 11:21:59,18277.4,10.1667,1.33333,3.16667,5.66667,566,94,566-94,YES,Rotate,104.91,Anadarko Petroleum,Lateral,2.15,0.00,1.33,3.52,Driller1,10.1667

18371.8,Novos,98.53, 2018-03-10 13:43:39, 2018-03-10 13:52:59,18371.8,9.33333,1.66667,2.5,5.16667,566,94,566-94,YES,Rotate,103.81,Anadarko Petroleum,Lateral,2.33,0.00,1.67,2.83,Driller2,9.33333

18466.8,Novos,99.27, 2018-03-10 18:08:49, 2018-03-10 18:19:29,18466.8,10.6667,1.33333,2.83333,6.5,566,94,566-94,YES,Rotate,104.4,Anadarko Petroleum,Lateral,3.85,0.00,1.33,2.65,Driller2,10.6667

18563.2,Driller,100.45, 2018-03-11 18:12:49, 2018-03-11 18:22:29,18563.2,9.66667,0.833333,3.5,5.33333,566,94,566-94,YES,Rotate,103.87,Anadarko Petroleum,Lateral,0.00,0.00,0.83,5.33,Driller2,9.66667

18658.4,Novos,99.28, 2018-03-11 22:12:19, 2018-03-11 22:24:49,18658.4,12.5,1.5,4.66667,6.33333,566,94,566-94,YES,Rotate,105.57,Anadarko Petroleum,Lateral,0.00,0.00,1.50,6.33,Driller2,12.5

18753.2,Driller,103.52, 2018-03-12 00:01:39, 2018-03-12 00:44:59,18753.2,43.3333,3,2.5,37.8333,566,94,566-94,YES,Rotate,114.56,Anadarko Petroleum,Lateral,0.00,0.00,3.00,37.83,Driller1,20

18848.4,Driller,98.1, 2018-03-12 04:51:19, 2018-03-12 05:07:19,18848.4,16,1.16667,3.5,11.3333,566,94,566-94,YES,Rotate,103.14,Anadarko Petroleum,Lateral,0.00,0.00,1.17,11.33,Driller1,16

18941.3,Novos,113.1, 2018-03-12 07:21:39, 2018-03-12 07:34:39,18941.3,13,1.66667,5.83333,5.5,566,94,566-94,YES,Rotate,100.89,Anadarko Petroleum,Lateral,2.15,0.00,1.67,3.35,Driller1,13

19035.2,Novos,97.43, 2018-03-12 08:47:19, 2018-03-12 08:55:59,19035.2,8.66667,1.83333,2.66667,4.16667,566,94,566-94,YES,Rotate,102.5,Anadarko Petroleum,Lateral,2.27,0.00,1.83,1.90,Driller1,8.66667

19129.9,Novos,99.73, 2018-03-12 12:01:49, 2018-03-12 12:11:59,19129.9,10.1667,1.66667,3.33333,5.16667,566,94,566-94,YES,Rotate,105.76,Anadarko Petroleum,Lateral,2.25,0.00,1.67,2.92,Driller1,10.1667

19225.6,Novos,99.1, 2018-03-12 17:53:59, 2018-03-12 18:05:49,19225.6,11.8333,0.666667,3,8.16667,566,94,566-94,YES,Rotate,101.88,Anadarko Petroleum,Lateral,7.38,0.00,0.67,0.78,Driller2,11.8333

19320.5,Novos,98.03, 2018-03-12 19:35:09, 2018-03-12 19:49:19,19320.5,14.1667,1.33333,3.5,9.33333,566,94,566-94,YES,Rotate,93.64,Anadarko Petroleum,Lateral,7.83,0.00,1.33,1.50,Driller2,14.1667

19415.5,Novos,99.89, 2018-03-12 21:55:29, 2018-03-12 22:06:29,19415.5,11,1.66667,2.83333,6.5,566,94,566-94,YES,Rotate,103.38,Anadarko Petroleum,Lateral,4.77,0.00,1.67,1.73,Driller2,11

19508.5,Novos,99.82, 2018-03-13 00:03:49, 2018-03-13 00:14:49,19508.5,11,1.83333,3,6.16667,566,94,566-94,YES,Rotate,98.61,Anadarko Petroleum,Lateral,4.63,0.00,1.83,1.53,Driller2,11

19603.8,Novos,99.01, 2018-03-13 01:47:59, 2018-03-13 01:58:49,19603.8,10.8333,1.83333,2.83333,6.16667,566,94,566-94,YES,Rotate,103.37,Anadarko Petroleum,Lateral,5.02,0.00,1.83,1.15,Driller1,10.8333

19699.4,Hybrid,100.86, 2018-03-13 03:25:29, 2018-03-13 04:41:49,19699.4,76.3333,18,41,17.3333,566,94,566-94,NO,Rotate,133.08,Anadarko Petroleum,Lateral,7.28,0.00,18.00,10.05,Driller1,20

19792.3,Novos,113.02, 2018-03-13 07:56:39, 2018-03-13 08:10:09,19792.3,13.5,1.66667,6.5,5.33333,566,94,566-94,YES,Rotate,103.64,Anadarko Petroleum,Lateral,2.20,0.00,1.67,3.13,Driller1,13.5

19886.3,Novos,98.99, 2018-03-13 11:10:49, 2018-03-13 11:20:29,19886.3,9.66667,1.66667,2.5,5.5,566,94,566-94,YES,Rotate,107.25,Anadarko Petroleum,Lateral,3.02,0.00,1.67,2.48,Driller1,9.66667

19980.4,Novos,99.01, 2018-03-13 13:36:59, 2018-03-13 13:45:39,19980.4,8.66667,1.5,2.5,4.66667,566,94,566-94,YES,Rotate,105.94,Anadarko Petroleum,Lateral,2.48,0.00,1.50,2.18,Driller2,8.66667

20076,Driller,98.74, 2018-03-13 15:23:29, 2018-03-13 15:33:49,20076,10.3333,1.66667,2.5,6.16667,566,94,566-94,YES,Rotate,104.88,Anadarko Petroleum,Lateral,0.00,0.00,1.67,6.17,Driller2,10.3333

20169.3,Novos,98.85, 2018-03-13 18:30:59, 2018-03-13 18:44:19,20169.3,13.3333,1.66667,5.16667,6.5,566,94,566-94,YES,Rotate,101.76,Anadarko Petroleum,Lateral,4.22,0.00,1.67,2.28,Driller2,13.3333

20264.4,Novos,99.53, 2018-03-13 21:07:29, 2018-03-13 21:27:49,20264.4,20.3333,7.83333,5.83333,6.66667,566,94,566-94,YES,Rotate,98.58,Anadarko Petroleum,Lateral,4.62,0.00,7.83,2.05,Driller2,20

20359.4,Novos,99.53, 2018-03-13 23:44:39, 2018-03-14 00:07:59,20359.4,23.3333,7.33333,4.16667,11.8333,566,94,566-94,YES,Rotate,97.59,Anadarko Petroleum,Lateral,9.90,0.00,7.33,1.93,Driller2,20

20454.6,Novos,99.09, 2018-03-14 02:45:19, 2018-03-14 03:01:19,20454.6,16,1.33333,6.16667,8.5,566,94,566-94,YES,Rotate,102.03,Anadarko Petroleum,Lateral,6.12,0.00,1.33,2.38,Driller1,16

20549.8,Novos,98.89, 2018-03-14 05:45:09, 2018-03-14 06:00:19,20549.8,15.1667,2.16667,4.83333,8.16667,566,94,566-94,YES,Rotate,98.22,Anadarko Petroleum,Lateral,6.28,0.00,2.17,1.88,Driller1,15.1667

20641.6,Driller,99.91, 2018-03-14 09:18:59, 2018-03-14 09:30:49,20641.6,11.8333,1.83333,3,7,566,94,566-94,YES,Rotate,105.11,Anadarko Petroleum,Lateral,0.00,0.00,1.83,7.00,Driller1,11.8333

20737.1,Novos,98.83, 2018-03-14 11:47:39, 2018-03-14 11:59:49,20737.1,12.1667,1.66667,2.83333,7.66667,566,94,566-94,YES,Rotate,102.62,Anadarko Petroleum,Lateral,6.00,0.00,1.67,1.67,Driller1,12.1667

20830.9,Hybrid,99.35, 2018-03-14 16:11:39, 2018-03-14 16:33:09,20830.9,21.5,11.8333,2.5,7.16667,566,94,566-94,YES,Rotate,97.55,Anadarko Petroleum,Lateral,4.52,0.00,11.83,2.65,Driller2,20

20926.7,Novos,99.9, 2018-03-14 21:24:59, 2018-03-14 21:46:19,20926.7,21.3333,2.5,5.5,13.3333,566,94,566-94,YES,Rotate,109.76,Anadarko Petroleum,Lateral,8.52,0.00,2.50,4.82,Driller2,20

21022.1,Hybrid,99.12, 2018-03-15 01:43:39, 2018-03-15 02:01:29,21022.1,17.8333,1.66667,4.33333,11.8333,566,94,566-94,YES,Rotate,94.87,Anadarko Petroleum,Lateral,8.62,0.00,1.67,3.22,Driller1,17.8333

21052.9,Driller,98.05, 2018-03-15 04:44:19, 2018-03-15 05:54:39,21052.9,70.3333,8.16667,43.1667,19,566,94,566-94,NO,Rotate,102.08,Anadarko Petroleum,Lateral,0.00,0.00,8.17,19.00,Driller1,20

21118.8,Hybrid,99.95, 2018-03-15 08:18:39, 2018-03-15 08:33:19,21118.8,14.6667,1.16667,2.5,11,566,94,566-94,YES,Rotate,99.54,Anadarko Petroleum,Lateral,7.18,0.00,1.17,3.82,Driller1,14.6667

21206.7,Hybrid,99.28, 2018-03-17 19:40:49, 2018-03-17 20:02:09,21206.7,21.3333,3.83333,5.66667,11.8333,566,94,566-94,YES,Rotate,96.3,Anadarko Petroleum,Lateral,8.35,0.00,3.83,3.48,Driller2,20

21301.8,Novos,98.01, 2018-03-17 23:10:19, 2018-03-18 00:31:59,21301.8,81.6667,1.33333,4.33333,76,566,94,566-94,YES,Rotate,93.22,Anadarko Petroleum,Lateral,72.12,0.00,1.33,3.88,Driller2,20

21396.8,Novos,99.6, 2018-03-18 04:33:59, 2018-03-18 04:52:29,21396.8,18.5,2.16667,4,12.3333,566,94,566-94,YES,Rotate,100.79,Anadarko Petroleum,Lateral,7.80,0.00,2.17,4.53,Driller1,18.5

21492,Hybrid,98.19, 2018-03-18 08:19:09, 2018-03-18 08:41:39,21492,22.5,7.33333,3,12.1667,566,94,566-94,YES,Rotate,104.36,Anadarko Petroleum,Lateral,10.00,0.00,7.33,2.17,Driller1,20

21584.6,Hybrid,100.4, 2018-03-18 11:22:49, 2018-03-18 11:37:19,21584.6,14.5,0.833333,4.16667,9.5,566,94,566-94,YES,Rotate,95.19,Anadarko Petroleum,Lateral,8.00,0.00,0.83,1.50,Driller1,14.5

21678.9,Hybrid,99.46, 2018-03-18 13:38:29, 2018-03-18 14:00:09,21678.9,21.6667,7.33333,4,10.3333,566,94,566-94,YES,Rotate,102.8,Anadarko Petroleum,Lateral,7.87,0.00,7.33,2.47,Driller2,20

21773.3,Hybrid,98.76, 2018-03-18 16:51:49, 2018-03-18 17:26:09,21773.3,34.3333,17.5,4.33333,12.5,566,94,566-94,YES,Rotate,100.21,Anadarko Petroleum,Lateral,10.15,0.00,17.50,2.35,Driller2,20

21867.4,Novos,98.5, 2018-03-18 22:50:39, 2018-03-18 23:03:59,21867.4,13.3333,2,3.83333,7.5,566,94,566-94,YES,Rotate,100.67,Anadarko Petroleum,Lateral,4.82,0.00,2.00,2.68,Driller2,13.3333

21962.3,Novos,98.94, 2018-03-19 02:28:49, 2018-03-19 02:42:19,21962.3,13.5,2.16667,4.5,6.83333,566,94,566-94,YES,Rotate,101.59,Anadarko Petroleum,Lateral,4.42,0.00,2.17,2.42,Driller1,13.5

22057.7,Driller,99, 2018-03-19 06:02:19, 2018-03-19 06:23:59,22057.7,21.6667,6.16667,3.5,12,566,94,566-94,YES,Rotate,94.09,Anadarko Petroleum,Lateral,0.00,0.00,6.17,12.00,Driller1,20

22150.6,Driller,97.94, 2018-03-19 08:58:29, 2018-03-19 09:18:49,22150.6,20.3333,6.33333,3.5,10.5,566,94,566-94,YES,Rotate,94.92,Anadarko Petroleum,Lateral,0.00,0.00,6.33,10.50,Driller1,20

22245,Hybrid,97.42, 2018-03-19 13:32:39, 2018-03-19 13:52:29,22245,19.8333,5.66667,2.66667,11.5,566,94,566-94,YES,Rotate,107.86,Anadarko Petroleum,Lateral,7.50,0.00,5.67,4.00,Driller2,19.8333

22339.2,Novos,101.28, 2018-03-19 18:45:49, 2018-03-19 19:11:19,22339.2,25.5,6.83333,3.83333,14.8333,566,94,566-94,YES,Rotate,107.69,Anadarko Petroleum,Lateral,11.42,0.00,6.83,3.42,Driller2,20

22434.4,Novos,98.43, 2018-03-19 22:36:59, 2018-03-19 22:58:59,22434.4,22,5.83333,4.16667,12,566,94,566-94,YES,Rotate,99.2,Anadarko Petroleum,Lateral,7.75,0.00,5.83,4.25,Driller2,20

22529.6,Novos,99.48, 2018-03-20 03:56:49, 2018-03-20 04:19:29,22529.6,22.6667,6.33333,4.83333,11.5,566,94,566-94,YES,Rotate,104.15,Anadarko Petroleum,Lateral,7.45,0.00,6.33,4.05,Driller1,20

22625.3,Driller,99.19, 2018-03-20 10:01:49, 2018-03-20 10:24:29,22625.3,22.6667,8.16667,4.83333,9.66667,566,94,566-94,YES,Rotate,109.2,Anadarko Petroleum,Lateral,0.00,0.00,8.17,9.67,Driller1,20

22716.8,Hybrid,98.9, 2018-03-20 15:06:59, 2018-03-20 15:38:29,22716.8,31.5,16.1667,2.83333,12.5,566,94,566-94,YES,Rotate,110.85,Anadarko Petroleum,Lateral,9.52,0.00,16.17,2.98,Driller2,20

22810.9,Novos,99.63, 2018-03-20 19:47:09, 2018-03-20 20:10:19,22810.9,23.1667,7.83333,3.33333,12,566,94,566-94,YES,Rotate,101.37,Anadarko Petroleum,Lateral,7.08,0.00,7.83,4.92,Driller2,20

22906.4,Novos,97.84, 2018-03-21 01:04:59, 2018-03-21 01:27:39,22906.4,22.6667,6,4.83333,11.8333,566,94,566-94,YES,Rotate,102.36,Anadarko Petroleum,Lateral,7.80,0.00,6.00,4.03,Driller1,20

23002,Hybrid,97.74, 2018-03-21 07:57:49, 2018-03-21 08:16:19,23002,18.5,5,2.5,11,566,94,566-94,YES,Rotate,105.03,Anadarko Petroleum,Lateral,8.27,0.00,5.00,2.73,Driller1,18.5

23094.2,Driller,98.56, 2018-03-21 12:17:49, 2018-03-21 12:38:29,23094.2,20.6667,5.66667,3,12,566,94,566-94,YES,Rotate,92.76,Anadarko Petroleum,Lateral,0.00,0.00,5.67,12.00,Driller1,20

23188.6,Driller,96.52, 2018-03-21 16:33:49, 2018-03-21 16:59:09,23188.6,25.3333,11.8333,4.16667,9.33333,566,94,566-94,YES,Rotate,114.38,Anadarko Petroleum,Lateral,0.00,0.00,11.83,9.33,Driller2,20

23283,Driller,99.13, 2018-03-22 00:08:09, 2018-03-22 00:39:39,23283,31.5,7.16667,4.5,19.8333,566,94,566-94,YES,Rotate,107.49,Anadarko Petroleum,Lateral,0.00,0.00,7.17,19.83,Driller2,20

23377.6,Driller,98.78, 2018-03-22 04:48:39, 2018-03-22 05:10:59,23377.6,22.3333,6.5,4.66667,11.1667,566,94,566-94,YES,Rotate,101.38,Anadarko Petroleum,Lateral,0.00,0.00,6.50,11.17,Driller1,20

23472.8,Driller,99.13, 2018-03-22 12:29:09, 2018-03-22 12:47:09,23472.8,18,4.66667,3,10.3333,566,94,566-94,YES,Rotate,107.48,Anadarko Petroleum,Lateral,0.00,0.00,4.67,10.33,Driller1,18

23566.1,Driller,98.33, 2018-03-22 19:23:39, 2018-03-22 19:47:39,23566.1,24,7,2.83333,14.1667,566,94,566-94,YES,Rotate,106.72,Anadarko Petroleum,Lateral,0.00,0.00,7.00,14.17,Driller2,20

641.32,Driller,30.4044,5/7/2018 12:18:45,5/7/2018 13:37:35,641.324,78.83,5.67,5.00,68.17,867,54,867-54,YES,Slide,82.9597, Conoco Canada ,Vertical,0.00,0.00,5.67,68.17,Driller1,20

669.95,Driller,30.284,5/7/2018 14:21:21,5/7/2018 14:32:11,669.955,10.83,4.33,3.83,2.67,867,54,867-54,NO,Slide,83.0257, Conoco Canada ,Vertical,0.00,0.00,4.33,2.67,Driller1,10.83333

699.87,Hybrid,30.128,5/7/2018 15:01:46,5/7/2018 15:19:06,699.87,17.33,9.83,5.00,2.50,867,54,867-54,YES,Slide,86.1816, Conoco Canada ,Vertical,0.00,0.00,9.83,2.50,Driller1,17.33333

728.55,Driller,30.06,5/7/2018 15:49:53,5/7/2018 16:03:13,728.552,13.33,5.50,6.33,1.50,867,54,867-54,YES,Slide,83.4, Conoco Canada ,Vertical,0.00,3.97,1.53,1.50,Driller1,13.33333

757.32,Novos,30.1976,5/7/2018 16:29:59,5/7/2018 16:42:49,757.32,12.83,5.67,5.17,2.00,867,54,867-54,YES,Slide,84.2171, Conoco Canada ,Vertical,0.00,4.02,1.65,2.00,Driller1,12.83334

786.41,Driller,30.3608,5/7/2018 17:08:10,5/7/2018 17:24:30,786.417,16.33,6.00,6.83,3.50,867,54,867-54,YES,Slide,85.0142, Conoco Canada ,Vertical,0.00,4.03,1.97,3.50,Driller1,16.33333

815.14,Driller,30.3719,5/7/2018 17:49:28,5/7/2018 18:23:08,815.149,33.67,10.67,21.50,1.50,867,54,867-54,NO,Slide,93.4463, Conoco Canada ,Vertical,0.00,0.00,10.67,1.50,Driller1,20

844.16,Driller,30.4011,5/7/2018 18:46:24,5/7/2018 18:57:54,844.168,11.50,5.83,3.83,1.83,867,54,867-54,YES,Slide,88.9842, Conoco Canada ,Vertical,0.00,3.97,1.87,1.83,Driller2,11.49999

872.97,Hybrid,30.4059,5/7/2018 19:21:06,5/7/2018 19:40:46,872.97,19.67,14.33,3.83,1.50,867,54,867-54,YES,Slide,92.7944, Conoco Canada ,Vertical,0.00,0.00,14.33,1.50,Driller2,19.66663

901.75,Hybrid,30.1507,5/7/2018 20:07:18,5/7/2018 20:21:18,901.75,14.00,6.00,6.67,1.33,867,54,867-54,YES,Slide,87.3539, Conoco Canada ,Vertical,0.00,0.00,6.00,1.33,Driller2,14

930.47,Driller,33.915,5/7/2018 20:48:52,5/7/2018 21:01:12,930.473,12.33,5.50,5.33,1.50,867,54,867-54,YES,Slide,87.9637, Conoco Canada ,Vertical,0.00,0.00,5.50,1.50,Driller2,12.33333

959.18,Driller,29.9762,5/7/2018 21:25:19,5/7/2018 21:43:59,959.185,18.67,5.83,3.83,9.00,867,54,867-54,YES,Slide,91.9895, Conoco Canada ,Vertical,0.00,0.00,5.83,9.00,Driller2,18.66666

987.87,Driller,29.9336,5/7/2018 22:14:15,5/7/2018 22:24:35,987.875,10.33,5.00,3.83,1.50,867,54,867-54,YES,Slide,83.364, Conoco Canada ,Vertical,0.00,4.00,1.00,1.50,Driller2,10.33333

1016.8,Hybrid,30.021,5/7/2018 22:51:30,5/7/2018 23:02:50,1016.8,11.33,6.17,2.83,2.33,867,54,867-54,YES,Slide,88.0259, Conoco Canada ,Vertical,0.00,0.00,6.17,2.33,Driller2,11.33333

1045.58,Novos,30.1492,5/7/2018 23:58:53,5/8/2018 0:09:13,1045.58,10.33,5.17,3.67,1.50,867,54,867-54,YES,Slide,89.9719, Conoco Canada ,Vertical,0.00,4.18,0.98,1.50,Driller2,10.33334

1074.48,Hybrid,30.0215,5/8/2018 0:39:16,5/8/2018 0:49:26,1074.48,10.17,5.17,3.67,1.33,867,54,867-54,YES,Slide,88.1192, Conoco Canada ,Vertical,0.00,4.25,0.92,1.33,Driller2,10.16667

1103.21,Novos,30.2155,5/8/2018 1:19:45,5/8/2018 1:29:15,1103.21,9.50,5.17,3.00,1.33,867,54,867-54,YES,Slide,86.5068, Conoco Canada ,Vertical,0.00,4.20,0.97,1.33,Driller2,9.5

1132.06,Novos,30.1702,5/8/2018 1:52:56,5/8/2018 2:03:26,1132.06,10.50,5.50,3.67,1.33,867,54,867-54,YES,Slide,83.9413, Conoco Canada ,Vertical,0.00,4.55,0.95,1.33,Driller2,10.5

1160.88,Hybrid,29.9662,5/8/2018 2:27:10,5/8/2018 2:38:40,1160.88,11.50,7.00,2.67,1.83,867,54,867-54,YES,Slide,91.9996, Conoco Canada ,Vertical,0.00,4.85,2.15,1.83,Driller2,11.5

1189.74,Hybrid,32.0835,5/8/2018 3:02:24,5/8/2018 3:14:14,1189.74,11.83,7.50,2.67,1.67,867,54,867-54,YES,Slide,95.7501, Conoco Canada ,Vertical,0.00,0.00,7.50,1.67,Driller2,11.83334

1218.52,Novos,30.1718,5/8/2018 3:37:39,5/8/2018 3:48:29,1218.52,10.83,5.50,3.67,1.67,867,54,867-54,YES,Slide,96.301, Conoco Canada ,Vertical,0.00,4.55,0.95,1.67,Driller2,10.83334

1247.53,Novos,30.0009,5/8/2018 4:20:39,5/8/2018 4:33:59,1247.53,13.33,5.83,3.17,4.33,867,54,867-54,YES,Slide,88.0894, Conoco Canada ,Vertical,0.00,4.77,1.07,4.33,Driller2,13.33333

1276.43,Novos,29.933,5/8/2018 5:12:28,5/8/2018 5:21:18,1276.43,8.83,5.33,2.67,0.83,867,54,867-54,YES,Slide,94.2973, Conoco Canada ,Vertical,0.00,4.25,1.08,0.83,Driller2,8.833333

1305.15,Novos,30.1042,5/8/2018 6:02:39,5/8/2018 6:13:19,1305.15,10.67,4.83,2.67,3.17,867,54,867-54,YES,Slide,95.1658, Conoco Canada ,Vertical,0.00,3.95,0.88,3.17,Driller1,10.66667

1334.03,Hybrid,29.8894,5/8/2018 7:18:59,5/8/2018 7:37:39,1334.03,18.67,10.50,6.67,1.50,867,54,867-54,YES,Slide,94.8466, Conoco Canada ,Vertical,0.00,0.00,10.50,1.50,Driller1,18.66667

1362.84,Driller,33.9129,5/8/2018 10:22:27,5/8/2018 10:58:27,1362.84,36.00,21.00,2.00,13.00,867,54,867-54,YES,Slide,98.4694, Conoco Canada ,Vertical,0.00,0.00,21.00,13.00,Driller1,20

1391.48,Novos,30.1005,5/8/2018 13:25:26,5/8/2018 13:39:46,1391.48,14.33,5.67,3.83,4.83,867,54,867-54,YES,Slide,100.006, Conoco Canada ,Build,0.00,3.88,1.78,4.83,Driller1,14.33333

1420.49,Hybrid,30.15,5/8/2018 16:39:03,5/8/2018 17:28:53,1420.49,49.83,5.50,39.33,5.00,867,54,867-54,NO,Slide,99.8778, Conoco Canada ,Build,0.00,0.00,5.50,5.00,Driller1,20

1449.28,Driller,30.2975,5/8/2018 19:59:39,5/8/2018 20:16:25,1449.28,16.77,8.57,0.30,7.90,867,54,867-54,YES,Slide,99.8319, Conoco Canada ,Build,0.00,0.00,8.57,7.90,Driller2,16.76667

1478.21,Hybrid,33.9009,5/8/2018 22:40:55,5/8/2018 23:04:55,1478.21,24.00,9.67,4.50,9.83,867,54,867-54,YES,Slide,100.455, Conoco Canada ,Build,6.43,0.00,9.67,3.40,Driller2,20

1506.94,Hybrid,30.1577,5/9/2018 1:52:30,5/9/2018 2:16:20,1506.94,23.83,15.17,3.17,5.50,867,54,867-54,YES,Slide,101.489, Conoco Canada ,Build,0.00,0.00,15.17,5.50,Driller2,20

1535.73,Hybrid,30.0603,5/9/2018 5:40:25,5/9/2018 6:09:35,1535.73,29.17,21.33,3.83,4.00,867,54,867-54,YES,Slide,100.668, Conoco Canada ,Build,0.00,0.00,21.33,4.00,Driller2,20

1564.64,Driller,33.9068,5/9/2018 10:04:32,5/9/2018 10:18:12,1564.64,13.67,3.67,4.83,5.17,867,54,867-54,YES,Slide,101.568, Conoco Canada ,Build,0.00,0.00,3.67,5.17,Driller1,13.66667

1593.36,Driller,29.9786,5/9/2018 12:55:10,5/9/2018 13:12:50,1593.36,17.67,8.17,4.33,5.17,867,54,867-54,YES,Slide,102.599, Conoco Canada ,Build,0.00,0.00,8.17,5.17,Driller1,17.66667

1622.06,Novos,29.9189,5/9/2018 15:49:08,5/9/2018 16:01:42,1622.06,12.57,5.07,0.73,6.77,867,54,867-54,YES,Slide,104.698, Conoco Canada ,Build,0.00,3.90,1.17,6.77,Driller1,12.566673

1651.06,Hybrid,33.8736,5/9/2018 19:18:13,5/9/2018 19:37:43,1651.06,19.50,8.67,5.83,5.00,867,54,867-54,YES,Slide,108.082, Conoco Canada ,Build,0.00,0.00,8.67,5.00,Driller2,19.5

1679.74,Hybrid,30.114,5/9/2018 23:05:35,5/9/2018 23:39:15,1679.74,33.67,26.17,3.67,3.83,867,54,867-54,YES,Slide,104.631, Conoco Canada ,Build,0.00,0.00,26.17,3.83,Driller2,20

1708.5,Hybrid,33.8765,5/10/2018 3:00:10,5/10/2018 3:10:10,1708.5,10.00,3.67,4.83,1.50,867,54,867-54,YES,Slide,102.504, Conoco Canada ,Build,0.00,0.00,3.67,1.50,Driller2,10

1737.35,Driller,30.175,5/10/2018 6:39:59,5/10/2018 7:01:39,1737.35,21.67,12.50,4.67,4.50,867,54,867-54,YES,Slide,103.222, Conoco Canada ,Build,0.00,0.00,12.50,4.50,Driller1,20

1766.02,Novos,33.7939,5/10/2018 10:19:59,5/10/2018 10:33:14,1766.02,13.25,4.83,1.05,7.37,867,54,867-54,YES,Slide,100.874, Conoco Canada ,Build,0.00,3.90,0.93,7.37,Driller1,13.25

1794.94,Novos,30.2494,5/10/2018 14:27:44,5/10/2018 14:49:44,1794.94,22.00,5.42,0.85,15.73,867,54,867-54,YES,Slide,101.711, Conoco Canada ,Build,0.00,4.45,0.97,15.73,Driller1,20

1823.82,Hybrid,30.1494,5/10/2018 18:46:18,5/10/2018 19:10:58,1823.82,24.67,13.83,3.83,7.00,867,54,867-54,YES,Slide,104.529, Conoco Canada ,Build,5.27,0.00,13.83,1.73,Driller2,20

1852.4,Novos,33.8719,5/11/2018 0:36:57,5/11/2018 0:52:07,1852.4,15.17,4.83,5.67,4.67,867,54,867-54,YES,Slide,100.736, Conoco Canada ,Build,0.00,3.90,0.93,4.67,Driller2,15.16667

1881.28,Hybrid,30.3619,5/11/2018 6:35:18,5/11/2018 6:53:16,1881.28,17.97,13.57,0.22,4.18,867,54,867-54,YES,Slide,106.527, Conoco Canada ,Build,0.00,0.00,13.57,4.18,Driller1,17.966697

1894.51,Hybrid,30.2646,5/12/2018 2:53:34,5/12/2018 3:04:54,1894.51,11.33,4.67,3.67,3.00,867,54,867-54,YES,Slide,106.129, Conoco Canada ,Build,0.00,0.00,4.67,3.00,Driller2,11.33334

1923.72,Driller,30.3202,5/12/2018 4:55:50,5/12/2018 5:09:30,1923.72,13.67,6.00,3.50,4.17,867,54,867-54,YES,Slide,108.965, Conoco Canada ,Build,0.00,0.00,6.00,4.17,Driller2,13.66667

1952.54,Driller,33.9111,5/12/2018 11:27:51,5/12/2018 11:41:28,1952.54,13.62,5.83,0.50,7.28,867,54,867-54,YES,Slide,106.958, Conoco Canada ,Build,0.00,0.00,5.83,7.28,Driller1,13.61666

1981.41,Driller,30.4105,5/12/2018 17:58:44,5/12/2018 18:27:14,1981.41,28.50,19.67,4.00,4.83,867,54,867-54,YES,Slide,122.397, Conoco Canada ,Build,0.00,0.00,19.67,4.83,Driller1,20

2010.37,Hybrid,30.3288,5/13/2018 13:22:48,5/13/2018 13:39:38,2010.37,16.83,6.00,4.50,6.33,867,54,867-54,YES,Slide,109.172, Conoco Canada ,Build,0.00,0.00,6.00,6.33,Driller1,16.83333

2039.04,Hybrid,30.0198,5/13/2018 16:33:03,5/13/2018 17:01:13,2039.04,28.17,14.17,3.83,10.17,867,54,867-54,YES,Slide,112.347, Conoco Canada ,Build,0.00,0.00,14.17,10.17,Driller1,20

2067.84,Hybrid,30.0334,5/13/2018 20:12:53,5/13/2018 20:29:43,2067.84,16.83,8.17,3.83,4.83,867,54,867-54,NO,Slide,110.37, Conoco Canada ,Build,0.00,0.00,8.17,4.83,Driller2,16.83333

2096.7,Driller,33.7572,5/14/2018 0:13:08,5/14/2018 0:27:38,2096.7,14.50,5.33,4.67,4.50,867,54,867-54,YES,Slide,113.483, Conoco Canada ,Build,0.00,0.00,5.33,4.50,Driller2,14.5

2125.57,Hybrid,30.3116,5/14/2018 6:51:36,5/14/2018 7:16:46,2125.57,25.17,14.00,4.83,6.33,867,54,867-54,YES,Slide,116.419, Conoco Canada ,Build,0.00,0.00,14.00,6.33,Driller1,20

2154.47,Hybrid,33.7351,5/14/2018 13:54:52,5/14/2018 14:13:22,2154.47,18.50,8.50,5.33,4.67,867,54,867-54,YES,Slide,116.945, Conoco Canada ,Build,0.00,0.00,8.50,4.67,Driller1,18.5

2183.26,Driller,33.7637,5/14/2018 22:07:22,5/14/2018 22:26:42,2183.26,19.33,11.67,5.00,2.67,867,54,867-54,YES,Slide,116.957, Conoco Canada ,Build,0.00,0.00,11.67,2.67,Driller2,19.33337

2212.19,Driller,30.2357,5/15/2018 4:45:01,5/15/2018 5:17:51,2212.19,32.83,22.67,3.67,6.50,867,54,867-54,YES,Slide,118.418, Conoco Canada ,Build,0.00,0.00,22.67,6.50,Driller2,20

2240.56,Hybrid,33.7588,5/15/2018 17:05:49,5/15/2018 17:31:19,2240.56,25.50,18.33,6.50,0.67,867,54,867-54,YES,Slide,105.399, Conoco Canada ,Build,0.00,0.00,18.33,0.67,Driller1,20

2269.21,Driller,33.7132,5/16/2018 0:35:00,5/16/2018 0:55:40,2269.21,20.67,4.67,6.50,9.50,867,54,867-54,YES,Slide,106.995, Conoco Canada ,Build,0.00,0.00,4.67,9.50,Driller2,20

2298.57,Driller,30.1795,5/16/2018 7:25:48,5/16/2018 7:47:08,2298.57,21.33,12.17,3.83,5.33,867,54,867-54,YES,Slide,105.248, Conoco Canada ,Build,0.00,0.00,12.17,5.33,Driller1,20

2327.23,Driller,33.57,5/16/2018 11:58:00,5/16/2018 12:18:30,2327.23,20.50,7.00,6.33,7.17,867,54,867-54,YES,Slide,38.45, Conoco Canada ,Build,0.00,0.00,7.00,7.17,Driller1,20

2397.44,Driller,31.27,5/17/2018 17:40:30,5/17/2018 17:52:20,2397.44,11.83,5.33,3.17,3.33,867,54,867-54,YES,Slide,34.11, Conoco Canada ,Build,0.00,0.00,5.33,3.33,Driller1,11.83333

2426.31,Driller,33.41,5/17/2018 20:08:30,5/17/2018 20:18:50,2426.31,10.33,2.67,3.83,3.83,867,54,867-54,YES,Slide,33.78, Conoco Canada ,Build,0.00,0.00,2.67,3.83,Driller2,10.33333

2455.23,Driller,29.9,5/17/2018 22:42:20,5/17/2018 22:56:20,2455.23,14.00,7.33,3.83,2.83,867,54,867-54,YES,Slide,32.63, Conoco Canada ,Build,0.00,0.00,7.33,2.83,Driller2,13.99999

2483.83,Driller,30.6,5/18/2018 0:08:20,5/18/2018 0:23:40,2483.83,15.33,6.33,4.17,4.83,867,54,867-54,YES,Slide,34.69, Conoco Canada ,Lateral,0.00,0.00,6.33,4.83,Driller2,15.33333

2512.64,Driller,33.77,5/18/2018 2:48:20,5/18/2018 3:26:50,2512.64,38.50,20.00,1.17,17.33,867,54,867-54,YES,Slide,34.53, Conoco Canada ,Lateral,0.00,0.00,20.00,17.33,Driller2,20

2541.52,Driller,29.92,5/18/2018 4:46:50,5/18/2018 5:04:10,2541.52,17.33,7.33,5.50,4.50,867,54,867-54,YES,Slide,33.32, Conoco Canada ,Lateral,0.00,0.00,7.33,4.50,Driller2,17.33333

2570.24,Driller,33.68,5/18/2018 6:46:20,5/18/2018 7:01:50,2570.24,15.50,5.50,5.33,4.67,867,54,867-54,YES,Slide,33.41, Conoco Canada ,Lateral,0.00,0.00,5.50,4.67,Driller1,15.5

2599.31,Driller,30.204,5/19/2018 2:39:26,5/19/2018 2:59:56,2599.31,20.50,11.00,4.33,5.17,867,54,867-54,YES,Slide,95.2313, Conoco Canada ,Lateral,0.00,0.00,11.00,5.17,Driller2,20

2627.86,Driller,30.2832,5/19/2018 4:15:10,5/19/2018 4:32:20,2627.86,17.17,6.33,5.83,5.00,867,54,867-54,YES,Slide,89.0959, Conoco Canada ,Lateral,0.00,0.00,6.33,5.00,Driller2,17.16666

2656.82,Driller,33.8864,5/19/2018 9:35:52,5/19/2018 9:46:42,2656.82,10.83,4.83,4.33,1.67,867,54,867-54,YES,Slide,86.2674, Conoco Canada ,Lateral,0.00,0.00,4.83,1.67,Driller1,10.83333

2685.75,Driller,30.0252,5/19/2018 11:01:26,5/19/2018 11:14:46,2685.75,13.33,4.50,3.50,5.33,867,54,867-54,YES,Slide,86.874, Conoco Canada ,Lateral,0.00,0.00,4.50,5.33,Driller1,13.33333

2714.69,Hybrid,29.9901,5/19/2018 12:35:41,5/19/2018 13:00:31,2714.69,24.83,9.33,8.17,7.33,867,54,867-54,NO,Slide,90.7908, Conoco Canada ,Lateral,0.00,0.00,9.33,7.33,Driller1,20

2749.64,Hybrid,30.9528,5/21/2018 5:17:50,5/21/2018 5:45:10,2749.64,27.33,5.33,5.17,16.83,867,54,867-54,YES,Slide,94.4891, Conoco Canada ,Lateral,0.00,0.00,5.33,16.83,Driller2,20

2779.43,Driller,30.2751,5/21/2018 7:07:35,5/21/2018 7:29:35,2779.43,22.00,14.50,4.17,3.33,867,54,867-54,YES,Slide,92.4314, Conoco Canada ,Lateral,0.00,0.00,14.50,3.33,Driller1,20

2808.11,Hybrid,33.8635,5/21/2018 8:43:20,5/21/2018 9:00:00,2808.11,16.67,8.33,5.00,3.33,867,54,867-54,NO,Slide,89.1349, Conoco Canada ,Lateral,0.00,5.17,3.17,3.33,Driller1,16.66666

2836.85,Novos,30.1937,5/21/2018 10:32:41,5/21/2018 10:51:11,2836.85,18.50,6.17,5.33,7.00,867,54,867-54,YES,Slide,95.1611, Conoco Canada ,Lateral,0.00,4.85,1.32,7.00,Driller1,18.5

2866.04,Hybrid,30.0149,5/21/2018 12:01:26,5/21/2018 12:14:48,2866.04,13.37,3.47,0.08,9.82,867,54,867-54,NO,Slide,101.233, Conoco Canada ,Lateral,0.00,0.00,3.47,9.82,Driller1,13.3666733

2894.74,Novos,30.2022,5/21/2018 13:47:16,5/21/2018 14:09:06,2894.74,21.83,6.50,4.83,10.50,867,54,867-54,YES,Slide,95.3058, Conoco Canada ,Lateral,0.00,5.27,1.23,10.50,Driller1,20

2923.69,Hybrid,30.1064,5/21/2018 19:34:10,5/21/2018 19:59:40,2923.69,25.50,5.33,8.50,11.67,867,54,867-54,NO,Slide,90.2528, Conoco Canada ,Lateral,0.00,0.00,5.33,11.67,Driller2,20

2946.82,Driller,30.0669,5/22/2018 19:15:14,5/22/2018 19:44:44,2946.82,29.50,6.67,4.67,18.17,867,54,867-54,YES,Slide,90.8268, Conoco Canada ,Lateral,0.00,0.00,6.67,18.17,Driller2,20

2975.95,Novos,33.7963,5/22/2018 21:10:57,5/22/2018 21:35:47,2975.95,24.83,5.67,8.17,11.00,867,54,867-54,NO,Slide,85.1825, Conoco Canada ,Lateral,0.00,4.50,1.17,11.00,Driller2,20

3004.97,Hybrid,30.1451,5/22/2018 22:40:38,5/22/2018 23:05:38,3004.97,25.00,11.50,4.33,9.17,867,54,867-54,YES,Slide,83.1841, Conoco Canada ,Lateral,7.02,0.00,11.50,2.15,Driller2,20

3033.71,Novos,30.3572,5/23/2018 0:10:25,5/23/2018 0:32:45,3033.71,22.33,5.50,4.33,12.50,867,54,867-54,YES,Slide,76.8719, Conoco Canada ,Lateral,9.93,0.00,5.50,2.57,Driller2,20

3062.67,Novos,30.3266,5/23/2018 2:01:25,5/23/2018 2:16:55,3062.67,15.50,6.17,4.33,5.00,867,54,867-54,YES,Slide,79.9401, Conoco Canada ,Lateral,0.00,4.93,1.23,5.00,Driller2,15.5

3091.42,Novos,30.3961,5/23/2018 3:23:40,5/23/2018 3:39:50,3091.42,16.17,6.00,4.83,5.33,867,54,867-54,YES,Slide,77.8086, Conoco Canada ,Lateral,0.00,4.62,1.38,5.33,Driller2,16.16666

3120.17,Novos,30.4315,5/23/2018 4:48:25,5/23/2018 5:11:35,3120.17,23.17,5.67,4.17,13.33,867,54,867-54,YES,Slide,74.8008, Conoco Canada ,Lateral,11.67,4.55,1.12,1.67,Driller2,20

3149.09,Hybrid,30.2428,5/23/2018 6:51:24,5/23/2018 7:33:44,3149.09,42.33,16.17,4.17,22.00,867,54,867-54,YES,Slide,80.5948, Conoco Canada ,Lateral,0.00,0.00,16.17,22.00,Driller1,20

3192.89,Novos,30.0082,5/23/2018 14:21:45,5/23/2018 14:58:15,3192.89,36.50,22.50,3.33,10.67,867,54,867-54,YES,Slide,100.498, Conoco Canada ,Lateral,0.00,4.67,17.83,10.67,Driller1,20

3221.78,Hybrid,30.1709,5/23/2018 16:29:53,5/23/2018 16:53:33,3221.78,23.67,13.00,3.17,7.50,867,54,867-54,YES,Slide,97.2134, Conoco Canada ,Lateral,0.00,0.00,13.00,7.50,Driller1,20

3250.74,Hybrid,33.8376,5/23/2018 18:35:04,5/23/2018 19:01:34,3250.74,26.50,12.00,5.50,9.00,867,54,867-54,YES,Slide,100.065, Conoco Canada ,Lateral,0.00,0.00,12.00,9.00,Driller2,20

3279.54,Hybrid,30.2349,5/23/2018 20:30:07,5/23/2018 20:48:17,3279.54,18.17,11.17,4.83,2.17,867,54,867-54,YES,Slide,96.9222, Conoco Canada ,Lateral,0.00,4.52,6.65,2.17,Driller2,18.1667

3308.33,Hybrid,30.15,5/23/2018 22:08:12,5/23/2018 22:30:22,3308.33,22.17,11.83,3.83,6.50,867,54,867-54,YES,Slide,100.582, Conoco Canada ,Lateral,0.00,0.00,11.83,6.50,Driller2,20

3337.37,Hybrid,30.4368,5/24/2018 0:11:02,5/24/2018 0:29:32,3337.37,18.50,8.83,4.00,5.67,867,54,867-54,YES,Slide,97.3812, Conoco Canada ,Lateral,0.00,0.00,8.83,5.67,Driller2,18.5

3366.14,Hybrid,33.8607,5/24/2018 2:09:07,5/24/2018 2:29:37,3366.14,20.50,7.17,4.67,8.67,867,54,867-54,YES,Slide,96.8442, Conoco Canada ,Lateral,0.00,4.77,2.40,8.67,Driller2,20

3394.97,Hybrid,30.1458,5/24/2018 3:58:10,5/24/2018 4:12:20,3394.97,14.17,6.17,3.50,4.50,867,54,867-54,YES,Slide,97.9505, Conoco Canada ,Lateral,0.00,0.00,6.17,4.50,Driller2,14.16667

3423.72,Hybrid,29.9866,5/24/2018 5:41:08,5/24/2018 6:01:48,3423.72,20.67,10.67,3.17,6.83,867,54,867-54,YES,Slide,102.048, Conoco Canada ,Lateral,0.00,0.00,10.67,6.83,Driller2,20

3452.49,Hybrid,30.1234,5/24/2018 7:39:22,5/24/2018 8:01:42,3452.49,22.33,11.00,3.67,7.67,867,54,867-54,YES,Slide,98.5384, Conoco Canada ,Lateral,0.00,0.00,11.00,7.67,Driller1,20

3481.42,Novos,33.8454,5/24/2018 9:29:25,5/24/2018 9:52:25,3481.42,23.00,5.83,6.00,11.17,867,54,867-54,YES,Slide,88.248, Conoco Canada ,Lateral,7.00,4.57,1.27,4.17,Driller1,20

3510.39,Hybrid,30.3787,5/24/2018 15:12:04,5/24/2018 15:29:44,3510.39,17.67,6.50,3.83,7.33,867,54,867-54,YES,Slide,97.2016, Conoco Canada ,Lateral,6.05,4.77,1.73,1.28,Driller1,17.66666

3539.21,Hybrid,30.1817,5/24/2018 17:04:01,5/24/2018 17:21:41,3539.21,17.67,6.00,4.33,7.33,867,54,867-54,YES,Slide,96.6829, Conoco Canada ,Lateral,5.15,0.00,6.00,2.18,Driller1,17.66666

3567.91,Hybrid,30.2462,5/24/2018 19:15:45,5/24/2018 19:42:55,3567.91,27.17,15.50,4.17,7.50,867,54,867-54,YES,Slide,102.591, Conoco Canada ,Lateral,2.55,0.00,15.50,4.95,Driller2,20

3596.77,Hybrid,33.8152,5/24/2018 21:31:03,5/24/2018 21:49:43,3596.77,18.67,6.33,4.00,8.33,867,54,867-54,YES,Slide,97.4437, Conoco Canada ,Lateral,0.00,4.28,2.05,8.33,Driller2,18.66666

3625.64,Hybrid,30.002,5/24/2018 23:38:40,5/24/2018 23:56:00,3625.64,17.33,7.50,3.67,6.17,867,54,867-54,YES,Slide,96.4601, Conoco Canada ,Lateral,3.55,4.28,3.22,2.62,Driller2,17.33334

3654.43,Hybrid,30.0126,5/25/2018 1:40:02,5/25/2018 2:10:02,3654.43,30.00,7.83,3.17,19.00,867,54,867-54,YES,Slide,96.6238, Conoco Canada ,Lateral,16.00,4.53,3.30,3.00,Driller2,20

3683.37,Hybrid,30.1263,5/25/2018 3:44:23,5/25/2018 4:04:33,3683.37,20.17,10.67,4.50,5.00,867,54,867-54,YES,Slide,103.212, Conoco Canada ,Lateral,0.00,4.58,6.08,5.00,Driller2,20

3712.3,Hybrid,30.0458,5/25/2018 5:19:36,5/25/2018 5:45:46,3712.3,26.17,13.67,3.67,8.83,867,54,867-54,YES,Slide,100.582, Conoco Canada ,Lateral,0.00,0.00,13.67,8.83,Driller2,20

3741.08,Hybrid,30.0579,5/25/2018 7:30:37,5/25/2018 7:46:37,3741.08,16.00,7.17,3.50,5.33,867,54,867-54,YES,Slide,99.8948, Conoco Canada ,Lateral,0.00,4.85,2.32,5.33,Driller1,16

3769.8,Driller,33.8621,5/25/2018 9:17:15,5/25/2018 9:35:25,3769.8,18.17,6.00,5.67,6.50,867,54,867-54,YES,Slide,99.0978, Conoco Canada ,Lateral,3.37,0.00,6.00,3.13,Driller1,18.16667

3798.81,Hybrid,30.1236,5/25/2018 11:30:26,5/25/2018 11:49:06,3798.81,18.67,5.67,6.00,7.00,867,54,867-54,YES,Slide,100.845, Conoco Canada ,Lateral,4.22,0.00,5.67,2.78,Driller1,18.66667

3827.49,Hybrid,30.2555,5/25/2018 13:08:06,5/25/2018 13:33:56,3827.49,25.83,8.33,4.67,12.83,867,54,867-54,YES,Slide,103.848, Conoco Canada ,Lateral,11.47,0.00,8.33,1.37,Driller1,20

3856.4,Hybrid,30.1954,5/25/2018 14:52:33,5/25/2018 15:21:03,3856.4,28.50,10.00,4.50,14.00,867,54,867-54,YES,Slide,101.731, Conoco Canada ,Lateral,10.15,4.30,5.70,3.85,Driller1,20

3885.35,Hybrid,30.2673,5/25/2018 19:21:43,5/25/2018 19:47:33,3885.35,25.83,12.83,4.17,8.83,867,54,867-54,YES,Slide,102.737, Conoco Canada ,Lateral,7.22,0.00,12.83,1.62,Driller2,20

3914.19,Hybrid,33.832,5/25/2018 21:09:14,5/25/2018 21:29:44,3914.19,20.50,11.00,3.83,5.67,867,54,867-54,YES,Slide,103.627, Conoco Canada ,Lateral,0.00,4.37,6.63,5.67,Driller2,20

3943.15,Hybrid,29.9365,5/25/2018 22:45:47,5/25/2018 23:06:37,3943.15,20.83,7.17,2.83,10.83,867,54,867-54,NO,Slide,102.305, Conoco Canada ,Lateral,0.00,4.38,2.78,10.83,Driller2,20

3951.2,Driller,8.21,5/25/2018 21:44:20,5/25/2018 22:01:10,3951.2,16.83,0.17,0.17,16.50,867,54,867-54,NO,Slide,46.63, Conoco Canada ,Lateral,0.00,0.00,0.17,16.50,Driller2,16.833334

3971.88,Driller,30.3019,5/26/2018 1:23:18,5/26/2018 2:10:28,3971.88,47.17,30.50,3.17,13.50,867,54,867-54,NO,Slide,102.426, Conoco Canada ,Lateral,0.00,0.00,30.50,13.50,Driller2,20

4000.65,Hybrid,30.0277,5/26/2018 4:44:44,5/26/2018 5:18:24,4000.65,33.67,7.67,3.50,22.50,867,54,867-54,YES,Slide,100.969, Conoco Canada ,Lateral,0.00,4.55,3.12,22.50,Driller2,20

4029.49,Hybrid,29.9601,5/26/2018 7:10:22,5/26/2018 8:01:22,4029.49,51.00,24.33,7.00,19.67,867,54,867-54,YES,Slide,105.553, Conoco Canada ,Lateral,0.00,0.00,24.33,19.67,Driller1,20

4058.26,Hybrid,33.8015,5/26/2018 9:16:28,5/26/2018 9:38:48,4058.26,22.33,6.00,6.17,10.17,867,54,867-54,NO,Slide,102.679, Conoco Canada ,Lateral,8.75,4.32,1.68,1.42,Driller1,20

4087.09,Hybrid,30.3625,5/26/2018 11:10:41,5/26/2018 11:29:11,4087.09,18.50,6.50,4.33,7.67,867,54,867-54,YES,Slide,103.046, Conoco Canada ,Lateral,6.03,0.00,6.50,1.63,Driller1,18.5

4115.97,Hybrid,30.312,5/26/2018 12:29:00,5/26/2018 12:47:10,4115.97,18.17,6.50,4.00,7.67,867,54,867-54,NO,Slide,104.48, Conoco Canada ,Lateral,6.22,0.00,6.50,1.45,Driller1,18.16667

4144.75,Hybrid,30.3165,5/26/2018 14:38:19,5/26/2018 14:56:19,4144.75,18.00,6.00,4.50,7.50,867,54,867-54,NO,Slide,103.736, Conoco Canada ,Lateral,5.78,0.00,6.00,1.72,Driller1,18

4173.53,Hybrid,30.1353,5/26/2018 16:27:25,5/26/2018 16:46:15,4173.53,18.83,8.17,4.17,6.50,867,54,867-54,YES,Slide,106.051, Conoco Canada ,Lateral,4.90,0.00,8.17,1.60,Driller1,18.83334

4202.33,Hybrid,30.193,5/26/2018 18:07:49,5/26/2018 18:30:59,4202.33,23.17,15.50,4.33,3.33,867,54,867-54,YES,Slide,104.764, Conoco Canada ,Lateral,0.62,0.00,15.50,2.72,Driller2,20

4231.24,Hybrid,30.2904,5/26/2018 19:54:00,5/26/2018 20:10:50,4231.24,16.83,5.83,4.17,6.83,867,54,867-54,YES,Slide,101.879, Conoco Canada ,Lateral,5.53,0.00,5.83,1.30,Driller2,16.83333

4260.09,Hybrid,33.8593,5/26/2018 21:34:25,5/26/2018 21:57:55,4260.09,23.50,10.83,4.00,8.67,867,54,867-54,YES,Slide,106.611, Conoco Canada ,Lateral,0.00,4.38,6.45,8.67,Driller2,20

4289.05,Hybrid,29.9145,5/26/2018 23:30:50,5/26/2018 23:57:10,4289.05,26.33,7.00,3.33,16.00,867,54,867-54,NO,Slide,100.091, Conoco Canada ,Lateral,0.00,4.47,2.53,16.00,Driller2,20

4317.9,Hybrid,30.2869,5/27/2018 2:02:08,5/27/2018 2:51:48,4317.9,49.67,12.67,4.00,33.00,867,54,867-54,NO,Slide,100.586, Conoco Canada ,Lateral,0.00,4.48,8.18,33.00,Driller2,20

4346.93,Hybrid,29.9251,5/27/2018 7:48:19,5/27/2018 8:18:29,4346.93,30.17,11.17,3.33,15.67,867,54,867-54,NO,Slide,99.7306, Conoco Canada ,Lateral,0.00,4.50,6.67,15.67,Driller1,20

4375.65,Hybrid,33.8107,5/27/2018 10:01:04,5/27/2018 10:24:44,4375.65,23.67,8.33,6.17,9.17,867,54,867-54,YES,Slide,102.822, Conoco Canada ,Lateral,8.23,0.00,8.33,0.93,Driller1,20

4404.5,Hybrid,30.5178,5/27/2018 12:11:07,5/27/2018 12:28:07,4404.5,17.00,6.00,4.50,6.50,867,54,867-54,NO,Slide,100.854, Conoco Canada ,Lateral,4.93,0.00,6.00,1.57,Driller1,17

4433.46,Hybrid,30.5081,5/27/2018 13:48:01,5/27/2018 14:05:41,4433.46,17.67,6.33,5.33,6.00,867,54,867-54,YES,Slide,101.314, Conoco Canada ,Lateral,4.62,0.00,6.33,1.38,Driller1,17.66666

4462.26,Hybrid,30.176,5/27/2018 16:10:25,5/27/2018 16:21:34,4462.26,11.15,5.43,0.48,5.23,867,54,867-54,YES,Slide,100.764, Conoco Canada ,Lateral,3.50,0.00,5.43,1.73,Driller1,11.149993

4471.2,Driller,9.85,5/27/2018 15:26:30,5/27/2018 15:35:30,4471.2,9.00,0.17,0.17,8.67,867,54,867-54,NO,Slide,60.79, Conoco Canada ,Lateral,0.00,0.00,0.17,8.67,Driller1,9.000004

4490.9,Hybrid,30.3384,5/27/2018 18:57:26,5/27/2018 19:17:11,4490.9,19.75,6.65,0.05,13.05,867,54,867-54,NO,Slide,104.66, Conoco Canada ,Lateral,0.00,0.00,6.65,13.05,Driller2,19.75

4519.76,Hybrid,33.8186,5/28/2018 0:52:23,5/28/2018 1:04:22,4519.76,11.98,4.62,0.12,7.25,867,54,867-54,NO,Slide,101.885, Conoco Canada ,Lateral,0.00,0.00,4.62,7.25,Driller2,11.983337

4548.62,Novos,30.1602,5/28/2018 2:29:11,5/28/2018 2:40:40,4548.62,11.48,6.13,1.20,4.15,867,54,867-54,YES,Slide,104.08, Conoco Canada ,Lateral,0.00,4.60,1.53,4.15,Driller2,11.48333

4576.74,Novos,30.1944,5/28/2018 4:05:46,5/28/2018 4:31:26,4576.74,25.67,6.83,1.83,17.00,867,54,867-54,YES,Slide,104.308, Conoco Canada ,Lateral,0.00,4.98,1.85,17.00,Driller2,20

4606.03,Novos,31.9709,5/28/2018 5:58:06,5/28/2018 6:42:02,4606.03,43.93,7.98,1.02,34.93,867,54,867-54,YES,Slide,107.47, Conoco Canada ,Lateral,0.00,4.78,3.20,34.93,Driller2,20

4634.03,Driller,28.6838,5/28/2018 8:35:14,5/28/2018 8:45:38,4634.03,10.40,9.37,0.02,1.02,867,54,867-54,NO,Slide,113.718, Conoco Canada ,Lateral,0.00,0.00,9.37,1.02,Driller1,10.4000067

4664.39,Hybrid,30.3392,5/28/2018 11:10:29,5/28/2018 11:30:39,4664.39,20.17,6.17,5.50,8.50,867,54,867-54,YES,Slide,102.012, Conoco Canada ,Lateral,0.00,0.00,6.17,8.50,Driller1,20

4692.84,Hybrid,30.563,5/28/2018 12:36:29,5/28/2018 12:57:49,4692.84,21.33,5.50,8.00,7.83,867,54,867-54,NO,Slide,100.594, Conoco Canada ,Lateral,0.00,0.00,5.50,7.83,Driller1,20

4721.85,Hybrid,30.0453,5/28/2018 14:14:49,5/28/2018 14:38:49,4721.85,24.00,6.83,1.50,15.67,867,54,867-54,YES,Slide,107.069, Conoco Canada ,Lateral,12.00,0.00,6.83,3.67,Driller1,20

4733.6,Hybrid,9.36,5/28/2018 12:44:20,5/28/2018 12:59:40,4733.6,15.33,1.83,6.83,6.67,867,54,867-54,YES,Slide,55.12, Conoco Canada ,Lateral,0.00,0.00,1.83,6.67,Driller1,15.33333

4750.81,Hybrid,30.1514,5/28/2018 17:00:32,5/28/2018 17:23:02,4750.81,22.50,9.33,5.33,7.83,867,54,867-54,YES,Slide,93.9159, Conoco Canada ,Lateral,7.07,0.00,9.33,0.77,Driller1,20

4779.46,Hybrid,30.254,5/28/2018 18:31:30,5/28/2018 18:56:40,4779.46,25.17,12.50,8.17,4.50,867,54,867-54,NO,Slide,86.8102, Conoco Canada ,Lateral,3.00,0.00,12.50,1.50,Driller2,20

4808.29,Hybrid,30.2256,5/28/2018 19:56:33,5/28/2018 20:15:23,4808.29,18.83,5.83,4.83,8.17,867,54,867-54,YES,Slide,88.8581, Conoco Canada ,Lateral,6.72,0.00,5.83,1.45,Driller2,18.83333

4837.01,Hybrid,33.841,5/28/2018 21:13:21,5/28/2018 22:00:01,4837.01,46.67,9.17,1.50,36.00,867,54,867-54,YES,Slide,112.235, Conoco Canada ,Lateral,0.00,0.00,9.17,36.00,Driller2,20

4865,Hybrid,30.1159,5/28/2018 23:10:16,5/28/2018 23:40:26,4865,30.17,8.83,3.67,17.67,867,54,867-54,YES,Slide,91.4957, Conoco Canada ,Lateral,0.00,0.00,8.83,17.67,Driller2,20

4893.67,Hybrid,29.563,5/29/2018 0:50:31,5/29/2018 1:11:33,4893.67,21.03,6.55,0.38,14.10,867,54,867-54,YES,Slide,89.5414, Conoco Canada ,Lateral,0.00,0.00,6.55,14.10,Driller2,20

``

On Friday, June 29, 2018 at 9:58:35 AM UTC-6, peng wang wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

If you like, I could upload my vs python project, you could run it and see how many minutes it will take to load locally. Thanks a lot, buddy

···

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

Actually,

Sorry I have to demur, this is way too much code to dive into. At this scale you are basically asking for free consulting, and I am not able to offer that. There are lots of tried and true ways you can try to profile things yourself. As a simple start, you can put in print statements with timestamps, to see what function or functions are actually taking lots of time. Once you have considerably narrowed the question and have an actual idea of where the slowness is, it's more likely that someone can help more directly.

Thanks,

Bryan

···

On Jun 29, 2018, at 11:12, peng wang <[email protected]> wrote:

If you like, I could upload my vs python project, you could run it and see how many minutes it will take to load locally. Thanks a lot, buddy

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:
Hi,

It's impossible to say without concrete information and details. If you can't share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang <[email protected]> wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.
For more options, visit https://groups.google.com/a/continuum.io/d/optout.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/514ccf09-607a-49bd-95a8-214010d9be4e%40continuum.io.
For more options, visit https://groups.google.com/a/continuum.io/d/optout.

Good, let me dive in and narrow down the problem.

···

Sent from Peng’s Gmail Mobile

The reason is I import data from *.csv file. this causes the delay.

···

On Friday, June 29, 2018 at 4:10:45 PM UTC-6, Jeffery wang wrote:

Good, let me dive in and narrow down the problem.

On Fri, Jun 29, 2018 at 2:28 PM Bryan Van de ven [email protected] wrote:

Actually,

Sorry I have to demur, this is way too much code to dive into. At this scale you are basically asking for free consulting, and I am not able to offer that. There are lots of tried and true ways you can try to profile things yourself. As a simple start, you can put in print statements with timestamps, to see what function or functions are actually taking lots of time. Once you have considerably narrowed the question and have an actual idea of where the slowness is, it’s more likely that someone can help more directly.

Thanks,

Bryan

On Jun 29, 2018, at 11:12, peng wang [email protected] wrote:

If you like, I could upload my vs python project, you could run it and see how many minutes it will take to load locally. Thanks a lot, buddy

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/514ccf09-607a-49bd-95a8-214010d9be4e%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/703A1BB2-76C7-49AA-B4E8-3B1BA612F7BB%40anaconda.com.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.


Sent from Peng’s Gmail Mobile

If it is the same data for every session, you could probably find a way to do it only once and let all sessions share it afterwards:

[https://bokeh.pydata.org/en/latest/docs/user_guide/server.html#lifecycle-hooks](https://bokeh.pydata.org/en/latest/docs/user_guide/server.html#lifecycle-hooks)

Thanks,

Bryan

···

On Jul 5, 2018, at 12:50, peng wang [email protected] wrote:

The reason is I import data from *.csv file. this causes the delay.

On Friday, June 29, 2018 at 4:10:45 PM UTC-6, Jeffery wang wrote:

Good, let me dive in and narrow down the problem.

On Fri, Jun 29, 2018 at 2:28 PM Bryan Van de ven [email protected] wrote:

Actually,

Sorry I have to demur, this is way too much code to dive into. At this scale you are basically asking for free consulting, and I am not able to offer that. There are lots of tried and true ways you can try to profile things yourself. As a simple start, you can put in print statements with timestamps, to see what function or functions are actually taking lots of time. Once you have considerably narrowed the question and have an actual idea of where the slowness is, it’s more likely that someone can help more directly.

Thanks,

Bryan

On Jun 29, 2018, at 11:12, peng wang [email protected] wrote:

If you like, I could upload my vs python project, you could run it and see how many minutes it will take to load locally. Thanks a lot, buddy

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/514ccf09-607a-49bd-95a8-214010d9be4e%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/703A1BB2-76C7-49AA-B4E8-3B1BA612F7BB%40anaconda.com.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.


Sent from Peng’s Gmail Mobile

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/a3a4383a-d4ad-4849-855e-758feb525d19%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

thanks a lot, good idea.

···

On Thursday, July 5, 2018 at 2:04:56 PM UTC-6, Bryan Van de ven wrote:

If it is the same data for every session, you could probably find a way to do it only once and let all sessions share it afterwards:

https://bokeh.pydata.org/en/latest/docs/user_guide/server.html#lifecycle-hooks

Thanks,

Bryan

On Jul 5, 2018, at 12:50, peng wang [email protected] wrote:

The reason is I import data from *.csv file. this causes the delay.

On Friday, June 29, 2018 at 4:10:45 PM UTC-6, Jeffery wang wrote:

Good, let me dive in and narrow down the problem.

On Fri, Jun 29, 2018 at 2:28 PM Bryan Van de ven [email protected] wrote:

Actually,

Sorry I have to demur, this is way too much code to dive into. At this scale you are basically asking for free consulting, and I am not able to offer that. There are lots of tried and true ways you can try to profile things yourself. As a simple start, you can put in print statements with timestamps, to see what function or functions are actually taking lots of time. Once you have considerably narrowed the question and have an actual idea of where the slowness is, it’s more likely that someone can help more directly.

Thanks,

Bryan

On Jun 29, 2018, at 11:12, peng wang [email protected] wrote:

If you like, I could upload my vs python project, you could run it and see how many minutes it will take to load locally. Thanks a lot, buddy

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/514ccf09-607a-49bd-95a8-214010d9be4e%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/703A1BB2-76C7-49AA-B4E8-3B1BA612F7BB%40anaconda.com.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.


Sent from Peng’s Gmail Mobile

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/a3a4383a-d4ad-4849-855e-758feb525d19%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

Hi Bryan,

I do not know how to use these functions, in Doc , it says that

def on_server_loaded(server_context):
    ''' If present, this function is called when the server first starts. '''
    pass

I assume that this function would be invoked automatically, but I set breakpoints in the function, nothing happens. Is there anything wrong? I use “directory format” like this one:

   myapp
>
+---main.py
+---server_lifecycle.py
+---static
+---theme.yaml
+---templates
+---index.html

this is my server_lifecycle.py

import pypyodbc

all_connection_dict = {}

def on_server_loaded(server_context):

print ("on_server_loaded")

connection = pypyodbc.connect('Driver={SQL Server};'

                        'Server=myserver;'

                        'Database=mytable;'

                        'uid=wsvsbv;'

                        'pwd=fgbfgb')

cursor = connection.cursor()

select_all_connection = ("SELECT * FROM all_table") 

cursor.execute(select_all_connection) 

desc = cursor.description

column_names = [col[0] for col in desc]

all_connection_dict = [dict(zip(column_names, row)) 

        for row in cursor.fetchall()]

connection.close()

``

···

On Thursday, July 5, 2018 at 2:04:56 PM UTC-6, Bryan Van de ven wrote:

If it is the same data for every session, you could probably find a way to do it only once and let all sessions share it afterwards:

https://bokeh.pydata.org/en/latest/docs/user_guide/server.html#lifecycle-hooks

Thanks,

Bryan

On Jul 5, 2018, at 12:50, peng wang [email protected] wrote:

The reason is I import data from *.csv file. this causes the delay.

On Friday, June 29, 2018 at 4:10:45 PM UTC-6, Jeffery wang wrote:

Good, let me dive in and narrow down the problem.

On Fri, Jun 29, 2018 at 2:28 PM Bryan Van de ven [email protected] wrote:

Actually,

Sorry I have to demur, this is way too much code to dive into. At this scale you are basically asking for free consulting, and I am not able to offer that. There are lots of tried and true ways you can try to profile things yourself. As a simple start, you can put in print statements with timestamps, to see what function or functions are actually taking lots of time. Once you have considerably narrowed the question and have an actual idea of where the slowness is, it’s more likely that someone can help more directly.

Thanks,

Bryan

On Jun 29, 2018, at 11:12, peng wang [email protected] wrote:

If you like, I could upload my vs python project, you could run it and see how many minutes it will take to load locally. Thanks a lot, buddy

On Friday, June 29, 2018 at 11:59:34 AM UTC-6, Bryan Van de ven wrote:

Hi,

It’s impossible to say without concrete information and details. If you can’t share minimal code to reproduce then perhaps you can report profiler results.

Bryan

On Jun 29, 2018, at 08:58, peng wang [email protected] wrote:

Hi guys,

I plot several charts as displayed below, the bad thing is that I have to wait around 6 minutes to launch the web application(Flask + embedded Bokeh server ) . Each single stacked vbar is generated by several vbars side by side, total data for stackedvbars chart is around 254 * 5

The dataset is not so big, I just wonder why the performance is so bad.

welcome any comments

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/68545198-aadb-4bce-8880-49feee8e8b6b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/514ccf09-607a-49bd-95a8-214010d9be4e%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/703A1BB2-76C7-49AA-B4E8-3B1BA612F7BB%40anaconda.com.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.


Sent from Peng’s Gmail Mobile

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].

To post to this group, send email to [email protected].

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/a3a4383a-d4ad-4849-855e-758feb525d19%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.