Private
Public Access
1
0

further cleaning up

This commit is contained in:
Sander Roosendaal
2021-04-16 19:32:06 +02:00
parent 8f81c5fc92
commit 6331b4ff4a
5 changed files with 26 additions and 153 deletions

View File

@@ -2182,85 +2182,6 @@ def handle_updateergcp(rower_id,workoutfilenames,debug=False,**kwargs):
return 1
def cp_from_workoutids(workoutids,debug=False):
columns = ['power','workoutid','time']
df = getsmallrowdata_db(columns,ids=workoutids,debug=debug)
df.dropna(inplace=True,axis=0)
if df.empty: # pragma: no cover
# change this
return 0,0,0
# df is not empty. We continue
dfgrouped = df.groupby(['workoutid'])
maxt = 1.05*df['time'].max()/1000.
logarr = datautils.getlogarr(maxt)
data = []
for id in workoutids:
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=id)
try:
df = pd.read_parquet(cpfile)
df['workout'] = str(id)
data.append(df)
except: # pragma: no cover
pass # ignore for now
if len(data) == 0: # pragma: no cover
return 0,0,0
if len(data)>1: # pragma: no cover
df = pd.concat(data,axis=0)
df = df[df['cp'] == df.groupby(['delta'])['cp'].transform('max')]
df = df.sort_values(['delta']).reset_index()
powerdf = pd.DataFrame({
'Delta':df['delta'],
'CP':df['cp'],
})
powerdf = powerdf[powerdf['CP']>0]
powerdf.dropna(axis=0,inplace=True)
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
p1,fitt,fitpower,ratio = datautils.cpfit(powerdf)
# This is code duplication from datautils -- correct asap
fitfunc = lambda pars,x: abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
powerfourmin = fitfunc(p1,240.)
powerhour = fitfunc(p1,3600.)
# 2k power
velofourmin = (powerfourmin/2.8)**(1./3.)
dfourmin = 240.*velofourmin
dratio = 2000./dfourmin
pacefourmin = 500./velofourmin
# assume 5 sec per doubling drop
pace2k = pacefourmin + 5.*np.log10(dratio)/np.log10(2.)
velo2k = 500./pace2k
t2k = 2000./velo2k
pwr2k = fitfunc(p1,t2k)
velo2 = (pwr2k/2.8)**(1./3.)
if np.isnan(velo2) or velo2 <= 0: # pragma: no cover
velo2 = 1.0
t2 = 2000./velo2
pwr2k = fitfunc(p1,t2)
velo3 = (pwr2k/2.8)**(1./3.)
t3 = 2000./velo3
power2k = fitfunc(p1,t3)
return powerfourmin,power2k,powerhour
@app.task
@@ -2834,7 +2755,7 @@ def handle_setcp(strokesdf,filename,workoutid,debug=False,**kwargs):
return 0
try:
powermean = strokesdf['power'].mean()
except KeyError:
except KeyError: # pragma: no cover
powermean = 0
@@ -3302,7 +3223,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
'resolution': 'medium',}
url = "https://www.strava.com/api/v3/activities/"+str(stravaid)
response = requests.get(url,headers=headers)
if response.status_code != 200:
if response.status_code != 200: # pragma: no cover
tstamp = time.localtime()
timestamp = time.strftime('%b-%d-%Y_%H%M', tstamp)
with open('strava_webhooks.log','a') as f:
@@ -3329,7 +3250,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
try:
startdatetime = workoutsummary['start_date']
except KeyError:
except KeyError: # pragma: no cover
startdatetime = timezone.now()
spm = get_strava_stream(None,'cadence',stravaid,authorizationstring=authorizationstring)
@@ -3352,7 +3273,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
if t is not None:
nr_rows = len(t)
else:
else: # pragma: no cover
try:
duration = int(workoutsummary['elapsed_time'])
except KeyError:
@@ -3362,22 +3283,22 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
nr_rows = len(t)
if nr_rows == 0:
if nr_rows == 0: # pragma: no cover
return 0
if d is None:
if d is None: # pragma: no cover
d = 0*t
if spm is None:
if spm is None: # pragma: no cover
spm = np.zeros(nr_rows)
if power is None:
if power is None: # pragma: no cover
power = np.zeros(nr_rows)
if hr is None:
if hr is None: # pragma: no cover
hr = np.zeros(nr_rows)
if velo is None:
if velo is None: # pragma: no cover
velo = np.zeros(nr_rows)
dt = np.diff(t).mean()
@@ -3389,10 +3310,10 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
try:
lat = coords[:,0]
lon = coords[:,1]
except IndexError:
except IndexError: # pragma: no cover
lat = np.zeros(len(t))
lon = np.zeros(len(t))
else:
else: # pragma: no cover
lat = np.zeros(len(t))
lon = np.zeros(len(t))
@@ -3419,13 +3340,13 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
try:
workouttype = mytypes.stravamappinginv[workoutsummary['type']]
except KeyError:
except KeyError: # pragma: no cover
workouttype = 'other'
if workouttype.lower() == 'rowing':
if workouttype.lower() == 'rowing': # pragma: no cover
workouttype = 'rower'
if 'summary_polyline' in workoutsummary['map'] and workouttype=='rower':
if 'summary_polyline' in workoutsummary['map'] and workouttype=='rower': # pragma: no cover
workouttype = 'water'
try:
@@ -3442,7 +3363,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
rowdatetime = iso8601.parse_date(workoutsummary['date_utc'])
except KeyError:
rowdatetime = iso8601.parse_date(workoutsummary['start_date'])
except ParseError:
except ParseError: # pragma: no cover
rowdatetime = iso8601.parse_date(workoutsummary['date'])
@@ -3454,7 +3375,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
try:
title = workoutsummary['name']
except KeyError:
except KeyError: # pragma: no cover
title = ""
try:
t = data['comments'].split('\n', 1)[0]
@@ -3476,9 +3397,9 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
try:
latcoord = strokedata.loc[:,'lat']
loncoord = strokedata.loc[:,'lon']
if latcoord.std() == 0 and loncoord.std() == 0 and workouttype == 'water':
if latcoord.std() == 0 and loncoord.std() == 0 and workouttype == 'water': # pragma: no cover
workouttype = 'rower'
except:
except: # pragma: no cover
latcoord = np.zeros(nr_rows)
loncoord = np.zeros(nr_rows)
if workouttype == 'water':
@@ -3488,19 +3409,19 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
try:
strokelength = strokedata.loc[:,'strokelength']
except:
except: # pragma: no cover
strokelength = np.zeros(nr_rows)
dist2 = 0.1*strokedata.loc[:,'d']
try:
spm = strokedata.loc[:,'spm']
except KeyError:
except KeyError: # pragma: no cover
spm = 0*dist2
try:
hr = strokedata.loc[:,'hr']
except KeyError:
except KeyError: # pragma: no cover
hr = 0*spm
pace = strokedata.loc[:,'p']/10.
pace = np.clip(pace,0,1e4)