# Changelog

## [Unreleased]

## [0.6.0] - 2026-02-23

### Added

- Add `py.typed` marker to declare sgn-ts as a typed library
- Add masked array methods to `TSFrame`
- Add offset validation checks
- Expose extra internal source pads in composed transforms

### Changed

- Overhaul documentation: restructure into User Guide, Developer Guide,
  Background, and Reference sections following Divio guidelines; add dedicated
  offset background page; split built-in elements reference into Sources,
  Transforms, and Sinks; add testable code snippets throughout
- Standardize on seconds for time quantities, expose `_ns` properties for
  nanosecond equivalents
- Standardize `start`/`end` parameters for `TSSource` and `TSResourceSource`
- Change `TSResourceSource` base class from `ParallelizeSourceElement` to
  `ParallelizeBase`
- Have `TSResourceSource` derive from `TSSource`
- Simplify `TSCompose` to wrap `Compose` while keeping the public API
- Add TS-enabled support to `TSFrameCollectSink`
- Bump minimum sgn version to 0.6

### Fixed

- Fix `EventBuffer` gap detection check
- Fix `make_ts_element` hanging by defining `pull()`/`internal()` methods
- Fix typing issues: add `type: ignore` in array checks, use re-exports in
  `array_ops` module, explicitly declare `NumpyArray` as type alias

## [0.5.0] - 2026-01-20

### Added

- Add `TSCompose` wrappers (`TSComposedSourceElement`,
  `TSComposedTransformElement`, `TSComposedSinkElement`)
- Add `TSFrameCollectSink` for collecting input streams into frames
- Add `TSAppSink` for user-defined buffer callbacks
- Add `TSPlotSink` and plotting utilities (`plot_buffer()`, `plot_frame()`)
- Add `TSIterSource` for iterating through pre-built frames
- Add `TSCollectFrame` context manager for atomic buffer appends
- Add `BitVector` transform for bit-level operations
- Add `NaryTransform` for N-ary reduction operations
- Add `TSFrame.tarr` and `TSFrame.samples` properties
- Add static pad configuration for elements
- Add opt-in `process()` API for simplified element implementation

### Changed

- Redesign `EventFrame` and `TSFrame` to share a `TimeSpanFrame` parent class
- Replace `SeriesBuffer.replace()` with `copy()`
- Switch `AdapterConfig` from `disable` to `enable`/`is_enabled` flag

### Fixed

- Fix gap handling in `AdaptiveCorrelate`
- Fix offset shift when `skip_gaps` or `align_buffers` is set

## [0.4.0] - 2025-11-07

### Added

- Add `SegmentSource` for time-segment-based data production
- Add `ANDTransform` for logical AND across inputs
- Add `align_to` option in `AdapterConfig` for offset boundary alignment
- Add `make_ts_element()` factory function for wrapping SGN elements
- Add element entry point registration
- Add `Average` element (mean/median)

### Changed

- Update `TSResourceSource` to use `ParallelizeSourceElement`
- Bump minimum sgn version to 0.4

### Fixed

- Fix `Correlate` latency handling
- Fix offset-to-sample rounding during alignment
- Fix pad name in `Align`
- Propagate worker exceptions in `TSResourceSource`

## [0.3.0] - 2025-05-11

### Added

- Add `DataSpec` for time-series validation
- Add per-pad signal parameters for `FakeSeriesSource`
- Add `EventBuffer` default start/end times

## [0.2.0] - 2025-04-17

### Added

- `SeriesBuffer`, `TSFrame`, `EventBuffer`, `EventFrame` data types
- `Offset` system for precise time bookkeeping
- `Time` constants for nanosecond-based conversions
- `TSSlice` and `TSSlices` for time interval operations
- `Audioadapter` and `AdapterConfig` for streaming buffer management
- `ArrayBackend` abstraction with `NumpyBackend` and `TorchBackend`
- `FakeSeriesSource` with white noise, sine, impulse, and constant signals
- `TSResourceSource` for data-driven sources
- `Amplify`, `Adder`, `Align`, `Correlate`, `AdaptiveCorrelate`, `Converter`,
  `Gate`, `Matmul`, `Resampler`, `SumIndex`, `Threshold` transforms
- `DumpSeriesSink`, `NullSeriesSink` sinks
- `TimeSeriesMixin` for cross-channel frame alignment

[unreleased]: https://git.ligo.org/greg/sgn-ts/-/compare/v0.6.0...main
[0.6.0]: https://git.ligo.org/greg/sgn-ts/-/tags/v0.6.0
[0.5.0]: https://git.ligo.org/greg/sgn-ts/-/tags/v0.5.0
[0.4.0]: https://git.ligo.org/greg/sgn-ts/-/tags/v0.4.0
[0.3.0]: https://git.ligo.org/greg/sgn-ts/-/tags/v0.3.0
[0.2.0]: https://git.ligo.org/greg/sgn-ts/-/tags/v0.2.0
