passing tests ...
This commit is contained in:
@@ -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, [
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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')
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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())
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
Reference in New Issue
Block a user