def test_parse_fit_gc_trainer(self): # Trainer .fit activity exported from Garmin Connect site df, meta = ZwiftTraining.parse_fit_file( 'tcx_gpx_fit_files/4944741403.fit') self.verify_fit2(meta) self.assertAlmostEqual(df['duration'].iloc[-1], pd.Timedelta('00:36:51').total_seconds(), delta=3 * 60) self.assertAlmostEqual(df['mov_duration'].iloc[-1], pd.Timedelta('00:36:46').total_seconds(), delta=1 * 60) self.assertAlmostEqual(df['distance'].iloc[-1], 14.8, delta=0.2)
def test_parse_fit_zwift(self): # The same activity as above, but with .fit file exported directly from Zwift df, meta = ZwiftTraining.parse_fit_file( 'tcx_gpx_fit_files/2020-06-27-06-38-50.fit') self.verify_fit1(meta) self.assertAlmostEqual(df['duration'].iloc[-1], pd.Timedelta('2:09:53').total_seconds(), delta=2 * 60) self.assertAlmostEqual(df['mov_duration'].iloc[-1], pd.Timedelta('2:01:06').total_seconds(), delta=2 * 60) self.assertAlmostEqual(df['distance'].iloc[-1], 54.94, delta=1)
def test_parse_fit_strava(self): # https://www.strava.com/activities/3676214123 # This is a Zwift fit file, but exported through Strava df, meta = ZwiftTraining.parse_fit_file( 'tcx_gpx_fit_files/3925200538.fit') self.verify_fit1(meta) self.assertAlmostEqual(df['duration'].iloc[-1], pd.Timedelta('2:09:53').total_seconds(), delta=2 * 60) self.assertAlmostEqual(df['mov_duration'].iloc[-1], pd.Timedelta('2:01:06').total_seconds(), delta=2 * 60) self.assertAlmostEqual(df['distance'].iloc[-1], 54.94, delta=1)
def test_parse_fit_trainer_with_gps(self): # We're training on trainer but left the GPS on! Any distance calculation based on GPS # will be ruined. # https://www.strava.com/activities/1746273899/overview df, meta = ZwiftTraining.parse_fit_file( 'tcx_gpx_fit_files/1873571076.fit') self.assertEqual(meta['sport'], 'cycling') self.assertAlmostEqual(meta['distance'], 14, delta=1) self.assertAlmostEqual(meta['duration'].total_seconds(), pd.Timedelta('0:37:50 ').total_seconds(), delta=1 * 60) self.assertAlmostEqual(meta['mov_duration'].total_seconds(), pd.Timedelta('0:35:37').total_seconds(), delta=1 * 60) self.assertAlmostEqual(meta['elevation'], 3, delta=27) # <-- ! self.assertAlmostEqual(meta['speed_avg'], 23.6, delta=0.5) self.assertAlmostEqual(meta['speed_max'], 37.8, delta=6) # <-- ! self.assertAlmostEqual(meta['power_avg'], 107, delta=1) self.assertAlmostEqual(meta['power_max'], 167, delta=10) self.assertAlmostEqual(meta['cadence_avg'], 82, delta=1.5) self.assertAlmostEqual(meta['cadence_max'], 132, delta=20) # <-- ! self.assertAlmostEqual(meta['temp_avg'], 27, delta=0.5) self.assertAlmostEqual(meta['temp_max'], 27, delta=0.5)
def test_parse_fit_bromo100k(self): # Older .fit file from Strava # https://www.strava.com/activities/120989151 df, meta = ZwiftTraining.parse_fit_file( 'tcx_gpx_fit_files/132442327.fit') self.assertEqual(meta['sport'], 'cycling') self.assertAlmostEqual(meta['distance'], 109.89, delta=2) self.assertAlmostEqual(meta['duration'].total_seconds(), pd.Timedelta('8:13:36 ').total_seconds(), delta=1 * 60) self.assertAlmostEqual(meta['mov_duration'].total_seconds(), pd.Timedelta('6:15:09').total_seconds(), delta=10 * 60) self.assertAlmostEqual(meta['elevation'], 1932, delta=225) # <-- !! self.assertAlmostEqual(meta['speed_avg'], 17.6, delta=0.5) self.assertAlmostEqual(meta['speed_max'], 44.6, delta=0.5) self.assertAlmostEqual(meta['hr_avg'], 143, delta=1) self.assertAlmostEqual(meta['hr_max'], 173, delta=1) self.assertAlmostEqual(meta['power_avg'], 117, delta=1) self.assertAlmostEqual(meta['power_max'], 428, delta=10) self.assertAlmostEqual(meta['cadence_avg'], 74, delta=1.5) self.assertAlmostEqual(meta['cadence_max'], 210, delta=20) # <-- ! self.assertAlmostEqual(meta['temp_avg'], 25, delta=0.5) self.assertAlmostEqual(meta['temp_max'], 37, delta=0.5)