Releases: ShawnStrasser/atspm
v2.0.0
Version 2.0.0 (December 9, 2025)
Breaking Changes / Features:
- Timeline now outputs
EventClass/EventValue(bucketedTimeStampremoved) and retainsIsValid; usemaxtime=Trueto include MAXTIME-only events (Splits and Alarm event 175). - The
IsValidcolumn is true when the data appears complete, but if there are missing events then it is False. - Removed
splits_onlyin favor of themaxtimeflag for timeline. - Added
ped_delayaggregation that averages pedestrian delay from timeline usingEndTimebuckets at the configuredbin_size. - Documented the timeline dimension table in this README (previously available via
SignalDataProcessor.timeline_description).
v1.9.4
Better housekeeping to keep memory low, added an optional context manager support.
Full Changelog: v1.9.3...v1.9.4
v1.9.3
Added unit test for detector health, bug fix with table name, and updated dependencies.
v1.9.2
Bug fix to work with new traffic-anomaly API.
v1.9.1
Version 1.9.1 (March 4, 2025)
Bug Fixes / Improvements:
Filling in missing time periods for detectors with zero actuations didn't work for incremental processing, this has been fixed by tracking a list of known detectors between each run, similar to the unmatched event tracking. So how it works is you provide a dataframe or file path of known detectors, it will filter out detectors last seen more than n days ago, and then will fill in missing time periods with zeros for the remaining detectors.
known_detectors_df='path/to/known_detectors.csv'
# or supply Pandas DataFrame directly
from src.atspm import SignalDataProcessor, sample_data
# Set up all parameters
params = {
# Global Settings
'raw_data': sample_data.data,
'bin_size': 15,
# Performance Measures
'aggregations': [
{'name': 'actuations', 'params': {
'fill_in_missing': True,
'known_detectors_df_or_path': known_detectors_df,
'known_detectors_max_days_old': 2
}}
]
}After you run the processor, here's how to query the known detectors table:
processor = SignalDataProcessor(**params)
processor.load()
processor.aggregate()
# get all table names from the database
known_detectors_df = processor.conn.query("SELECT * FROM known_detectors;").df()Here's what the known detectors table could look like:
| DeviceId | Detector | LastSeen |
|---|---|---|
| 1 | 1 | 2025-03-04 00:00:00 |
| 1 | 2 | 2025-03-04 00:00:00 |
| 2 | 1 | 2025-03-04 00:00:00 |
v1.9.0
Version 1.9.0 (February 19, 2025)
New Features:
Added option to fill in missing time periods for detector actuations with zeros. This makes it clearer when there are no actuations for a detector vs no data due to comm loss. Having zero-value actuation time periods also allows detector health to consider them when identifying anomalies.
New timeline events:
- Pedestrian Delay (from button bush to walk)
- Overlap Events
- Detector faults including stuck off and other
- Phase Hold
- Phase Omit
- Ped Omit
- Stop Time
Also updated tests to include these new features. This is a lot of new events to process, so be sure to test thoroughly before deploying to production.
v1.8.4
Version 1.8.4 (September 12, 2024)
Bug Fixes / Improvements:
Fixed a timestamp conversion issue when reading unmatched events from a csv file. Updated the unit tests to catch this issue in the future.
v1.8.3
Version 1.8.3 (September 5, 2024)
Bug Fixes / Improvements:
- Fixed estimated volumes for full_ped. Previously, it was converting 15-minute ped data to hourly by applying a rolling sum, then applying the quadratic transform to get volumes, and then converted back to 15-minute by undoing the rolling sum. The bug had to do with the data not always being ordered correctly before undoing the rolling sum. However, this update removes the undo rolling sum altogether and replaces it with multiplying hourly volumes by the ratio of 15-minute data to hourly dat (more detail coming in the docs eventually). It seems to work much better now.
v1.8.2
Version 1.8.2 (August 28, 2024)
Bug Fixes / Improvements:
- Fixed issue when passing unmatched events as a dataframe instead of a file path.
- Added more tests for incremental runs when using dataframes. This is to mimic the ODOT production environment.
v1.8.0
Version 1.8.0 (August 28, 2024)
Bug Fixes / Improvements:
- Removed unused code from yellow_red for efficiency, but it's still not passing tests for incremental processing.
New Features:
- Added special functions and advance warning to timeline events.