From 196d0843abf72f0e3f547577bfb1a87b9646e3d9 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 5 Jun 2023 20:04:01 +0200 Subject: [PATCH 1/5] fix --- rowers/tests/testdata/testdata.tcx.gz | Bin 4002 -> 4001 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index 76d8220cbd71ac9fb8e2acf5abf53f0df6bb05f9..a685b79dbc3f970aec1a5517379cc0b85d30fa74 100644 GIT binary patch literal 4001 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 Ii^PBd0Q>eCDF6Tf From bf5cee9676e91039be8020dde085132d50b7c9cd Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 8 Jun 2023 22:44:06 +0200 Subject: [PATCH 2/5] reverting one commit, --- rowers/dataprep.py | 46 ++++++++++++++------------ rowers/tests/testdata/testdata.tcx.gz | Bin 4001 -> 4001 bytes rowers/utils.py | 2 ++ 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index c042b4af..5c18f94a 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1621,27 +1621,31 @@ def get_existing_job(w): def workout_trimp(w, reset=False): r = w.user - if w.trimp is None: - if get_existing_job(w): - return 0, 0 - elif w.averagehr is None: - if get_existing_job(w): - return w.trimp, 0 - elif w.trimp <= 0 and w.averagehr > 0: - ftp = float(r.ftp) - _ = myqueue( - queuehigh, - handle_calctrimp, - w.id, - w.csvfilename, - ftp, - r.sex, - r.hrftp, - r.max, - r.rest) - return w.trimp, w.hrtss - elif w.trimp > -1 and not reset: - return w.trimp, w.hrtss + # below is temporary + if w.trimp > -1 and not reset: + return w.trimp, w.hrtss + +# if w.trimp is None: +# if get_existing_job(w): +# return 0, 0 +# elif w.averagehr is None: +# if get_existing_job(w): +# return w.trimp, 0 +# elif w.trimp <= 0 and w.averagehr > 0: +# ftp = float(r.ftp) +# _ = myqueue( +# queuehigh, +# handle_calctrimp, +# w.id, +# w.csvfilename, +# ftp, +# r.sex, +# r.hrftp, +# r.max, +# r.rest) +# return w.trimp, w.hrtss +# elif w.trimp > -1 and not reset: +# return w.trimp, w.hrtss if get_existing_job(w): return 0, 0 diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index a685b79dbc3f970aec1a5517379cc0b85d30fa74..3ee3d88b6822726938acd59f9ce9f540a4eb1600 100644 GIT binary patch delta 258 zcmV+d0sa1=AE6%yABzYGU^;@a2dWN#_DtNFqqAS(v-AGTFwEEz1eo_v+m+z_q5W-)%yIb>$`N`ZvS>AD({aw{^nKx@@jMI zHTmZH`eJq3_35YIycjp<{^VroyKi5uF3xU#?$7CcOo!fjIPbPR@BWi6nVki3w?BWn z+iIOQdwIX#Zo|!^{pkG1FVan){J6YWcH3p*kUzb9bhqy7_*u6;fBNL)yYDlb-JkpI zKcu(#`&XC0F4LU>d;zfk|9Elhi~W<|J*JaKJJhRndJc~h%H`%sdK$l`OP@UYAEUB_ IWW<00067_-rT_o{ delta 258 zcmV+d0sa1=AE6%yABzYG+8ute2dWN#^edfFJUu1&?7aW-c(Fg=(f&+-{KowG=F@8b z{qf^X;&`=rx9|5|dV4lkZ?@g~th>0_J+1U{wLU-V`YxTf+rM3j%KPJvzj@WayxQD) zO}@FlzF3`hefsG)FUHNeKRH?Y?%P+Zi?f@b`*V69)1kK>&buwoyZ@w1W@o{1?a!a? zwpypnUf%Dw+i>$}KRW;Mi*(Z`KQ1qp-FBHc Date: Fri, 9 Jun 2023 07:51:26 +0200 Subject: [PATCH 3/5] more corrections --- rowers/dataroutines.py | 4 +- rowers/interactiveplots.py | 65 ++++++++++++++------------- rowers/tests/testdata/testdata.tcx.gz | 0 3 files changed, 36 insertions(+), 33 deletions(-) delete mode 100644 rowers/tests/testdata/testdata.tcx.gz diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index 74d82a9b..43807ca9 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -385,8 +385,10 @@ def filter_df(datadf, fieldname, value, largerthan=True): def df_resample(datadf): # time stamps must be in seconds timestamps = datadf['TimeStamp (sec)'].astype('int') + datadf['timestamps'] = timestamps - newdf = datadf.groupby(['timestamps']).mean() + # newdf = datadf.groupby(['timestamps']).mean() + newdf = datadf[~datadf.duplicated(['timestamps'])] return newdf diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index c8da52f2..b4e4a6ed 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -365,7 +365,7 @@ def interactive_boxchart(datadf, fieldname, extratitle='', yrange1 = Range1d(start=yaxminima[fieldname], end=yaxmaxima[fieldname]) plot.y_range = yrange1 - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' if extratitle: plot.title.text = extratitle @@ -431,7 +431,7 @@ def interactive_planchart(data, startdate, enddate): p.height = 350 p.y_range = yrange1 p.toolbar_location = 'above' - p.sizing_mode = 'stretch_both' + #p.sizing_mode = 'stretch_both' script, div = components(p) @@ -597,7 +597,7 @@ def interactive_activitychart(workouts, startdate, enddate, stack='type', toolba p.height = 350 p.toolbar_location = toolbar_location p.y_range.start = 0 - p.sizing_mode = 'stretch_both' + #p.sizing_mode = 'stretch_both' taptool = p.select(type=TapTool) callback = CustomJS(args={'links': df.link}, code=""" @@ -797,7 +797,7 @@ def interactive_activitychart2(workouts, startdate, enddate, stack='type', toolb p.width = 550 p.height = 350 p.toolbar_location = toolbar_location - p.sizing_mode = 'stretch_both' + #p.sizing_mode = 'stretch_both' p.y_range.start = 0 taptool = p.select(type=TapTool) @@ -1092,7 +1092,7 @@ def interactive_forcecurve(theworkouts, workstrokesonly=True, plottype='scatter' plot = figure(tools=TOOLS, toolbar_sticky=False, toolbar_location="above", width=800, height=600) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' # add watermark watermarkurl = "/static/img/logo7.png" @@ -1492,7 +1492,7 @@ def interactive_forcecurve(theworkouts, workstrokesonly=True, plottype='scatter' mylayout = layoutrow([thesliders, plot]) - mylayout.sizing_mode = 'stretch_both' + #mylayout.sizing_mode = 'stretch_both' script, div = components(mylayout) js_resources = INLINE.render_js() @@ -2016,7 +2016,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue= plot2.add_tools(linked_crosshair) mylayout = layoutcolumn([plot, plot2]) - mylayout.sizing_mode = 'stretch_both' + #mylayout.sizing_mode = 'stretch_both' try: script, div = components(mylayout) @@ -2148,7 +2148,7 @@ def interactive_histoall(theworkouts, histoparam, includereststrokes, plot.add_layout(LinearAxis(y_range_name="fraction", axis_label="Cumulative % of strokes"), 'right') - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' annolabel = Label(x=50, y=450, x_units='screen', y_units='screen', text='', @@ -3418,7 +3418,7 @@ def interactive_agegroupcpchart(age, normalized=False): plot = figure(width=900, x_axis_type=x_axis_type, tools=TOOLS) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.line('duration', 'fitpowerfh', source=sourcefit, legend_label='Female HW', color='blue') @@ -3456,7 +3456,8 @@ def interactive_agegroupcpchart(age, normalized=False): return script, div -def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, cpfit='data', +def interactive_otwcpchart(powerdf, promember=0, rowername="", r=None, + cpfit='data', title='', type='water', wcpower=[], wcdurations=[], cpoverlay=False): @@ -3697,7 +3698,7 @@ def interactive_agegroup_plot(df, distance=2000, duration=None, TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair' plot = figure(tools=TOOLS, width=900) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.circle('age', 'power', source=source, fill_color='red', size=15, legend_label='World Record') @@ -4075,7 +4076,7 @@ def interactive_windchart(id=0, promember=0): plot.xaxis.axis_label = "Distance (m)" plot.yaxis.axis_label = "Wind Speed (m/s)" plot.y_range = Range1d(-7, 7) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.extra_y_ranges = {"winddirection": Range1d(start=0, end=360)} plot.line('dist', 'winddirection', source=source, @@ -4141,7 +4142,7 @@ def interactive_streamchart(id=0, promember=0): plot.xaxis.axis_label = "Distance (m)" plot.yaxis.axis_label = "River Current (m/s)" plot.y_range = Range1d(-2, 2) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' script, div = components(plot) @@ -4205,7 +4206,7 @@ def forcecurve_multi_interactive_chart(selected): toolbar_location='above', toolbar_sticky=False) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' # add watermark watermarkurl = "/static/img/logo7.png" @@ -4307,7 +4308,7 @@ def instroke_multi_interactive_chart(selected, *args, **kwargs): toolbar_location='above', toolbar_sticky=False) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' # add watermark watermarkurl = "/static/img/logo7.png" @@ -4405,7 +4406,7 @@ def instroke_interactive_chart(df,metric, workout, spm_min, spm_max, toolbar_location='above', toolbar_sticky=False) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.title.text = str(workout) + ' - ' + metric @@ -4592,7 +4593,7 @@ def interactive_chart(id=0, promember=0, intervaldata={}): plot.line('time', 'pace', source=source, legend_label="Pace", name="pace") plot.title.text = row.name plot.title.text_font_size = "1.0em" - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.xaxis.axis_label = "Time" plot.yaxis.axis_label = "Pace (/500m)" plot.xaxis[0].formatter = DatetimeTickFormatter( @@ -4890,7 +4891,7 @@ def interactive_multiflex(datadf, xparam, yparam, groupby, extratitle='', plot.title.text = title plot.title.text_font_size = "1.0em" - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.image_url([watermarkurl], watermarkx, watermarky, watermarkw, watermarkh, @@ -5124,7 +5125,7 @@ def interactive_cum_flex_chart2(theworkouts, promember=0, watermarkanchor = 'bottom_right' plot.extra_y_ranges = {"watermark": watermarkrange} plot.extra_x_ranges = {"watermark": watermarkrange} - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' if extratitle: plot.title.text = extratitle @@ -5378,7 +5379,7 @@ def interactive_cum_flex_chart2(theworkouts, promember=0, mylayout = layoutrow([thesliders, plot]) - mylayout.sizing_mode = 'stretch_both' + #mylayout.sizing_mode = 'stretch_both' script, div = components(mylayout) js_resources = INLINE.render_js() @@ -5537,10 +5538,10 @@ def interactive_flexchart_stacked(id, r, xparam='time', plot2.xaxis.visible = False plot3.xaxis.visible = False - plot1.sizing_mode = 'stretch_both' - plot2.sizing_mode = 'stretch_both' - plot3.sizing_mode = 'stretch_both' - plot4.sizing_mode = 'stretch_both' + #plot1.sizing_mode = 'stretch_both' + #plot2.sizing_mode = 'stretch_both' + #plot3.sizing_mode = 'stretch_both' + #plot4.sizing_mode = 'stretch_both' linked_crosshair = CrosshairTool(dimensions="height") plot1.add_tools(linked_crosshair) @@ -5735,7 +5736,7 @@ def interactive_flexchart_stacked(id, r, xparam='time', plot4, ]) - mylayout.sizing_mode = 'stretch_both' + #mylayout.sizing_mode = 'stretch_both' script, div = components(mylayout) js_resources = INLINE.render_js() @@ -5944,7 +5945,7 @@ def interactive_flex_chart2(id, r, promember=0, tools=TOOLS, toolbar_location='above', toolbar_sticky=False, width=800, height=600, ) - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' # add watermark watermarkurl = "/static/img/logo7.png" @@ -5957,7 +5958,7 @@ def interactive_flex_chart2(id, r, promember=0, watermarkanchor = 'bottom_right' plot.extra_y_ranges = {"watermark": watermarkrange} plot.extra_x_ranges = {"watermark": watermarkrange} - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.image_url([watermarkurl], watermarkx, watermarky, watermarkw, watermarkh, @@ -6052,7 +6053,7 @@ def interactive_flex_chart2(id, r, promember=0, plot.title.text = row.name plot.title.text_font_size = "1.0em" - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.xaxis.axis_label = xaxlabel plot.yaxis.axis_label = yaxlabel @@ -6327,7 +6328,7 @@ def interactive_flex_chart2(id, r, promember=0, mylayout = layoutrow([thesliders, plot]) # layout.sizing_mode = 'stretch_both' - mylayout.sizing_mode = 'stretch_both' + #mylayout.sizing_mode = 'stretch_both' script, div = components(mylayout) js_resources = INLINE.render_js() @@ -6382,7 +6383,7 @@ def thumbnails_set(r, id, favorites): rowdata['time'].max(), maxlength) groups = rowdata.groupby(np.digitize(rowdata['time'], bins)) rowdata = groups.mean() - except KeyError: # pragma: no cover + except (KeyError, TypeError): # pragma: no cover pass for f in favorites: @@ -6654,7 +6655,7 @@ def interactive_multiple_compare_chart(ids, xparam, yparam, plottype='line', watermarkh = 35 plot.extra_y_ranges = {"watermark": watermarkrange} plot.extra_x_ranges = {"watermark": watermarkrange} - plot.sizing_mode = 'stretch_both' + #plot.sizing_mode = 'stretch_both' plot.image_url([watermarkurl], 0.05, 0.9, watermarkw, watermarkh, @@ -7226,7 +7227,7 @@ def interactive_zoneschart(rower, data, startdate, enddate, trainingzones='hr', p.height = 350 p.toolbar_location = 'right' p.y_range.start = 0 - p.sizing_mode = 'stretch_both' + #p.sizing_mode = 'stretch_both' if yaxis == 'percentage': tidy_df = df2.groupby(['date']).sum() diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz deleted file mode 100644 index e69de29b..00000000 From 0b05fd52923a268cd3d47ba038f38e8efd278c7a Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 9 Jun 2023 07:53:34 +0200 Subject: [PATCH 4/5] return and improvement of the bad commit --- rowers/dataprep.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index d68d01d4..20573d2b 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1628,6 +1628,8 @@ def workout_trimp(w, reset=False): if get_existing_job(w): return w.trimp, 0 elif w.trimp <= 0 and w.averagehr > 0: + if get_existing_job(w): + return 0, w.averagehr ftp = float(r.ftp) _ = myqueue( queuehigh, From eed71c9cb9e3e8efc2d6ba4168d477a4c476d128 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Fri, 9 Jun 2023 08:04:12 +0200 Subject: [PATCH 5/5] fix --- rowers/tests/testdata/testdata.tcx.gz | Bin 0 -> 4000 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rowers/tests/testdata/testdata.tcx.gz diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz new file mode 100644 index 0000000000000000000000000000000000000000..b4061536bfa590b581afbc03b3f086f900c760b4 GIT binary patch literal 4000 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 GfB^vbsT%$O literal 0 HcmV?d00001