cicwave 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
cicwave-0.5.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020-2026 Carsten Wulff Software, Norway
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
cicwave-0.5.0/PKG-INFO ADDED
@@ -0,0 +1,242 @@
1
+ Metadata-Version: 2.4
2
+ Name: cicwave
3
+ Version: 0.5.0
4
+ Summary: Advanced waveform viewer with PyQtGraph backend
5
+ Author-email: Carsten Wulff <carsten@wulff.no>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/wulffern/cicwave
8
+ Project-URL: Bug Tracker, https://github.com/wulffern/cicwave/issues
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Intended Audience :: Science/Research
12
+ Classifier: Natural Language :: English
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.8
16
+ Classifier: Programming Language :: Python :: 3.9
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Topic :: Utilities
20
+ Classifier: Topic :: Scientific/Engineering
21
+ Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
22
+ Classifier: Topic :: Scientific/Engineering :: Visualization
23
+ Requires-Python: >=3.8
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: numpy
27
+ Requires-Dist: pandas
28
+ Requires-Dist: matplotlib
29
+ Requires-Dist: click
30
+ Requires-Dist: pyyaml
31
+ Requires-Dist: PySide6
32
+ Requires-Dist: pyqtgraph
33
+ Requires-Dist: PyOpenGL
34
+ Provides-Extra: parquet
35
+ Requires-Dist: pyarrow; extra == "parquet"
36
+ Provides-Extra: hdf5
37
+ Requires-Dist: tables; extra == "hdf5"
38
+ Dynamic: license-file
39
+
40
+ # cicwave
41
+
42
+ Waveform viewer with PyQtGraph backend for high-performance visualization of simulation data.
43
+
44
+ cicwave is a standalone package extracted from
45
+ [cicsim](https://github.com/wulffern/cicsim), focused on providing the
46
+ best possible waveform viewing experience with PyQtGraph and Qt6.
47
+
48
+ ## Background
49
+
50
+ I made my first waveform viewer (<https://github.com/wulffern/NextGenLab.Chart>)
51
+ back in 2001 during a summer internship. NextGenLab.Chart evolved into
52
+ <https://github.com/wulffern/SystemDotNet.Report> during my Ph.D. In I always
53
+ had in my plan to port SdnReport to Mac and Linux, but I never really did (no
54
+ coding time).
55
+
56
+ In December 2023 I needed a waveform viewer for cicsim (read ngspice raw files),
57
+ so I wrote one by hand. It was pretty basic.
58
+
59
+ Enter March 2026, and the advent of agentic coding. It was finally possible to
60
+ revive SdnReport in the form of a Qt port to cicwave. Initially it lived inside
61
+ cicsim, however, in May 2026 it became clear that cicwave deserved it's own
62
+ repo. As such, you're here.
63
+
64
+ ## Features
65
+
66
+ - **High-performance rendering** with PyQtGraph and GPU acceleration
67
+ - **Multiple file format support**:
68
+ - ngspice `.raw` files
69
+ - CSV, TSV, Excel spreadsheets
70
+ - Parquet, HDF5, Feather for big data
71
+ - VCD digital waveforms
72
+ - LitePoint `.iqvsa` IQ capture files
73
+ - **Multi-dimensional data pivoting** with YAML specifications
74
+ - **Digital waveform support** with separate analog/digital panes
75
+ - **Session save/restore** with `.cicwave.yaml` files
76
+ - **Export capabilities** to PDF, PNG, SVG formats
77
+ - **Engineering unit formatting** and auto-detection
78
+ - **GPU-accelerated plotting** for smooth interaction with large datasets
79
+
80
+ ## Installation
81
+
82
+ ```bash
83
+ pip install cicwave
84
+ ```
85
+
86
+ For development installation:
87
+
88
+ ```bash
89
+ git clone https://github.com/wulffern/cicwave.git
90
+ cd cicwave
91
+ pip install -e .
92
+ ```
93
+
94
+ ## Usage
95
+
96
+ ### Basic Usage
97
+
98
+ Open waveform files directly:
99
+
100
+ ```bash
101
+ # Single file
102
+ cicwave data.raw
103
+
104
+ # Multiple files
105
+ cicwave sim1.csv sim2.csv results.xlsx
106
+
107
+ # Glob patterns (useful on PowerShell)
108
+ cicwave --glob "results/*.csv" --glob "**/*.raw"
109
+ ```
110
+
111
+ ### Advanced Features
112
+
113
+ **Multi-dimensional data reshaping:**
114
+ ```bash
115
+ cicwave --pivot analysis.yaml dataset.csv
116
+ ```
117
+
118
+ **Session management:**
119
+ ```bash
120
+ # Save your current plot configuration in the GUI (File → Save Session)
121
+ cicwave --session my_analysis.cicwave.yaml
122
+
123
+ # Export plots without opening GUI
124
+ cicwave --session config.yaml --export results.pdf
125
+ ```
126
+
127
+ **Data exploration:**
128
+ ```bash
129
+ # Preview pivot dimensions before plotting
130
+ cicwave --pivot spec.yaml --pivot-info data.csv
131
+ ```
132
+
133
+ ## File Format Support
134
+
135
+ | Format | Extension | Description |
136
+ |--------|-----------|-------------|
137
+ | ngspice | `.raw` | Binary simulation results |
138
+ | CSV/TSV | `.csv`, `.tsv` | Comma/tab separated values |
139
+ | Excel | `.xlsx` | Spreadsheet format |
140
+ | Parquet | `.parquet` | Columnar storage (requires `pip install pyarrow`) |
141
+ | HDF5 | `.h5` | Hierarchical data (requires `pip install tables`) |
142
+ | VCD | `.vcd` | Digital simulation waveforms |
143
+ | LitePoint | `.iqvsa` | IQ capture data |
144
+
145
+ ## Environment Variables
146
+
147
+ - `CICWAVE_X` - Default X-axis column name
148
+
149
+ ## GUI Features
150
+
151
+ ### Waveform Interaction
152
+ - **Mouse wheel**: Zoom in/out
153
+ - **Middle click + drag**: Pan
154
+ - **Right click**: Context menu with analysis tools
155
+ - **Ctrl+A**: Auto-fit all waveforms
156
+ - **Ctrl+Mouse wheel**: Zoom X-axis only
157
+
158
+ ### Analysis Tools
159
+ - **Cursors**: Measure time/voltage differences
160
+ - **Math expressions**: Create derived signals
161
+ - **Digital analysis**: View bus values and timing
162
+ - **Export data**: Save currently visible waveforms
163
+
164
+ ### Session Management
165
+ - **File → Save Session**: Save current plot configuration
166
+ - **File → Load Session**: Restore previous analysis
167
+ - Sessions store: visible signals, zoom levels, cursor positions, analysis setup
168
+
169
+ ## Pivot Specifications
170
+
171
+ For multi-dimensional datasets, use YAML pivot specs to reshape data before visualization:
172
+
173
+ ```yaml
174
+ # analysis.yaml
175
+ index: time # X-axis (rows)
176
+ columns: [corner, temperature] # Create separate traces for each combination
177
+ values: ["v(out)", "v(in)"] # Y-axis signals to plot
178
+ conditions: # Filter data
179
+ frequency: 1e9
180
+ process: tt
181
+ ```
182
+
183
+ ```bash
184
+ cicwave --pivot analysis.yaml monte_carlo_results.csv
185
+ ```
186
+
187
+ ## Migrating from cicsim
188
+
189
+ If you previously used `cicsim wave` or the standalone `cicwave` from cicsim:
190
+
191
+ 1. **Install standalone cicwave**: `pip install cicwave`
192
+ 2. **Update workflows**: Replace `cicsim wave --backend pg` with just `cicwave`
193
+ 3. **Session files**: Existing `.cicwave.yaml` files are fully compatible
194
+ 4. **Tkinter users**: `cicsim wave --backend tk` still works in cicsim for lightweight usage
195
+
196
+ ## Development
197
+
198
+ ### Running Tests
199
+
200
+ ```bash
201
+ # Run all unit tests
202
+ python -m unittest discover -s tests/unittests/ -p 'test_*.py' -v
203
+
204
+ # Test specific functionality
205
+ python -m unittest tests.unittests.test_wavefiles_lazy -v
206
+ ```
207
+
208
+ ### Project Structure
209
+
210
+ ```
211
+ cicwave/
212
+ ├── src/cicwave/
213
+ │ ├── cli.py # Command-line interface
214
+ │ ├── wave_pg.py # Main PyQtGraph viewer
215
+ │ ├── wavefiles.py # File I/O and data loading
216
+ │ ├── ngraw.py # ngspice binary parser
217
+ │ ├── pivot.py # Data reshaping
218
+ │ ├── theme.py # Color themes
219
+ │ └── command.py # Logging utilities
220
+ ├── tests/unittests/ # Unit test suite
221
+ └── scripts/ # Windows shortcut generator
222
+ ```
223
+
224
+ ## License
225
+
226
+ MIT License - see LICENSE file for details.
227
+
228
+ ## Contributing
229
+
230
+ Contributions welcome! Please:
231
+
232
+ 1. Fork the repository
233
+ 2. Create a feature branch
234
+ 3. Add tests for new functionality
235
+ 4. Ensure all tests pass
236
+ 5. Submit a pull request
237
+
238
+ ## Related Projects
239
+
240
+ - **[cicsim](https://github.com/wulffern/cicsim)** - Simulation orchestration and lightweight tkinter viewer
241
+ - **[cicpy](https://github.com/wulffern/cicpy)** - Analog IC design transpiler
242
+ - **[PyQtGraph](https://pyqtgraph.readthedocs.io/)** - High-performance plotting library
@@ -0,0 +1,203 @@
1
+ # cicwave
2
+
3
+ Waveform viewer with PyQtGraph backend for high-performance visualization of simulation data.
4
+
5
+ cicwave is a standalone package extracted from
6
+ [cicsim](https://github.com/wulffern/cicsim), focused on providing the
7
+ best possible waveform viewing experience with PyQtGraph and Qt6.
8
+
9
+ ## Background
10
+
11
+ I made my first waveform viewer (<https://github.com/wulffern/NextGenLab.Chart>)
12
+ back in 2001 during a summer internship. NextGenLab.Chart evolved into
13
+ <https://github.com/wulffern/SystemDotNet.Report> during my Ph.D. In I always
14
+ had in my plan to port SdnReport to Mac and Linux, but I never really did (no
15
+ coding time).
16
+
17
+ In December 2023 I needed a waveform viewer for cicsim (read ngspice raw files),
18
+ so I wrote one by hand. It was pretty basic.
19
+
20
+ Enter March 2026, and the advent of agentic coding. It was finally possible to
21
+ revive SdnReport in the form of a Qt port to cicwave. Initially it lived inside
22
+ cicsim, however, in May 2026 it became clear that cicwave deserved it's own
23
+ repo. As such, you're here.
24
+
25
+ ## Features
26
+
27
+ - **High-performance rendering** with PyQtGraph and GPU acceleration
28
+ - **Multiple file format support**:
29
+ - ngspice `.raw` files
30
+ - CSV, TSV, Excel spreadsheets
31
+ - Parquet, HDF5, Feather for big data
32
+ - VCD digital waveforms
33
+ - LitePoint `.iqvsa` IQ capture files
34
+ - **Multi-dimensional data pivoting** with YAML specifications
35
+ - **Digital waveform support** with separate analog/digital panes
36
+ - **Session save/restore** with `.cicwave.yaml` files
37
+ - **Export capabilities** to PDF, PNG, SVG formats
38
+ - **Engineering unit formatting** and auto-detection
39
+ - **GPU-accelerated plotting** for smooth interaction with large datasets
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ pip install cicwave
45
+ ```
46
+
47
+ For development installation:
48
+
49
+ ```bash
50
+ git clone https://github.com/wulffern/cicwave.git
51
+ cd cicwave
52
+ pip install -e .
53
+ ```
54
+
55
+ ## Usage
56
+
57
+ ### Basic Usage
58
+
59
+ Open waveform files directly:
60
+
61
+ ```bash
62
+ # Single file
63
+ cicwave data.raw
64
+
65
+ # Multiple files
66
+ cicwave sim1.csv sim2.csv results.xlsx
67
+
68
+ # Glob patterns (useful on PowerShell)
69
+ cicwave --glob "results/*.csv" --glob "**/*.raw"
70
+ ```
71
+
72
+ ### Advanced Features
73
+
74
+ **Multi-dimensional data reshaping:**
75
+ ```bash
76
+ cicwave --pivot analysis.yaml dataset.csv
77
+ ```
78
+
79
+ **Session management:**
80
+ ```bash
81
+ # Save your current plot configuration in the GUI (File → Save Session)
82
+ cicwave --session my_analysis.cicwave.yaml
83
+
84
+ # Export plots without opening GUI
85
+ cicwave --session config.yaml --export results.pdf
86
+ ```
87
+
88
+ **Data exploration:**
89
+ ```bash
90
+ # Preview pivot dimensions before plotting
91
+ cicwave --pivot spec.yaml --pivot-info data.csv
92
+ ```
93
+
94
+ ## File Format Support
95
+
96
+ | Format | Extension | Description |
97
+ |--------|-----------|-------------|
98
+ | ngspice | `.raw` | Binary simulation results |
99
+ | CSV/TSV | `.csv`, `.tsv` | Comma/tab separated values |
100
+ | Excel | `.xlsx` | Spreadsheet format |
101
+ | Parquet | `.parquet` | Columnar storage (requires `pip install pyarrow`) |
102
+ | HDF5 | `.h5` | Hierarchical data (requires `pip install tables`) |
103
+ | VCD | `.vcd` | Digital simulation waveforms |
104
+ | LitePoint | `.iqvsa` | IQ capture data |
105
+
106
+ ## Environment Variables
107
+
108
+ - `CICWAVE_X` - Default X-axis column name
109
+
110
+ ## GUI Features
111
+
112
+ ### Waveform Interaction
113
+ - **Mouse wheel**: Zoom in/out
114
+ - **Middle click + drag**: Pan
115
+ - **Right click**: Context menu with analysis tools
116
+ - **Ctrl+A**: Auto-fit all waveforms
117
+ - **Ctrl+Mouse wheel**: Zoom X-axis only
118
+
119
+ ### Analysis Tools
120
+ - **Cursors**: Measure time/voltage differences
121
+ - **Math expressions**: Create derived signals
122
+ - **Digital analysis**: View bus values and timing
123
+ - **Export data**: Save currently visible waveforms
124
+
125
+ ### Session Management
126
+ - **File → Save Session**: Save current plot configuration
127
+ - **File → Load Session**: Restore previous analysis
128
+ - Sessions store: visible signals, zoom levels, cursor positions, analysis setup
129
+
130
+ ## Pivot Specifications
131
+
132
+ For multi-dimensional datasets, use YAML pivot specs to reshape data before visualization:
133
+
134
+ ```yaml
135
+ # analysis.yaml
136
+ index: time # X-axis (rows)
137
+ columns: [corner, temperature] # Create separate traces for each combination
138
+ values: ["v(out)", "v(in)"] # Y-axis signals to plot
139
+ conditions: # Filter data
140
+ frequency: 1e9
141
+ process: tt
142
+ ```
143
+
144
+ ```bash
145
+ cicwave --pivot analysis.yaml monte_carlo_results.csv
146
+ ```
147
+
148
+ ## Migrating from cicsim
149
+
150
+ If you previously used `cicsim wave` or the standalone `cicwave` from cicsim:
151
+
152
+ 1. **Install standalone cicwave**: `pip install cicwave`
153
+ 2. **Update workflows**: Replace `cicsim wave --backend pg` with just `cicwave`
154
+ 3. **Session files**: Existing `.cicwave.yaml` files are fully compatible
155
+ 4. **Tkinter users**: `cicsim wave --backend tk` still works in cicsim for lightweight usage
156
+
157
+ ## Development
158
+
159
+ ### Running Tests
160
+
161
+ ```bash
162
+ # Run all unit tests
163
+ python -m unittest discover -s tests/unittests/ -p 'test_*.py' -v
164
+
165
+ # Test specific functionality
166
+ python -m unittest tests.unittests.test_wavefiles_lazy -v
167
+ ```
168
+
169
+ ### Project Structure
170
+
171
+ ```
172
+ cicwave/
173
+ ├── src/cicwave/
174
+ │ ├── cli.py # Command-line interface
175
+ │ ├── wave_pg.py # Main PyQtGraph viewer
176
+ │ ├── wavefiles.py # File I/O and data loading
177
+ │ ├── ngraw.py # ngspice binary parser
178
+ │ ├── pivot.py # Data reshaping
179
+ │ ├── theme.py # Color themes
180
+ │ └── command.py # Logging utilities
181
+ ├── tests/unittests/ # Unit test suite
182
+ └── scripts/ # Windows shortcut generator
183
+ ```
184
+
185
+ ## License
186
+
187
+ MIT License - see LICENSE file for details.
188
+
189
+ ## Contributing
190
+
191
+ Contributions welcome! Please:
192
+
193
+ 1. Fork the repository
194
+ 2. Create a feature branch
195
+ 3. Add tests for new functionality
196
+ 4. Ensure all tests pass
197
+ 5. Submit a pull request
198
+
199
+ ## Related Projects
200
+
201
+ - **[cicsim](https://github.com/wulffern/cicsim)** - Simulation orchestration and lightweight tkinter viewer
202
+ - **[cicpy](https://github.com/wulffern/cicpy)** - Analog IC design transpiler
203
+ - **[PyQtGraph](https://pyqtgraph.readthedocs.io/)** - High-performance plotting library
@@ -0,0 +1,60 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "cicwave"
7
+ version = "0.5.0"
8
+ authors = [
9
+ { name="Carsten Wulff", email="carsten@wulff.no" },
10
+ ]
11
+ dependencies = [
12
+ "numpy", # Core data arrays
13
+ "pandas", # DataFrames
14
+ "matplotlib", # Engineering formatters (minimal dependency)
15
+ "click", # CLI parsing
16
+ "pyyaml", # Session files, pivot specs
17
+ "PySide6", # Qt6 GUI framework
18
+ "pyqtgraph", # High-performance plotting
19
+ "PyOpenGL", # GPU acceleration
20
+ ]
21
+ description = "Advanced waveform viewer with PyQtGraph backend"
22
+ readme = "README.md"
23
+ license = {text = "MIT"}
24
+ requires-python = ">=3.8"
25
+ classifiers = [
26
+ "Development Status :: 4 - Beta",
27
+ "Intended Audience :: Developers",
28
+ "Intended Audience :: Science/Research",
29
+ "Natural Language :: English",
30
+ "Operating System :: OS Independent",
31
+ "Programming Language :: Python :: 3",
32
+ "Programming Language :: Python :: 3.8",
33
+ "Programming Language :: Python :: 3.9",
34
+ "Programming Language :: Python :: 3.10",
35
+ "Programming Language :: Python :: 3.11",
36
+ "Topic :: Utilities",
37
+ "Topic :: Scientific/Engineering",
38
+ "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)",
39
+ "Topic :: Scientific/Engineering :: Visualization",
40
+ ]
41
+
42
+ [project.optional-dependencies]
43
+ parquet = ["pyarrow"] # Parquet file support
44
+ hdf5 = ["tables"] # HDF5 file support
45
+
46
+ [project.scripts]
47
+ cicwave = "cicwave.cli:main"
48
+
49
+ [project.gui-scripts]
50
+ cicwavew = "cicwave.cli:main" # Windows no-console wrapper
51
+
52
+ [project.urls]
53
+ "Homepage" = "https://github.com/wulffern/cicwave"
54
+ "Bug Tracker" = "https://github.com/wulffern/cicwave/issues"
55
+
56
+ [tool.setuptools]
57
+ package-dir = {"" = "src"}
58
+
59
+ [tool.setuptools.packages.find]
60
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,25 @@
1
+ """
2
+ cicwave - Advanced waveform viewer with PyQtGraph backend
3
+
4
+ A standalone waveform viewer extracted from cicsim, focused on providing
5
+ high-performance visualization of simulation data with PyQtGraph and Qt6.
6
+
7
+ Supports multiple file formats:
8
+ - ngspice .raw files
9
+ - CSV, TSV, Excel
10
+ - Parquet, HDF5, Feather
11
+ - VCD digital waveforms
12
+ - LitePoint .iqvsa IQ capture files
13
+
14
+ Features:
15
+ - GPU-accelerated rendering with PyQtGraph
16
+ - Multi-dimensional data pivoting
17
+ - Session save/restore
18
+ - Export to PDF/PNG/SVG
19
+ - Digital waveform support
20
+ - Engineering unit formatting
21
+ """
22
+
23
+ __version__ = "1.0.0"
24
+ __author__ = "Carsten Wulff"
25
+ __email__ = "carsten@wulff.no"