Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2022-02-18 15:33:49 +01:00
parent 508ebfd9a1
commit e999a73d68
2 changed files with 56 additions and 199 deletions

View File

@@ -41,7 +41,7 @@ from bokeh.core.properties import value
from rowers.opaque import encoder
from bokeh.models import (
OpenURL, TapTool, CrosshairTool, Span, Label, SaveTool,
PanTool, BoxZoomTool, WheelZoomTool, ResetTool,
PanTool, BoxZoomTool, WheelZoomTool, ResetTool,
)
from bokeh.models.glyphs import ImageURL
from bokeh.transform import cumsum
@@ -1543,12 +1543,12 @@ def interactive_forcecurve(theworkouts, workstrokesonly=True, plottype='scatter'
)
#thesliders.sizing_mode = 'fixed'
layout = layoutrow([thesliders,
mylayout = layoutrow([thesliders,
plot])
layout.sizing_mode = 'stretch_both'
mylayout.sizing_mode = 'stretch_both'
script, div = components(layout)
script, div = components(mylayout)
js_resources = INLINE.render_js()
css_resources = INLINE.render_css()
@@ -2036,11 +2036,11 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue=
plot.add_tools(linked_crosshair)
plot2.add_tools(linked_crosshair)
layout = layoutcolumn([plot, plot2])
layout.sizing_mode = 'stretch_both'
mylayout = layoutcolumn([plot, plot2])
mylayout.sizing_mode = 'stretch_both'
try:
script, div = components(layout)
script, div = components(mylayout)
except Exception as e: # pragma: no cover
df.dropna(inplace=True, axis=0, how='any')
return (
@@ -2190,10 +2190,10 @@ def interactive_histoall(theworkouts, histoparam, includereststrokes,
annotation.js_on_change('value', callback)
callback.args["annotation"] = annotation
layout = layoutcolumn([annotation, plot])
mylayout = layoutcolumn([annotation, plot])
try:
script, div = components(layout)
script, div = components(mylayout)
except ValueError: # pragma: no cover
script = ''
div = ''
@@ -3101,8 +3101,6 @@ def leaflet_chart_video(lat, lon, name=""):
lonmean = lon.mean()
latbegin = lat[lat.index[0]]
longbegin = lon[lon.index[0]]
latend = lat[lat.index[-1]]
longend = lon[lon.index[-1]]
coordinates = zip(lat, lon)
@@ -3201,9 +3199,7 @@ def leaflet_chart_video(lat, lon, name=""):
latmean=latmean,
lonmean=lonmean,
latbegin=latbegin,
latend=latend,
longbegin=longbegin,
longend=longend,
scoordinates=scoordinates,
)
@@ -3350,10 +3346,11 @@ def interactive_agegroupcpchart(age, normalized=False):
mhduration.append(60.*duration)
mhpower.append(np.nan)
def fitfunc(pars, x): return pars[0] / \
(1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
def fitfunc(pars, x):
return pars[0] / (1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
def errfunc(pars, x, y): return fitfunc(pars, x)-y
def errfunc(pars, x, y):
return fitfunc(pars, x)-y
# p0 = [500,350,10,8000]
@@ -3444,7 +3441,6 @@ def interactive_agegroupcpchart(age, normalized=False):
)
x_axis_type = 'log'
y_axis_type = 'linear'
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
@@ -3500,7 +3496,6 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='da
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
x_axis_type = 'log'
y_axis_type = 'linear'
deltas = powerdf2['Delta'].apply(lambda x: timedeltaconv(x))
powerdf2['ftime'] = deltas.apply(lambda x: strfdelta(x))
@@ -3524,8 +3519,9 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='da
p1 = [r.ep0, r.ep1, r.ep2, r.ep3]
ratio = r.ecpratio
def fitfunc(pars, x): return abs(
pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
def fitfunc(pars, x):
return abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
fitpower = fitfunc(p1, fitt)
message = ""
@@ -3534,8 +3530,6 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='da
deltas = fitt.apply(lambda x: timedeltaconv(x))
ftime = niceformat(deltas)
workouts = powerdf2['workout']
urls = powerdf2['url']
# add world class
wcpower = pd.Series(wcpower, dtype='float')
@@ -3543,10 +3537,12 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='da
# fitting WC data to three parameter CP model
if len(wcdurations) >= 4: # pragma: no cover
def fitfunc(pars, x): return pars[0] / \
(1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
def fitfunc(pars, x):
return pars[0] / (1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
def errfunc(pars, x, y):
return fitfunc(pars, x)-y
def errfunc(pars, x, y): return fitfunc(pars, x)-y
p1wc, success = optimize.leastsq(errfunc, p0[:],
args=(wcdurations, wcpower))
else:
@@ -3582,13 +3578,6 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='da
)
)
sourceannot = ColumnDataSource(
data=dict(
workout=workouts,
url=urls,
)
)
# making the plot
plot = Figure(tools=TOOLS, x_axis_type=x_axis_type,
plot_width=900,
@@ -3597,12 +3586,8 @@ def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='da
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
watermarky = 0.01
watermarkw = 184
watermarkh = 35
@@ -3705,10 +3690,12 @@ def interactive_agegroup_plot(df, distance=2000, duration=None,
# poly_vals = np.polyval(poly_coefficients,age2)
# poly_vals = 0.5*(np.abs(poly_vals)+poly_vals)
def fitfunc(pars, x): return np.abs(pars[0])*(1-x/max(120, pars[1]))-np.abs(
pars[2])*np.exp(-x/np.abs(pars[3]))+np.abs(pars[4])*(np.sin(np.pi*x/max(50, pars[5])))
def fitfunc(pars, x):
return np.abs(pars[0])*(1-x/max(120, pars[1])) \
- np.abs(pars[2])*np.exp(-x/np.abs(pars[3]))+np.abs(pars[4])*(np.sin(np.pi*x/max(50, pars[5])))
def errfunc(pars, x, y): return fitfunc(pars, x)-y
def errfunc(pars, x, y):
return fitfunc(pars, x)-y
p0age = [700, 120, 700, 10, 100, 100]
@@ -3722,8 +3709,6 @@ def interactive_agegroup_plot(df, distance=2000, duration=None,
data=dict(
age=age,
power=power,
#age2 = age2,
#expo_vals = expo_vals,
season=season,
name=name,
)
@@ -3774,7 +3759,6 @@ def interactive_cpchart(rower, thedistances, thesecs, theavpower,
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
x_axis_type = 'log'
y_axis_type = 'linear'
thesecs = pd.Series(thesecs)
@@ -3828,10 +3812,11 @@ def interactive_cpchart(rower, thedistances, thesecs, theavpower,
)
)
def fitfunc(pars, x): return pars[0] / \
(1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
def fitfunc(pars, x):
return pars[0] / (1+(x/pars[2])) + pars[1]/(1+(x/pars[3]))
def errfunc(pars, x, y): return fitfunc(pars, x)-y
def errfunc(pars, x, y):
return fitfunc(pars, x)-y
# p0 = [500,350,10,8000]
wcpower = pd.Series(wcpower, dtype='float')
@@ -3863,28 +3848,19 @@ def interactive_cpchart(rower, thedistances, thesecs, theavpower,
# Get stayer score
if success == 1: # pragma: no cover
power1min = fitfunc(p1, 60.)
power4min = fitfunc(p1, 240.)
power6min = fitfunc(p1, 360.)
power30min = fitfunc(p1, 1800.)
power1h = fitfunc(p1, 3600.)
power10sec = fitfunc(p1, 10.)
r10sec4min = 100.*power10sec/power4min
r1h4min = 100.*power1h/power4min
r1min6min = 100.*power1min/power6min
r30min6min = 100.*power30min/power6min
combined = r1h4min-0.2*(r10sec4min-100)
combined2 = r30min6min-1.5*(r1min6min-100)
dataset = pd.read_csv('static/stats/combined_set.csv')
dataset2 = pd.read_csv('static/stats/combined_set6min.csv')
stayerscore = int(percentileofscore(dataset['combined'], combined))
stayerscore2 = int(percentileofscore(dataset2['combined'], combined2))
else:
stayerscore = None
stayerscore2 = None
fitt = pd.Series(10**(4*np.arange(100)/100.))
@@ -3938,12 +3914,8 @@ def interactive_cpchart(rower, thedistances, thesecs, theavpower,
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
watermarky = 0.01
watermarkw = 184
watermarkh = 35
@@ -4069,7 +4041,6 @@ def interactive_windchart(id=0, promember=0):
# get user
# u = User.objects.get(id=row.user.id)
r = row.user
u = r.user
rr = rrower(hrmax=r.max, hrut2=r.ut2,
hrut1=r.ut1, hrat=r.at,
@@ -4158,7 +4129,6 @@ def interactive_streamchart(id=0, promember=0):
# get user
# u = User.objects.get(id=row.user.id)
r = row.user
u = r.user
rr = rrower(hrmax=r.max, hrut2=r.ut2,
hrut1=r.ut1, hrat=r.at,
@@ -4223,12 +4193,12 @@ def interactive_chart(id=0, promember=0, intervaldata={}):
return "", "No Valid Data Available"
try:
spm = datadf['spm']
_ = datadf['spm']
except KeyError: # pragma: no cover
datadf['spm'] = 0
try:
pace = datadf['pace']
_ = datadf['pace']
except KeyError: # pragma: no cover
datadf['pace'] = 0
@@ -4244,16 +4214,10 @@ def interactive_chart(id=0, promember=0, intervaldata={}):
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
watermarky = 0.01
watermarkw = 184
watermarkh = 35
watermarkanchor = 'bottom_right'
plot.extra_y_ranges = {"watermark": watermarkrange}
plot.extra_x_ranges = {"watermark": watermarkrange}
@@ -4476,7 +4440,7 @@ def interactive_multiflex(datadf, xparam, yparam, groupby, extratitle='',
else:
groupname = axlabels[groupby]
if title == None:
if title is None:
title = '{y} vs {x} grouped by {gr}'.format(
x=xparamname,
y=yparamname,
@@ -4555,9 +4519,6 @@ def interactive_multiflex(datadf, xparam, yparam, groupby, extratitle='',
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
@@ -4683,12 +4644,12 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
workstrokesonly=workstrokesonly)
try:
tests = datadf[yparam2]
_ = datadf[yparam2]
except KeyError: # pragma: no cover
yparam2 = 'None'
try:
tests = datadf[yparam1]
_ = datadf[yparam1]
except KeyError:
yparam1 = 'None'
@@ -4696,18 +4657,14 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
datadf.dropna(axis=0, how='any', inplace=True)
# test if we have drive energy
nowork = 1
try: # pragma: no cover
test = datadf['driveenergy'].mean()
nowork = 0
_ = datadf['driveenergy'].mean()
except KeyError: # pragma: no cover
datadf['driveenergy'] = 500.
# test if we have power
nopower = 1
try: # pragma: no cover
test = datadf['power'].mean()
nopower = 0
_ = datadf['power'].mean()
except KeyError: # pragma: no cover
datadf['power'] = 50.
@@ -4745,21 +4702,12 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
else: # pragma: no cover
datadf['y2'] = datadf['y1']
if xparam == 'distance': # pragma: no cover
xaxmax = datadf['x1'].max()
xaxmin = datadf['x1'].min()
else:
xaxmax = yaxmaxima[xparam]
xaxmin = yaxminima[xparam]
# average values
x1mean = datadf['x1'].mean()
y1mean = datadf['y1'].mean()
y2mean = datadf['y2'].mean()
xvals = pd.Series(xaxmin+np.arange(100)*(xaxmax-xaxmin)/100.)
x_axis_type = 'linear'
y_axis_type = 'linear'
if xparam == 'time':
@@ -4797,9 +4745,6 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
@@ -5041,13 +4986,6 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
slider_dist_max.js_on_change('value', callback)
callback.args["maxdist"] = slider_dist_max
#slider_spm_min.sizing_mode = 'fixed'
#slider_spm_max.sizing_mode = 'fixed'
#slider_work_min.sizing_mode = 'fixed'
#slider_work_max.sizing_mode = 'fixed'
#slider_dist_min.sizing_mode = 'fixed'
#slider_dist_max.sizing_mode = 'fixed'
thesliders = layoutcolumn([slider_spm_min,
slider_spm_max,
slider_dist_min,
@@ -5057,14 +4995,11 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
],
)
#thesliders.sizing_mode = 'fixed'
mylayout = layoutrow([thesliders, plot])
layout = layoutrow([thesliders,
plot])
mylayout.sizing_mode = 'stretch_both'
layout.sizing_mode = 'stretch_both'
script, div = components(layout)
script, div = components(mylayout)
js_resources = INLINE.render_js()
css_resources = INLINE.render_css()
@@ -5104,7 +5039,6 @@ def interactive_flexchart_stacked(id, r, xparam='time',
doclean=False,
workstrokesonly=False)
row = Workout.objects.get(id=id)
if rowdata.empty:
return "", "No valid data", '', '', comment
@@ -5115,34 +5049,29 @@ def interactive_flexchart_stacked(id, r, xparam='time',
try:
rowdata['x1'] = rowdata.loc[:, xparam]
rowmin = rowdata[xparam].min()
except KeyError: # pragma: no cover
rowdata['x1'] = 0*rowdata.loc[:, 'time']
try:
rowdata['y1'] = rowdata.loc[:, yparam1]
rowmin = rowdata[yparam1].min()
except KeyError: # pragma: no cover
rowdata['y1'] = 0*rowdata.loc[:, 'time']
rowdata[yparam1] = rowdata['y1']
try: # pragma: no cover
rowdata['y2'] = rowdata.loc[:, yparam2]
rowmin = rowdata[yparam2].min()
except KeyError:
rowdata['y2'] = 0*rowdata.loc[:, 'time']
rowdata[yparam2] = rowdata['y2']
try:
rowdata['y3'] = rowdata.loc[:, yparam3]
rowmin = rowdata[yparam3].min()
except KeyError: # pragma: no cover
rowdata['y3'] = 0*rowdata.loc[:, 'time']
rowdata[yparam3] = rowdata['y3']
try:
rowdata['y4'] = rowdata.loc[:, yparam4]
rowmin = rowdata[yparam4].min()
except KeyError: # pragma: no cover
rowdata['y4'] = 0*rowdata.loc[:, 'time']
rowdata[yparam4] = rowdata['y4']
@@ -5418,16 +5347,16 @@ def interactive_flexchart_stacked(id, r, xparam='time',
plot3.line('x1', 'y3', source=source, color=palette2[0])
plot4.line('x1', 'y4', source=source, color=palette2[2])
layout = layoutcolumn([
mylayout = layoutcolumn([
plot1,
plot2,
plot3,
plot4,
])
layout.sizing_mode = 'stretch_both'
mylayout.sizing_mode = 'stretch_both'
script, div = components(layout)
script, div = components(mylayout)
js_resources = INLINE.render_js()
css_resources = INLINE.render_css()
@@ -5443,9 +5372,6 @@ def interactive_flex_chart2(id, r, promember=0,
mode='rower'):
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
@@ -5454,7 +5380,6 @@ def interactive_flex_chart2(id, r, promember=0,
watermarkh = 35
watermarkanchor = 'bottom_right'
#rowdata,row = dataprep.getrowdata_db(id=id)
columns = [xparam, yparam1, yparam2,
'ftime', 'distance', 'fpace',
'power', 'hr', 'spm', 'driveenergy',
@@ -5484,28 +5409,24 @@ def interactive_flex_chart2(id, r, promember=0,
workstrokesonly=False)
workstrokesonly = False
try:
tests = rowdata[yparam2]
_ = rowdata[yparam2]
except KeyError: # pragma: no cover
yparam2 = 'None'
try:
tests = rowdata[yparam1]
_ = rowdata[yparam1]
except KeyError: # pragma: no cover
yparam1 = 'None'
# test if we have drive energy
nowork = 1
try:
test = rowdata['driveenergy'].mean()
nowork = 0
_ = rowdata['driveenergy'].mean()
except KeyError:
rowdata['driveenergy'] = 500.
# test if we have power
nopower = 1
try:
test = rowdata['power'].mean()
nopower = 0
_ = rowdata['power'].mean()
except KeyError:
rowdata['power'] = 50.
@@ -5516,9 +5437,7 @@ def interactive_flex_chart2(id, r, promember=0,
if rowdata.empty:
return "", "No valid data", '', '', workstrokesonly
workoutstateswork = [1, 4, 5, 8, 9, 6, 7]
workoutstatesrest = [3]
workoutstatetransition = [0, 2, 10, 11, 12, 13]
if workstrokesonly: # pragma: no cover
try:
@@ -5533,13 +5452,11 @@ def interactive_flex_chart2(id, r, promember=0,
try:
rowdata['x1'] = rowdata.loc[:, xparam]
rowmin = rowdata[xparam].min()
except KeyError: # pragma: no cover
rowdata['x1'] = 0*rowdata.loc[:, 'time']
try:
rowdata['y1'] = rowdata.loc[:, yparam1]
rowmin = rowdata[yparam1].min()
except KeyError: # pragma: no cover
rowdata['y1'] = 0*rowdata.loc[:, 'time']
rowdata[yparam1] = rowdata['y1']
@@ -5547,7 +5464,6 @@ def interactive_flex_chart2(id, r, promember=0,
if yparam2 != 'None':
try:
rowdata['y2'] = rowdata.loc[:, yparam2]
rowmin = rowdata[yparam2].min()
except KeyError: # pragma: no cover
rowdata['y2'] = 0*rowdata.loc[:, 'time']
rowdata[yparam2] = rowdata['y2']
@@ -5639,13 +5555,9 @@ def interactive_flex_chart2(id, r, promember=0,
toolbar_sticky=False, plot_width=800, plot_height=600,
)
plot.sizing_mode = 'stretch_both'
#plot.width_policy = 'max'
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
@@ -6005,14 +5917,6 @@ def interactive_flex_chart2(id, r, promember=0,
slider_dist_max.js_on_change('value', callback)
callback.args["maxdist"] = slider_dist_max
#annotation.sizing_mode = 'fixed'
#slider_spm_min.sizing_mode = 'fixed'
#slider_spm_max.sizing_mode = 'fixed'
#slider_work_min.sizing_mode = 'fixed'
#slider_work_max.sizing_mode = 'fixed'
#slider_dist_min.sizing_mode = 'fixed'
#slider_dist_max.sizing_mode = 'fixed'
thesliders = layoutcolumn([
annotation,
slider_spm_min,
@@ -6023,15 +5927,12 @@ def interactive_flex_chart2(id, r, promember=0,
slider_work_max,
])
#thesliders.sizing_mode = 'fixed'
layout = layoutrow([thesliders,
plot])
mylayout = layoutrow([thesliders, plot])
# layout.sizing_mode = 'stretch_both'
layout.sizing_mode = 'stretch_both'
mylayout.sizing_mode = 'stretch_both'
script, div = components(layout)
script, div = components(mylayout)
js_resources = INLINE.render_js()
css_resources = INLINE.render_css()
@@ -6074,9 +5975,9 @@ def thumbnails_set(r, id, favorites):
# except KeyError:
# pass
l = len(rowdata)
lengte = len(rowdata)
maxlength = 50
if l > maxlength:
if lengte > maxlength:
try:
bins = np.linspace(rowdata['time'].min(),
rowdata['time'].max(), maxlength)
@@ -6086,7 +5987,6 @@ def thumbnails_set(r, id, favorites):
pass
for f in favorites:
workstrokesonly = not f.reststrokes
script, div = thumbnail_flex_chart(
rowdata,
id=id,
@@ -6112,12 +6012,12 @@ def thumbnail_flex_chart(rowdata, id=0, promember=0,
workstrokesonly=False):
try:
tests = rowdata[yparam2]
_ = rowdata[yparam2]
except KeyError:
yparam2 = 'None'
try:
tests = rowdata[yparam1]
_ = rowdata[yparam1]
except KeyError:
yparam1 = 'None'
@@ -6161,7 +6061,6 @@ def thumbnail_flex_chart(rowdata, id=0, promember=0,
if yparam1 == 'pace': # pragma: no cover
y_axis_type = 'datetime'
y1mean = rowdata.loc[:, 'pace'].mean()
rowdata['xname'] = axlabels[xparam]
try:
@@ -6178,7 +6077,6 @@ def thumbnail_flex_chart(rowdata, id=0, promember=0,
rowdata
)
sizing_mode = 'fixed' # 'stretch_both' also looks nice with this example
plot = Figure(x_axis_type=x_axis_type, y_axis_type=y_axis_type,
plot_width=200, plot_height=150,
)
@@ -6188,7 +6086,6 @@ def thumbnail_flex_chart(rowdata, id=0, promember=0,
plot.sizing_mode = 'fixed'
plot.toolbar.logo = None
plot.toolbar_location = None
#plot.yaxis.visible = False
plot.xaxis.axis_label_text_font_size = "7pt"
plot.yaxis.axis_label_text_font_size = "7pt"
plot.xaxis.major_label_text_font_size = "7pt"
@@ -6297,12 +6194,6 @@ def interactive_multiple_compare_chart(ids, xparam, yparam, plottype='line',
except:
return ['', '<p>A chart data error occurred</p>', '', 'A chart data error occurred']
yparamname = axlabels[yparam]
#datadf = datadf[datadf[yparam] > 0]
#datadf = datadf[datadf[xparam] > 0]
# check if dataframe not empty
if datadf.empty: # pragma: no cover
return ['', '<p>No non-zero data in selection</p>', '', 'No non-zero data in selection']
@@ -6350,11 +6241,6 @@ def interactive_multiple_compare_chart(ids, xparam, yparam, plottype='line',
if xparam == 'time':
x_axis_type = 'datetime'
if xparam != 'time':
xvals = xaxmin+np.arange(100)*(xaxmax-xaxmin)/100.
else:
xvals = np.arange(100)
plot = Figure(x_axis_type=x_axis_type, y_axis_type=y_axis_type,
tools=TOOLS,
toolbar_location="above",
@@ -6363,16 +6249,10 @@ def interactive_multiple_compare_chart(ids, xparam, yparam, plottype='line',
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
watermarky = 0.01
watermarkw = 184
watermarkh = 35
watermarkanchor = 'bottom_right'
plot.extra_y_ranges = {"watermark": watermarkrange}
plot.extra_x_ranges = {"watermark": watermarkrange}
plot.sizing_mode = 'stretch_both'
@@ -6475,7 +6355,7 @@ def interactive_multiple_compare_chart(ids, xparam, yparam, plottype='line',
try:
legend_label = labeldict[id]
except KeyError: # pragma: no cover
legend = str(id)
legend_label = str(id)
else: # pragma: no cover
legend_label = str(id)
@@ -6549,9 +6429,6 @@ def interactive_otw_advanced_pace_chart(id=0, promember=0):
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarksource = ColumnDataSource(dict(
url=[watermarkurl],))
watermarkrange = Range1d(start=0, end=1)
watermarkalpha = 0.6
watermarkx = 0.99
@@ -6625,10 +6502,6 @@ def interactive_otw_advanced_pace_chart(id=0, promember=0):
def get_zones_report(rower, startdate, enddate, trainingzones='hr', date_agg='week',
yaxis='time'):
duration = enddate-startdate
totaldays = duration.total_seconds()/(24*3600)
dates = []
dates_sorting = []
minutes = []
@@ -6657,14 +6530,10 @@ def get_zones_report(rower, startdate, enddate, trainingzones='hr', date_agg='we
df = dataprep.clean_df_stats(df, workstrokesonly=False,
ignoreadvanced=True, ignorehr=False)
#totalmeters,totalhours, totalminutes, totalseconds = get_totals(workouts)
hrzones = rower.hrzones
powerzones = rower.powerzones
for w in workouts:
dd = w.date.strftime('%m/%d')
dd2 = w.date.strftime('%Y/%m/%d')
dd3 = w.date.strftime('%Y/%m')
dd4 = '{year}/{week:02d}'.format(
week=arrow.get(w.date).isocalendar()[1],
@@ -6798,7 +6667,6 @@ def get_zones_report(rower, startdate, enddate, trainingzones='hr', date_agg='we
pass
while d <= enddate:
dd = d.strftime('%d')
if date_agg == 'week':
dd4 = '{year}/{week:02d}'.format(
week=arrow.get(d).isocalendar()[1],
@@ -6842,12 +6710,6 @@ def interactive_zoneschart(rower, data, startdate, enddate, trainingzones='hr',
startdate = enddate
enddate = st
duration = enddate-startdate
totaldays = duration.total_seconds()/(24*3600)
colors = ['gray', 'yellow', 'lime', 'blue', 'purple', 'red']
hrzones = rower.hrzones
powerzones = rower.powerzones
@@ -6893,10 +6755,6 @@ def interactive_zoneschart(rower, data, startdate, enddate, trainingzones='hr',
df.drop('minutes', inplace=True, axis='columns')
# df.drop('hours',inplace=True,axis='columns')
source = ColumnDataSource(df)
df.sort_values('date_sorting', inplace=True)
df.drop('date_sorting', inplace=True, axis='columns')
df['totaltime'] = 0
@@ -6927,7 +6785,6 @@ def interactive_zoneschart(rower, data, startdate, enddate, trainingzones='hr',
bars = hv.Bars(df, kdims=['date', 'zones']).aggregate(
function=np.sum).redim.values(zones=zones_order)
#bars = table.to.bars(['date','zones'],['minutes'])
bars.opts(
opts.Bars(cmap=color_map, show_legend=True, stacked=True,
tools=['tap', 'hover'], width=550, padding=(0, (0, .1)),

View File

@@ -1,4 +1,4 @@
[flake8]
ignore = F405, F403, E722, E226, W504, F401, W605
ignore = F405, F403, E722, E226, W504, F401, W605, E501
max-line-length = 120
exclude = .git, rowers/migrations, rowers/tests, rowers/admin.py