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

View File

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

View File

@@ -309,11 +309,17 @@ def mocked_getrowdata_uh(*args, **kwargs): # pragma: no cover
return df, row
def mocked_getsmallrowdata_uh(*args, **kwargs): # pragma: no cover
df = pl.read_csv('rowers/tests/testdata/uhfull.csv')
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):
df = pl.read_csv('rowers/tests/testdata/getrowdata_mock.csv')

View File

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

View File

@@ -71,9 +71,10 @@ class ForceUnits(TestCase):
w = Workout.objects.get(id=1)
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())
self.assertEqual(average_N,398)
self.assertEqual(average_N,400)
data = dataprep.read_df_sql(13)
average_N = int(data['averageforce'].mean())
@@ -119,9 +120,10 @@ class ForceUnits(TestCase):
w = Workout.objects.get(id=13)
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())
self.assertEqual(average_N,263)
self.assertEqual(average_N,271)
def test_upload_speedcoach_colin(self):
login = self.c.login(username=self.u.username, password=self.password)
@@ -155,9 +157,10 @@ class ForceUnits(TestCase):
w = Workout.objects.get(id=13)
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())
self.assertEqual(average_N,105)
self.assertEqual(average_N,122)
@override_settings(TESTING=True)
class TestForceUnit(TestCase):
@@ -206,7 +209,7 @@ class TestForceUnit(TestCase):
rowdata = dataprep.rdata('rowers/tests/testdata/PainsledForce.csv')
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)
try:
average_N = int(df['averageforce'].mean())

View File

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

Binary file not shown.