Summary
When calling endaq.ide.get_doc() with timezone-aware datetime.datetime values for start and end that do not overlap the recording interval of the IDE file, the function still returns a document with non-empty channels and data outside the requested window.
Expected behavior is an object where each channel contains 0 samples (i.e., the request yields empty data when the requested window is outside the recording interval).
Steps to Reproduce
Parse a filename to obtain timezone-aware start/end datetimes (AWST, UTC+08):
from datetime import datetime
from zoneinfo import ZoneInfo
import endaq
filename = "20251018_RC63_LH_SAM4_BATCH_1_202510180930_202510181830"
tz = ZoneInfo("Australia/Perth")
start_time = datetime.strptime(filename.split("_")[-2], "%Y%m%d%H%M").replace(tzinfo=tz)
end_time = datetime.strptime(filename.split("_")[-1], "%Y%m%d%H%M").replace(tzinfo=tz)
print(start_time) # 2025-10-18 09:30:00+08:00
print(end_time) # 2025-10-18 18:30:00+08:00
Request a trimmed document using start/end that do not overlap the IDE’s actual data (the file below appears to contain data on Oct 19 UTC, not Oct 18 AWST):
doc = endaq.ide.get_doc(
r"C:\...\20251018_RC63_LH_SAM4_BATCH_2_202510180930_202510181830.IDE",
start=start_time,
end=end_time,
)
Inspect the channel table:
endaq.ide.get_channel_table(doc)
Output includes non-empty channels and a warning:
...\endaq\ide\info.py:201: RuntimeWarning: divide by zero encountered in scalar divide
rate = samples / (duration / 10 ** 6)
Example (excerpt):
| channel |
name |
type |
units |
start |
end |
duration |
samples |
rate |
| 8.0 |
X (2000g) |
Acceleration |
g |
00:00.0008 |
00:00.0552 |
00:00.0543 |
2720 |
5000.78 Hz |
| 8.1 |
Y (2000g) |
Acceleration |
g |
00:00.0008 |
00:00.0552 |
00:00.0543 |
2720 |
5000.78 Hz |
| 8.2 |
Z (2000g) |
Acceleration |
g |
00:00.0008 |
00:00.0552 |
00:00.0543 |
2720 |
5000.78 Hz |
| 80.0 |
X (40g) |
Acceleration |
g |
00:00.0015 |
00:00.0506 |
00:00.0491 |
248 |
504.87 Hz |
| 80.1 |
Y (40g) |
Acceleration |
g |
00:00.0015 |
00:00.0506 |
00:00.0491 |
248 |
504.87 Hz |
| 80.2 |
Z (40g) |
Acceleration |
g |
00:00.0015 |
00:00.0506 |
00:00.0491 |
248 |
504.87 Hz |
| 20.0 |
Internal Pressure |
Pressure |
Pa |
00:00.0039 |
00:06.0112 |
00:06.0073 |
62 |
10.21 Hz |
| 20.1 |
Internal Temperature |
Temperature |
°C |
00:00.0039 |
00:06.0112 |
00:06.0073 |
62 |
10.21 Hz |
| 65.0 |
X |
Quaternion |
q |
00:00.0111 |
00:01.0122 |
00:01.0010 |
102 |
100.94 Hz |
| 65.1 |
Y |
Quaternion |
q |
00:00.0111 |
00:01.0122 |
00:01.0010 |
102 |
100.94 Hz |
| 65.2 |
Z |
Quaternion |
q |
00:00.0111 |
00:01.0122 |
00:01.0010 |
102 |
100.94 Hz |
| 65.3 |
W |
Quaternion |
q |
00:00.0111 |
00:01.0122 |
00:01.0010 |
102 |
100.94 Hz |
| 65.4 |
Acc |
Quaternion |
q |
00:00.0111 |
00:01.0122 |
00:01.0010 |
102 |
100.94 Hz |
| 88.0 |
Latitude |
Location |
Degrees |
01:33:55.0979 |
01:34:27.0322 |
00:31.0342 |
32 |
1.02 Hz |
| 88.1 |
Longitude |
Location |
Degrees |
01:33:55.0979 |
01:34:27.0322 |
00:31.0342 |
32 |
1.02 Hz |
| 88.2 |
Time |
Unix Epoch |
s |
01:33:55.0979 |
01:34:27.0322 |
00:31.0342 |
32 |
1.02 Hz |
| 88.3 |
Ground Speed |
GNSS Speed |
m/s |
01:33:55.0979 |
01:34:27.0322 |
00:31.0342 |
32 |
1.02 Hz |
| 102.0 |
GNSS Time:00 |
Unix Epoch Reference |
s |
01:33:59.0322 |
01:33:59.0322 |
00:00.0000 |
1 |
inf Hz |
Retrieve primary sensor data and check timestamps:
df = endaq.ide.get_primary_sensor_data(doc=doc)
print(df.head())
print(len(df))
Example timestamps are UTC on Oct 19, not within the requested Oct 18 AWST window:
X (2000g) Y (2000g) Z (2000g)
timestamp
2025-10-19 09:57:15.008941+00:00 3.853685 -1.895579 -1.323955
2025-10-19 09:57:15.009141042+00:00 3.853685 -1.998095 -0.949977
...
2720
Manually filter with the same start_time/end_time:
df_trimmed = df.loc[(df.index > start_time) & (df.index < end_time)]
print(df_trimmed.head())
print(len(df_trimmed))
This yields an empty DataFrame (as expected when the window is out-of-bounds):
Empty DataFrame
Columns: [X (2000g), Y (2000g), Z (2000g)]
Index: []
0
Expected Behavior
If start/end are outside the recording interval of the IDE file, endaq.ide.get_doc() should return a document whose channels each have 0 samples and no data, reflecting the requested empty interval.
Actual Behavior
endaq.ide.get_doc() returns a document containing non-empty channels and data outside the requested start/end window when the window does not overlap the recording interval.
The resulting get_primary_sensor_data(doc) returns data with timestamps outside the requested range.
A RuntimeWarning: divide by zero encountered in scalar divide appears in endaq\ide\info.py:201 (likely due to a channel with zero duration and one sample resulting in inf Hz), which may be related to edge handling but is not the primary issue.
Summary
When calling endaq.ide.get_doc() with timezone-aware datetime.datetime values for start and end that do not overlap the recording interval of the IDE file, the function still returns a document with non-empty channels and data outside the requested window.
Expected behavior is an object where each channel contains 0 samples (i.e., the request yields empty data when the requested window is outside the recording interval).
Steps to Reproduce
Parse a filename to obtain timezone-aware start/end datetimes (AWST, UTC+08):
Request a trimmed document using start/end that do not overlap the IDE’s actual data (the file below appears to contain data on Oct 19 UTC, not Oct 18 AWST):
Inspect the channel table:
Output includes non-empty channels and a warning:
Example (excerpt):
Retrieve primary sensor data and check timestamps:
Example timestamps are UTC on Oct 19, not within the requested Oct 18 AWST window:
Manually filter with the same start_time/end_time:
This yields an empty DataFrame (as expected when the window is out-of-bounds):
Expected Behavior
If start/end are outside the recording interval of the IDE file, endaq.ide.get_doc() should return a document whose channels each have 0 samples and no data, reflecting the requested empty interval.
Actual Behavior
endaq.ide.get_doc() returns a document containing non-empty channels and data outside the requested start/end window when the window does not overlap the recording interval.
The resulting get_primary_sensor_data(doc) returns data with timestamps outside the requested range.
A RuntimeWarning: divide by zero encountered in scalar divide appears in endaq\ide\info.py:201 (likely due to a channel with zero duration and one sample resulting in inf Hz), which may be related to edge handling but is not the primary issue.