Exemple #1
0
def test_dtypes_from_api(reference_laps_data):
    session, laps = reference_laps_data
    for drv in session.car_data.keys():
        ensure_data_type(CAR_DATA_DTYPES, session.car_data[drv])

    for drv in session.pos_data.keys():
        ensure_data_type(POS_DATA_DTYPES, session.pos_data[drv])
Exemple #2
0
def test_merging_10_hz(reference_laps_data):
    session, laps = reference_laps_data
    lap = laps.pick_fastest()
    drv = lap['DriverNumber']
    test_car_data = session.car_data[drv].slice_by_lap(lap)
    test_pos_data = session.pos_data[drv].slice_by_lap(lap)
    merged = test_car_data.merge_channels(test_pos_data, frequency=10)

    ensure_data_type(CAR_DATA_DTYPES, merged)
    ensure_data_type(POS_DATA_DTYPES, merged)

    # test that all channels still exist
    channels = set(test_car_data.columns).union(set(test_pos_data.columns))
    for ch in channels:
        assert ch in merged.columns

    # assert correct number of samples for duration at 10 Hz within +-1 sample
    n_samples_target = round(test_car_data['Time'].iloc[-1].total_seconds() * 10, 0)
    assert len(merged) in (n_samples_target-1, n_samples_target, n_samples_target+1)

    # no values should be nan; everything should be interpolated
    assert not pandas.isnull(merged.to_numpy()).any()

    # check correct timing
    assert merged['Time'].iloc[0] == pandas.Timedelta(0)
    assert merged['SessionTime'].iloc[0] != pandas.Timedelta(0)
Exemple #3
0
def test_merging_original_freq(reference_laps_data):
    session, laps = reference_laps_data
    lap = laps.pick_fastest()
    drv = lap['DriverNumber']
    test_car_data = session.car_data[drv].slice_by_lap(lap)
    test_pos_data = session.pos_data[drv].slice_by_lap(lap)
    merged = test_car_data.merge_channels(test_pos_data, frequency='original')

    ensure_data_type(CAR_DATA_DTYPES, merged)
    ensure_data_type(POS_DATA_DTYPES, merged)

    # test that all channels still exist
    channels = set(test_car_data.columns).union(set(test_pos_data.columns))
    for ch in channels:
        assert ch in merged.columns

    # test that merged number of samples is within 1% of sum of samples of the individual objects
    # some samples can overlap and therefore be combined during merging but should only happen for very few
    assert round((len(test_car_data) + len(test_pos_data)) / len(merged), 2) == 1.0

    # no values should be nan; everything should be interpolated
    assert not pandas.isnull(merged.to_numpy()).any()

    # check correct timing
    assert merged['Time'].iloc[0] == pandas.Timedelta(0)
    assert merged['SessionTime'].iloc[0] != pandas.Timedelta(0)
Exemple #4
0
def test_dtypes_pick(reference_laps_data):
    session, laps = reference_laps_data
    drv = list(laps['Driver'].unique())[1]  # some driver
    ensure_data_type(LAP_DTYPES, laps.pick_driver(drv))
    ensure_data_type(LAP_DTYPES, laps.pick_quicklaps())
    ensure_data_type(LAP_DTYPES, laps.iloc[:2])
    ensure_data_type(LAP_DTYPES,
                     laps.pick_driver(drv).iloc[:3].pick_quicklaps())
Exemple #5
0
def test_slice_by_time(reference_laps_data):
    session, laps = reference_laps_data
    drv = list(session.car_data.keys())[1]  # some driver
    test_data = session.car_data[drv]
    t0 = test_data['SessionTime'].iloc[1000]
    t1 = test_data['SessionTime'].iloc[2000]

    slice1 = test_data.slice_by_time(t0, t1)
    assert slice1['SessionTime'].iloc[0] == t0
    assert slice1['SessionTime'].iloc[-1] == t1
    assert len(slice1) == 1001
    ensure_data_type(CAR_DATA_DTYPES, slice1)

    dt = pandas.Timedelta(100, 'ms')
    slice2 = test_data.slice_by_time(t0-dt, t1+dt, interpolate_edges=True)
    assert slice2['SessionTime'].iloc[0] == t0 - dt
    assert slice2['SessionTime'].iloc[-1] == t1 + dt
    assert len(slice2) == 1003
    ensure_data_type(CAR_DATA_DTYPES, slice2)
Exemple #6
0
def test_dtypes_from_api(reference_laps_data):
    session, laps = reference_laps_data
    ensure_data_type(LAP_DTYPES, laps)