From 029dddd1dbfb8bf13d745e4a1866277afef1d5cb Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 26 Nov 2024 19:40:10 +0100 Subject: [PATCH] tested --- rowers/dataroutines.py | 15 +++++++++++++++ rowers/forms.py | 19 +++++++++++-------- rowers/interactiveplots.py | 4 +++- rowers/metrics.py | 13 +++++++++++++ rowers/tests/testdata/testdata.tcx.gz | Bin 4000 -> 4000 bytes 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/rowers/dataroutines.py b/rowers/dataroutines.py index d2857736..9360b1b7 100644 --- a/rowers/dataroutines.py +++ b/rowers/dataroutines.py @@ -176,6 +176,7 @@ columndict = { 'slip': 'slip', 'workoutstate': ' WorkoutState', 'cumdist': 'cum_dist', + 'check_factor': 'check_factor', } @@ -1599,6 +1600,10 @@ def read_data(columns, ids=[], doclean=True, workstrokesonly=True, debug=False, try: datadf = pl.concat(data).select(columns) + except ColumnNotFoundError: + datadf = pl.concat(data) + existing_columns = [col for col in columns if col in datadf.columns] + datadf = datadf.select(existing_columns) except (ShapeError, SchemaError): data = [ df.select(columns) @@ -2302,6 +2307,16 @@ def dataplep(rowdatadf, id=0, inboard=0.88, forceunit='lbs', bands=True, barchar hr_bottom = 0.0*df[' HRCur (bpm)'], ) + + if 'check_factor' not in df.columns: + data = data.with_columns( + check_factor = pl.lit(0.0), + ) + else: + data = data.with_columns( + check_factor = df['check_factor'], + ) + if 'wash' not in df.columns: data = data.with_columns( wash = pl.lit(0.0), diff --git a/rowers/forms.py b/rowers/forms.py index 66d723c0..fa3f1b4b 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -1478,15 +1478,18 @@ class FusionMetricChoiceForm(ModelForm): value in self.fields['columns'].choices} for label in labeldict: - if df.loc[:, label].std() == 0: - try: - formaxlabels2.pop(label) - except KeyError: # pragma: no cover - pass + try: + if df.loc[:, label].std() == 0: + try: + formaxlabels2.pop(label) + except KeyError: # pragma: no cover + pass + except KeyError: # pragma: no cover + formaxlabels2.pop(label) - metricchoices = list( - sorted(formaxlabels2.items(), key=lambda x: x[1])) - self.fields['columns'].choices = metricchoices + metricchoices = list( + sorted(formaxlabels2.items(), key=lambda x: x[1])) + self.fields['columns'].choices = metricchoices class PlannedSessionSelectForm(forms.Form): diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 2995162a..4e4d4c74 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -1841,6 +1841,8 @@ def interactive_flex_chart2(id, r, promember=0, rowdata[column], 5)) except KeyError: pass + except ColumnNotFoundError: + pass if len(rowdata) < 2: if promember: @@ -1938,10 +1940,10 @@ def interactive_flex_chart2(id, r, promember=0, rowdata = rowdata.with_columns((pl.lit(axlabels[yparam2])).alias("yname2")) except (KeyError, ColumnNotFoundError): # pragma: no cover rowdata = rowdata.with_columns((pl.lit(yparam2)).alias("yname2")) - else: # pragma: no cover rowdata = rowdata.with_columns((pl.col("yname1")).alias("yname2")) + def func(x, a, b): return a*x+b diff --git a/rowers/metrics.py b/rowers/metrics.py index 83299c9c..995a4da6 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -305,6 +305,19 @@ rowingmetrics = ( 'type': 'pro', 'group': 'stroke'}), + ('check_factor', { + 'numtype': 'float', + 'null': True, + 'verbose_name': 'Check Factor', + 'ax_min': 0, + 'ax_max': 100, + 'default': 0, + 'sigfigs': 1, + 'maysmooth': True, + 'mode': 'water', + 'type': 'pro', + 'group': 'stroke'}), + ('effectiveangle', { 'numtype': 'float', diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index ee6427eb36c48bb9e301489a13aa72041967ea78..e623b2e3e6bca45b93f4f20e085899e23fdf181d 100644 GIT binary patch delta 259 zcmV+e0sQ`;AD|xxABzYGd=W;m2dEBz%RgWI8NCD-;Jf4g$AiW0fIGW0ef*92^W~@2 z?)!rW7m4H9#fN>LcIoZ8ID5P4)-Su0lkL+=A6M(+mtEhb^LD$pD^dA$+`;|V{j0N! zE3e7@^YfF{QP-!Re)(ctp8KnlrSE=zy*hb$`E!3y?_)aj%ES4v;EV%ml z>)lrCwAst2{k9t}AMF?CKX{&Q`tY~q$+Ful6Nmii!=t-$Uk8u7_3@*Jhrc|{Y_@;y zw*Q*m;-{}qUo6v|0sH{4`~P5Z<%`{u-#(_pJ6qJNb$SjD63XSp!}K&>q)Q*(`5!~r Js`bQx0RRcen>7Fc delta 259 zcmV+e0sQ`;AD|xxABzYGiS9wM2dEBzf0DIJ_X1xqe0SXcc(B+VaA$X>kH0a0zWlV> zeSh%aB5^#s_^|KOF1iYE4FJFwybANTR^xe;|S0^tof9~(;eN2a5c{m@oJn8)>&>K7RD@@Rz5V&GygT z_FvOm{Pgwdi)FeqfFA&M{~s)_e6f4-+sAZxXN!8ZPS4>%Lb<$nn4ZRqbm_x8{{uPr JBuK=70RZa;knI2f