Private
Public Access
1
0

passing tests ...

This commit is contained in:
2024-04-29 21:41:34 +02:00
parent f6c535d2d6
commit e83d0a26f6
7 changed files with 44 additions and 47 deletions

View File

@@ -1,8 +1,10 @@
import pandas as pd import pandas as pd
import polars as pl
import numpy as np import numpy as np
from scipy.interpolate import griddata from scipy.interpolate import griddata
from scipy import optimize from scipy import optimize
from rowers.mytypes import otwtypes, otetypes, rowtypes from rowers.mytypes import otwtypes, otetypes, rowtypes
from rowers.models import Workout from rowers.models import Workout
@@ -358,8 +360,8 @@ def getmaxwattinterval(tt, ww, i):
def getfastest(df, thevalue, mode='distance'): def getfastest(df, thevalue, mode='distance'):
tt = df['time'].copy() tt = df['time'].clone()
dd = df['cumdist'].copy() dd = df['cumdist'].clone()
tmax = tt.max() tmax = tt.max()
if mode == 'distance': # pragma: no cover if mode == 'distance': # pragma: no cover
@@ -370,40 +372,28 @@ def getfastest(df, thevalue, mode='distance'):
return 0 return 0
# if tmax > 500000:
# newlen=int(tmax/2000.)
# newt = np.arange(newlen)*tmax/float(newlen)
# deltat = newt[1]-newt[0]
# else:
# newt = np.arange(0,tmax,10.)
# deltat = 10.
newlen = 1000 newlen = 1000
newt = np.arange(newlen)*tmax/float(newlen) newt = np.arange(newlen)*tmax/float(newlen)
deltat = newt[1]-newt[0] deltat = newt[1]-newt[0]
dd = griddata(tt.values, dd = griddata(tt.to_numpy(),
dd.values, newt, method='linear', rescale=True) dd.to_numpy(), newt, method='linear', rescale=True)
tt = pd.Series(newt, dtype='float') tt = pl.Series(newt, dtype=pl.Float64)
dd = pd.Series(dd, dtype='float') dd = pl.Series(dd, dtype=pl.Float64)
G = pl.concat([pl.Series([0.0]), dd])
G = pd.concat([pd.Series([0]), dd])
# T = pd.concat([pd.Series([0]), dd])
# h = np.mgrid[0:len(tt)+1:1, 0:len(tt)+1:1]
# distances = pd.DataFrame(h[1]-h[0])
ones = 1+np.zeros(len(G)) ones = 1+np.zeros(len(G))
Ghor = np.outer(ones, G) Ghor = np.outer(ones, G)
# Thor = np.outer(ones, T)
# Tver = np.outer(T, ones)
Gver = np.outer(G, ones) Gver = np.outer(G, ones)
Gdif = Ghor-Gver Gdif = Ghor-Gver
Gdif = np.tril(Gdif.T).T Gdif = np.tril(Gdif.T).T
Gdif = pd.DataFrame(Gdif) Gdif = pl.DataFrame(Gdif)
F = Gdif F = Gdif
F.fillna(inplace=True, method='ffill', axis=1) F = F.fill_nan(0)
F.fillna(inplace=True, value=0)
restime = [] restime = []
distance = [] distance = []
@@ -414,7 +404,7 @@ def getfastest(df, thevalue, mode='distance'):
restime.append(deltat*i) restime.append(deltat*i)
cp = np.diag(F, i).max() cp = np.diag(F, i).max()
loc = np.argmax(np.diag(F, i)) loc = np.argmax(np.diag(F, i))
thestarttime = tt[loc] thestarttime = tt.to_numpy()[loc]
starttimes.append(thestarttime) starttimes.append(thestarttime)
distance.append(cp) distance.append(cp)
@@ -424,10 +414,6 @@ def getfastest(df, thevalue, mode='distance'):
distance = np.array(distance) distance = np.array(distance)
starttimes = np.array(starttimes) starttimes = np.array(starttimes)
# for i in range(len(restime)):
# if restime[i]<thevalue*60*1000:
# print(i,restime[i],distance[i],60*1000*thevalue)
if mode == 'distance': if mode == 'distance':
duration = griddata(distance, restime, [ duration = griddata(distance, restime, [
thevalue], method='linear', rescale=True) thevalue], method='linear', rescale=True)
@@ -436,7 +422,6 @@ def getfastest(df, thevalue, mode='distance'):
distance = griddata(distance, distance, [ distance = griddata(distance, distance, [
thevalue], method='linear', rescale=True) thevalue], method='linear', rescale=True)
endtime = starttime+duration endtime = starttime+duration
# print(duration,starttime,endtime,'aa')
return duration[0]/1000., starttime[0]/1000., endtime[0]/1000. return duration[0]/1000., starttime[0]/1000., endtime[0]/1000.
else: # pragma: no cover else: # pragma: no cover
distance = griddata(restime, distance, [ distance = griddata(restime, distance, [

View File

@@ -435,8 +435,9 @@ def add_workouts_plannedsession(ws, ps, r):
for record in records: for record in records:
record.delete() record.delete()
df = dataprep.getsmallrowdata_db( df = dataprep.read_data(
['time', 'cumdist'], ids=[w.id]) ['time', 'cumdist'], ids=[w.id])
df = dataprep.remove_nulls_pl(df)
fastest_milliseconds, starttime, endtime = datautils.getfastest( fastest_milliseconds, starttime, endtime = datautils.getfastest(
df, ps.sessionvalue, mode='distance') df, ps.sessionvalue, mode='distance')
@@ -466,11 +467,11 @@ def add_workouts_plannedsession(ws, ps, r):
for record in records: for record in records:
record.delete() record.delete()
df = dataprep.getsmallrowdata_db( df = dataprep.read_data(
['time', 'cumdist'], ids=[w.id]) ['time', 'cumdist'], ids=[w.id])
df = dataprep.remove_nulls_pl(df)
fastest_meters, starttime, endtime = datautils.getfastest( fastest_meters, starttime, endtime = datautils.getfastest(
df, ps.sessionvalue, mode='time') df, ps.sessionvalue, mode='time')
if fastest_meters > 0: if fastest_meters > 0:
w.plannedsession = ps w.plannedsession = ps
w.save() w.save()
@@ -1685,8 +1686,9 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
record.coursecompleted = True record.coursecompleted = True
record.workoutid = ws[0].id record.workoutid = ws[0].id
if race.sessiontype == 'fastest_distance': if race.sessiontype == 'fastest_distance':
df = dataprep.getsmallrowdata_db( df = dataprep.read_data(
['time', 'cumdist'], ids=[ws[0].id]) ['time', 'cumdist'], ids=[ws[0].id])
df = dataprep.remove_nulls_pl(df)
fastest_milliseconds, startsecond, endsecond = datautils.getfastest( fastest_milliseconds, startsecond, endsecond = datautils.getfastest(
df, race.sessionvalue, mode='distance') df, race.sessionvalue, mode='distance')
velo = race.sessionvalue/fastest_milliseconds velo = race.sessionvalue/fastest_milliseconds
@@ -1702,8 +1704,9 @@ def add_workout_fastestrace(ws, race, r, recordid=0, doregister=False):
record.endsecond = endsecond record.endsecond = endsecond
record.save() record.save()
if race.sessiontype == 'fastest_time': # pragma: no cover if race.sessiontype == 'fastest_time': # pragma: no cover
df = dataprep.getsmallrowdata_db( df = dataprep.read_data(
['time', 'cumdist'], ids=[ws[0].id]) ['time', 'cumdist'], ids=[ws[0].id])
df = dataprep.remove_nulls_pl(df)
fastest_meters, startsecond, endsecond = datautils.getfastest( fastest_meters, startsecond, endsecond = datautils.getfastest(
df, race.sessionvalue, mode='time') df, race.sessionvalue, mode='time')
velo = fastest_meters/(60.*race.sessionvalue) velo = fastest_meters/(60.*race.sessionvalue)

View File

@@ -309,11 +309,17 @@ def mocked_getrowdata_uh(*args, **kwargs): # pragma: no cover
return df, row return df, row
def mocked_getsmallrowdata_uh(*args, **kwargs): # pragma: no cover def mocked_getsmallrowdata_uh(*args, **kwargs): # pragma: no cover
df = pl.read_csv('rowers/tests/testdata/uhfull.csv') df = pl.read_csv('rowers/tests/testdata/uhfull.csv')
return df return df
def mocked_getsmallrowdata_uh_pd(*args, **kwargs): # pragma: no cover
df = pd.read_csv('rowers/tests/testdata/uhfull.csv')
return df
def mocked_getsmallrowdata_forfusion(*args, **kwargs): def mocked_getsmallrowdata_forfusion(*args, **kwargs):
df = pl.read_csv('rowers/tests/testdata/getrowdata_mock.csv') df = pl.read_csv('rowers/tests/testdata/getrowdata_mock.csv')

View File

@@ -597,8 +597,8 @@ class DataPrepTests(TestCase):
result = getagegrouprecord(25) result = getagegrouprecord(25)
self.assertEqual(int(result),590) self.assertEqual(int(result),590)
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_uh) @patch('rowers.dataprep.getsmallrowdata_pd',side_effect=mocked_getsmallrowdata_uh_pd)
def test_get_videodata(self,mocked_getsmallrowdata_uh): def test_get_videodata(self,mocked_getsmallrowdata_uh_pd):
data, metrics, maxtime = dataprep.get_video_data(self.wuh_otw) data, metrics, maxtime = dataprep.get_video_data(self.wuh_otw)
self.assertEqual(len(data),9) self.assertEqual(len(data),9)

View File

@@ -71,9 +71,10 @@ class ForceUnits(TestCase):
w = Workout.objects.get(id=1) w = Workout.objects.get(id=1)
self.assertEqual(w.forceunit,'lbs') self.assertEqual(w.forceunit,'lbs')
df = dataprep.getsmallrowdata_db(['averageforce'],ids=[13]) df = dataprep.read_data(['averageforce'],ids=[13])
df = dataprep.remove_nulls_pl(df)
average_N = int(df['averageforce'].mean()) average_N = int(df['averageforce'].mean())
self.assertEqual(average_N,398) self.assertEqual(average_N,400)
data = dataprep.read_df_sql(13) data = dataprep.read_df_sql(13)
average_N = int(data['averageforce'].mean()) average_N = int(data['averageforce'].mean())
@@ -119,9 +120,10 @@ class ForceUnits(TestCase):
w = Workout.objects.get(id=13) w = Workout.objects.get(id=13)
self.assertEqual(w.forceunit,'N') self.assertEqual(w.forceunit,'N')
df = dataprep.getsmallrowdata_db(['averageforce'],ids=[13]) df = dataprep.read_data(['averageforce'],ids=[13])
df = dataprep.remove_nulls_pl(df)
average_N = int(df['averageforce'].mean()) average_N = int(df['averageforce'].mean())
self.assertEqual(average_N,263) self.assertEqual(average_N,271)
def test_upload_speedcoach_colin(self): def test_upload_speedcoach_colin(self):
login = self.c.login(username=self.u.username, password=self.password) login = self.c.login(username=self.u.username, password=self.password)
@@ -155,9 +157,10 @@ class ForceUnits(TestCase):
w = Workout.objects.get(id=13) w = Workout.objects.get(id=13)
self.assertEqual(w.forceunit,'N') self.assertEqual(w.forceunit,'N')
df = dataprep.getsmallrowdata_db(['averageforce'],ids=[13]) df = dataprep.read_data(['averageforce'],ids=[13])
df = dataprep.remove_nulls_pl(df)
average_N = int(df['averageforce'].mean()) average_N = int(df['averageforce'].mean())
self.assertEqual(average_N,105) self.assertEqual(average_N,122)
@override_settings(TESTING=True) @override_settings(TESTING=True)
class TestForceUnit(TestCase): class TestForceUnit(TestCase):
@@ -206,7 +209,7 @@ class TestForceUnit(TestCase):
rowdata = dataprep.rdata('rowers/tests/testdata/PainsledForce.csv') rowdata = dataprep.rdata('rowers/tests/testdata/PainsledForce.csv')
df = dataprep.dataprep(rowdata.df) df = dataprep.dataprep(rowdata.df)
#df = dataprep.getsmallrowdata_db(['averageforce'],ids=[w[0].id],doclean=False, #df = dataprep.read_data(['averageforce'],ids=[w[0].id],doclean=False,
# compute=False) # compute=False)
try: try:
average_N = int(df['averageforce'].mean()) average_N = int(df['averageforce'].mean())

View File

@@ -29,8 +29,8 @@ class ViewTest(TestCase):
self.nu = datetime.datetime.now() self.nu = datetime.datetime.now()
@patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) @patch('rowers.dataprep.read_data',side_effect=mocked_read_data)
def test_upload_view_sled(self, mocked_sqlalchemy,mocked_getsmallrowdata_db): def test_upload_view_sled(self, mocked_sqlalchemy,mocked_read_data):
login = self.c.login(username='john',password='koeinsloot') login = self.c.login(username='john',password='koeinsloot')
self.assertTrue(login) self.assertTrue(login)
@@ -120,8 +120,8 @@ class ViewTest(TestCase):
pass pass
@patch('rowers.dataprep.create_engine') @patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db',side_effect=mocked_getsmallrowdata_db) @patch('rowers.dataprep.read_data',side_effect=mocked_read_data)
def test_upload_view_sled_bg(self, mocked_sqlalchemy,mocked_getsmallrowdata_db): def test_upload_view_sled_bg(self, mocked_sqlalchemy,mocked_read_data):
login = self.c.login(username='john',password='koeinsloot') login = self.c.login(username='john',password='koeinsloot')
self.assertTrue(login) self.assertTrue(login)

Binary file not shown.