From 0a37b2b7de6cb65ed3718572ed40ac3922953c8c Mon Sep 17 00:00:00 2001 From: glopesdev Date: Fri, 21 Mar 2025 09:50:48 +0000 Subject: [PATCH 1/3] Add regression tests for reference epoch --- tests/params.py | 2 ++ tests/test_io.py | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/params.py b/tests/params.py index 7baa254..d675453 100644 --- a/tests/params.py +++ b/tests/params.py @@ -1,4 +1,5 @@ from dataclasses import dataclass +from datetime import datetime from os import PathLike from pathlib import Path from typing import Iterable, Optional, Type, Union @@ -20,6 +21,7 @@ class DataFileParam: expected_length: Optional[int] = None expected_error: Optional[Type[BaseException]] = None repeat_data: Optional[int] = None + epoch: Optional[datetime] = None keep_type: bool = False def __post_init__(self): diff --git a/tests/test_io.py b/tests/test_io.py index ddb0a44..a502c08 100644 --- a/tests/test_io.py +++ b/tests/test_io.py @@ -1,10 +1,11 @@ from contextlib import nullcontext import numpy as np +import pandas as pd import pytest from pytest import mark -from harp.io import MessageType, format, parse, read +from harp.io import REFERENCE_EPOCH, MessageType, format, parse, read from tests.params import DataFileParam testdata = [ @@ -30,6 +31,7 @@ DataFileParam(path="data/write_0.bin", expected_address=0, expected_rows=4), DataFileParam(path="data/write_0.bin", expected_address=0, expected_rows=4, keep_type=True), DataFileParam(path="data/device_0.bin", expected_rows=300, repeat_data=300), + DataFileParam(path="data/device_0.bin", expected_rows=1, epoch=REFERENCE_EPOCH), ] @@ -46,6 +48,7 @@ def test_read(dataFile: DataFileParam): address=dataFile.expected_address, dtype=dataFile.expected_dtype, length=dataFile.expected_length, + epoch=dataFile.epoch, keep_type=dataFile.keep_type, ) else: @@ -54,9 +57,11 @@ def test_read(dataFile: DataFileParam): address=dataFile.expected_address, dtype=dataFile.expected_dtype, length=dataFile.expected_length, + epoch=dataFile.epoch, keep_type=dataFile.keep_type, ) assert len(data) == dataFile.expected_rows + assert isinstance(data.index, pd.DatetimeIndex if dataFile.epoch else pd.Index) if dataFile.keep_type: assert MessageType.__name__ in data.columns and data[MessageType.__name__].dtype == "category" From d36187dfcb3f572f5a05c6648f36203ffe4c259a Mon Sep 17 00:00:00 2001 From: glopesdev Date: Fri, 21 Mar 2025 10:00:39 +0000 Subject: [PATCH 2/3] Add regression tests for empty data --- tests/data/empty_0.bin | 0 tests/test_io.py | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 tests/data/empty_0.bin diff --git a/tests/data/empty_0.bin b/tests/data/empty_0.bin new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_io.py b/tests/test_io.py index a502c08..74536b3 100644 --- a/tests/test_io.py +++ b/tests/test_io.py @@ -32,6 +32,8 @@ DataFileParam(path="data/write_0.bin", expected_address=0, expected_rows=4, keep_type=True), DataFileParam(path="data/device_0.bin", expected_rows=300, repeat_data=300), DataFileParam(path="data/device_0.bin", expected_rows=1, epoch=REFERENCE_EPOCH), + DataFileParam(path="data/empty_0.bin", expected_rows=0, epoch=REFERENCE_EPOCH), + DataFileParam(path="data/empty_0.bin", expected_rows=0), ] From 3fdb2f60cbfb9286e99305ad49910b7ec1b0f482 Mon Sep 17 00:00:00 2001 From: glopesdev Date: Fri, 21 Mar 2025 10:01:21 +0000 Subject: [PATCH 3/3] Ensure datetime index when epoch is specified --- harp/io.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/harp/io.py b/harp/io.py index 75ec78b..28ffe1f 100644 --- a/harp/io.py +++ b/harp/io.py @@ -132,7 +132,12 @@ def _fromraw( keep_type: bool = False, ): if len(data) == 0: - return pd.DataFrame(columns=columns, index=pd.Index([], dtype=np.float64, name="Time")) + return pd.DataFrame( + columns=columns, + index=pd.DatetimeIndex([], name="Time") + if epoch + else pd.Index([], dtype=np.float64, name="Time"), + ) if address is not None and address != data[2]: raise ValueError(f"expected address {address} but got {data[2]}")