Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
[0.0.4] - 2026-05-02
Changed
- Renamed
SynapseClienttoGatewayClient. The class addresses one EQ gateway over REST; the new name matches the addressing model (the gateway is the unit you connect to). (A futureDatalakeClientwill be added as a sibling for cross-site queries against the server-side aggregated datalake.) - Updated docstrings and brand text throughout (
equser.api,equser.api.streaming,equser.snapshot,equser.notebooks, README, CHANGELOG note for v0.0.1) to use “EQ gateway” for the hardware and reference EQ Coherence™ where the gateway-internal software is meant.
Deprecated
SynapseClientis now a deprecated module-level alias forGatewayClient. Importing it (fromequser.apiorequser.api.client) still resolves toGatewayClientso existing user code keeps working, but emits aDeprecationWarningso users see the migration signal. The alias and its__getattr__hooks will be removed in a future release; migrate tofrom equser.api import GatewayClient.
Fixed
connect_cpow_streamnow strips the 11-byte cycle header before Arrow IPC parse (commite3879fe). Resolves a parse error on real CPOW WebSocket streams that include the cycle header prefix.
[0.0.3] - 2026-04-23
Added
RELEASE.mddocumenting the PyPI release procedure.
Fixed
load_cpow_scaled()now reads scaling metadata (iscale,vscale,schema_version,topology,neutral_connected,start_time) from the Arrow schema. Production CPOW files carry these on the schema only; the previous implementation read the Parquet footer key-value map and silently returnediscale=1.0on those files.scripts/bump-version.pyandscripts/release.shnow look forequser/_version.pyin the correct location; previously both scripts referenced a non-existent repo-root path.
0.0.2 - 2026-04-11
Changed
load_cpow_scaled()now reads v3 schema metadata and returns additional keys:schema_version,topology, andneutral_connected.- CPOW channel arrays are now explicitly promoted to float64 before applying the scale factor, preserving the full 24-bit ADC dynamic range for v3 int32 files.
Added
CYCLE_START_CHANNELSconstant listing the optional v3 phase cycle-boundary columns (cycle_start_a,cycle_start_b,cycle_start_c).load_cpow_scaled()returnscycle_start_a,cycle_start_b, andcycle_start_cas numpy int64 arrays when those columns are present in the file. Values are nanoseconds since epoch; zero means no boundary at that sample.
0.0.1 - 2026-02-06
Initial public release. User toolkit for EQ Wave power quality data.
Modules
- equser.data - Load CPOW and PMon Parquet files with automatic scaling, timestamp parsing
- equser.analysis - Waveform analysis: zero-crossing detection, AC cycle extraction
- equser.api - REST and WebSocket clients for EQ gateways (requires
[analysis]; class was originally namedSynapseClient, renamed toGatewayClientin Unreleased;SynapseClientpreserved as a deprecated backward-compat alias) - equser.plotting - Static matplotlib plots for PMon and CPOW data (requires
[analysis]) - equser.pmon - Live sensor acquisition and Avro-to-Parquet conversion (requires
[daq]) - equser.core - YAML configuration loading, XDG-compliant path resolution
- equser.utils - Logging with optional color, DateTime with floor-division
- equser.notebooks - Bundled reference notebooks with list/copy API
- equser.widgets - Interactive file selector for JupyterLab (requires
[jupyter]) - equser.snapshot - Waveform capture via gateway WebSocket
Dependency Tiers
- Base: numpy, pyarrow, pyyaml, argcomplete, colorlog (data loading, analysis, CLI)
- [daq]: avro, fastavro (live sensor acquisition)
- [analysis]: matplotlib, requests, websocket-client (plotting + API)
- [jupyter]:
[analysis]+ jupyterlab, duckdb, ipywidgets, ipykernel, nbconvert - [full]: all of the above
CLI
equser pmon acquire- Start power monitoring from EQ Wave sensorequser pmon convert- Convert Avro files to Parquetequser plot- Plot PMon or CPOW data filesequser notebooks list- List bundled reference notebooksequser notebooks copy- Copy reference notebooks to a directoryequser snapshot- Capture live waveform data to a Parquet file