From 2fc303a664969efb08437128ae1156d6a7acacf8 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 4 Nov 2020 08:17:36 +0100 Subject: [PATCH 1/3] dataprep updated --- rowers/dataprep.py | 1 - rowers/interactiveplots.py | 2 +- rowers/views/workoutviews.py | 30 +++++------------------------- 3 files changed, 6 insertions(+), 27 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 48eb2c2f..47decad9 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -2203,7 +2203,6 @@ def getsmallrowdata_db(columns, ids=[], doclean=True,workstrokesonly=True,comput if compute and len(df): data = df.copy() if doclean: - print('aap') data = clean_df_stats(data, ignorehr=True, workstrokesonly=workstrokesonly) data.dropna(axis=1,how='all',inplace=True) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index baf131f1..b3be3b10 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -4413,7 +4413,7 @@ def interactive_cum_flex_chart2(theworkouts,promember=0, -def interactive_flex_chart2(id=0,promember=0, +def interactive_flex_chart2(id,r,promember=0, xparam='time', yparam1='pace', yparam2='hr', diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index 43de9788..dcbc1a91 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -3832,35 +3832,15 @@ def workout_flexchart3_view(request,*args,**kwargs): # xparam = xparam.replace('_slsh_','/') # create interactive plot - try: - ( - script, - div, - js_resources, - css_resources, - workstrokesonly - ) = interactive_flex_chart2( - encoder.decode_hex(id),xparam=xparam,yparam1=yparam1, + ( + script, div, js_resources, css_resources, workstrokesonly + ) = interactive_flex_chart2( + encoder.decode_hex(id),request.user.rower, + xparam=xparam,yparam1=yparam1, yparam2=yparam2, promember=promember,plottype=plottype, workstrokesonly=workstrokesonly ) - except ValueError: - ( - script, - div, - js_resources, - css_resources, - workstrokesonly - ) = interactive_flex_chart2( - encoder.decode_hex(id),xparam=xparam,yparam1=yparam1, - yparam2=yparam2, - promember=promember,plottype=plottype, - workstrokesonly=workstrokesonly - ) - js_resources = "" - css_resources = "" - axchoicesbasic = {ax[0]:ax[1] for ax in axes if ax[4]=='basic'} axchoicespro = {ax[0]:ax[1] for ax in axes if ax[4]=='pro'} From d0cf9c745e8f1ef02e4bcff74bc371d6ccc61214 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 4 Nov 2020 08:36:50 +0100 Subject: [PATCH 2/3] Updated - flex chart only, only pace --- rowers/interactiveplots.py | 21 +++++++++++---------- rowers/metrics.py | 21 +++++++++++++++++++++ rowers/views/workoutviews.py | 2 +- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index b3be3b10..5273b2de 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -85,7 +85,7 @@ import rowers.dataprep as dataprep import rowers.metrics as metrics import rowers.c2stuff as c2stuff -from rowers.metrics import axes,axlabels,yaxminima,yaxmaxima +from rowers.metrics import axes,axlabels,yaxminima,yaxmaxima,get_yaxminima,get_yaxmaxima from rowers.utils import lbstoN from rowers.datautils import p0 @@ -4418,7 +4418,8 @@ def interactive_flex_chart2(id,r,promember=0, yparam1='pace', yparam2='hr', plottype='line', - workstrokesonly=False): + workstrokesonly=False, + mode='rower'): watermarkurl = "/static/img/logo7.png" watermarksource = ColumnDataSource(dict( @@ -4535,8 +4536,8 @@ def interactive_flex_chart2(id,r,promember=0, xaxmin = rowdata['x1'].min() else: try: - xaxmax = yaxmaxima[xparam] - xaxmin = yaxminima[xparam] + xaxmax = get_yaxmaxima(r,xparam,mode) + xaxmin = get_yaxminima(r,xparam,mode) except KeyError: xaxmax = rowdata['x1'].max() xaxmin = rowdata['x1'].min() @@ -4733,8 +4734,8 @@ def interactive_flex_chart2(id,r,promember=0, try: - yrange1 = Range1d(start=yaxminima[yparam1], - end=yaxmaxima[yparam1]) + yrange1 = Range1d(start=get_yaxminima(r,yparam1,mode), + end=get_yaxmaxima(r,yparam1,mode)) except KeyError: yrange1 = Range1d(start=rowdata[yparam1].min(), end=rowdata[yparam1].max()) @@ -4743,8 +4744,8 @@ def interactive_flex_chart2(id,r,promember=0, if (xparam != 'time') and (xparam != 'distance') and (xparam != 'cumdist'): try: - xrange1 = Range1d(start=yaxminima[xparam], - end=yaxmaxima[xparam]) + xrange1 = Range1d(start=get_yaxminima(r,xparam,mode), + end=get_yaxmaxima(r,xparam,mode)) except KeyError: xrange1 = Range1d(start=rowdata[xparam].min(), end=rowdata[xparam].max()) @@ -4773,8 +4774,8 @@ def interactive_flex_chart2(id,r,promember=0, if yparam2 != 'None': try: - yrange2 = Range1d(start=yaxminima[yparam2], - end=yaxmaxima[yparam2]) + yrange2 = Range1d(start=get_yaxminima(r,yparam2,mode), + end=get_yaxmaxima(r,yparam2,mode)) except KeyError: yrange2 = Range1d(start=rowdata[yparam2].min(), end=rowdata[yparam2].max()) diff --git a/rowers/metrics.py b/rowers/metrics.py index ab32687b..9b86d3ce 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -12,6 +12,7 @@ from scipy import optimize from django.utils import timezone from math import log10 +from rowers.mytypes import otwtypes,otetypes nometrics = [ 'originalvelo', @@ -361,6 +362,26 @@ yaxminima = {ax[0]:ax[2] for ax in axes} yaxmaxima = {ax[0]:ax[3] for ax in axes} +def get_yaxminima(r,metric,mode): + if metric == 'pace': + if mode in otetypes: + return r.slowpaceerg + else: + return r.slowpaceotw + + return yaxminima[metric] + +def get_yaxmaxima(r,metric,mode): + if metric == 'pace': + if mode in otetypes: + return r.fastpaceerg + else: + return r.fastpaceotw + + return yaxmaxima[metric] + + + defaultfavoritecharts = ( { 'yparam1':'pace', diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index dcbc1a91..fd91c6ef 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -3839,7 +3839,7 @@ def workout_flexchart3_view(request,*args,**kwargs): xparam=xparam,yparam1=yparam1, yparam2=yparam2, promember=promember,plottype=plottype, - workstrokesonly=workstrokesonly + workstrokesonly=workstrokesonly,mode=row.workouttype ) axchoicesbasic = {ax[0]:ax[1] for ax in axes if ax[4]=='basic'} From a3a9b74f54155408337c187be2a544c9a534fc91 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 4 Nov 2020 18:28:55 +0100 Subject: [PATCH 3/3] fix dix --- rowers/tests/test_interactivecharts.py | 30 ++++++++++++++------------ 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/rowers/tests/test_interactivecharts.py b/rowers/tests/test_interactivecharts.py index 7572d68e..522b716d 100644 --- a/rowers/tests/test_interactivecharts.py +++ b/rowers/tests/test_interactivecharts.py @@ -18,6 +18,7 @@ class InteractiveChartTest(TestCase): gdproptindate=timezone.now() ) self.nu = datetime.datetime.now() + self.r = r self.filename = 'rowers/tests/testdata/testdata.csv' self.wotw = Workout.objects.create(name='testworkout', @@ -75,14 +76,14 @@ class InteractiveChartTest(TestCase): @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') def test_interactive_chart5(self, mocked_sqlalchemy,mocked_read_df_sql): - res = iplots.interactive_flex_chart2(self.wote.id,promember=0, + res = iplots.interactive_flex_chart2(self.wote.id,self.r,promember=0, xparam='time', yparam1='pace',yparam2='hr') @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') def test_interactive_chart6(self, mocked_sqlalchemy,mocked_read_df_sql): - res = iplots.interactive_flex_chart2(self.wote.id, + res = iplots.interactive_flex_chart2(self.wote.id,self.r, promember=0,xparam='distance', yparam1='pace',yparam2='hr') @@ -91,49 +92,50 @@ class InteractiveChartTest(TestCase): @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_interactive_chart7(self, mocked_sqlalchemy,mocked_read_df_sql, mocked_getsmallrowdata_db): - res = iplots.interactive_flex_chart2(self.wote.id,promember=0, + res = iplots.interactive_flex_chart2(self.wote.id,self.r,promember=0, xparam='time', - yparam1='pace',yparam2='spm') + yparam1='pace',yparam2='spm',mode='water') @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_interactive_chart8(self, mocked_sqlalchemy,mocked_read_df_sql, mocked_getsmallrowdata_db): - res = iplots.interactive_flex_chart2(self.wote.id, + res = iplots.interactive_flex_chart2(self.wote.id,self.r, promember=0,xparam='distance', - yparam1='pace',yparam2='spm') + yparam1='pace',yparam2='spm',mode='water') @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_interactive_chart9(self, mocked_sqlalchemy,mocked_read_df_sql, mocked_getsmallrowdata_db): - res = iplots.interactive_flex_chart2(self.wote.id, + res = iplots.interactive_flex_chart2(self.wote.id,self.r, promember=1,xparam='time', - yparam1='pace',yparam2='hr') + yparam1='pace',yparam2='hr',mode='water') @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_interactive_chart10(self, mocked_sqlalchemy,mocked_read_df_sql, mocked_getsmallrowdata_db): - res = iplots.interactive_flex_chart2(self.wote.id, + res = iplots.interactive_flex_chart2(self.wote.id,self.r, promember=1,xparam='distance', - yparam1='pace',yparam2='hr') + yparam1='pace',yparam2='hr',mode='water') @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_interactive_chart11(self, mocked_sqlalchemy,mocked_read_df_sql, mocked_getsmallrowdata_db): - res = iplots.interactive_flex_chart2(self.wote.id, + res = iplots.interactive_flex_chart2(self.wote.id,self.r, promember=1,xparam='time', - yparam1='pace',yparam2='spm') + yparam1='pace',yparam2='spm',mode='water') @patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.read_df_sql') @patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) def test_interactive_chart12(self, mocked_sqlalchemy,mocked_read_df_sql, mocked_getsmallrowdata_db): - res = iplots.interactive_flex_chart2(self.wote.id,promember=1, + res = iplots.interactive_flex_chart2(self.wote.id,self.r, + promember=1, xparam='distance', - yparam1='pace',yparam2='spm') + yparam1='pace',yparam2='spm',mode='water')