benchlab-pytools 3.0.0__py3-none-any.whl

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.
Files changed (184) hide show
  1. benchlab/__init__.py +14 -0
  2. benchlab/__main__.py +21 -0
  3. benchlab/config/README.md +325 -0
  4. benchlab/config/__init__.py +9 -0
  5. benchlab/config/config_client.py +631 -0
  6. benchlab/config/config_manager.py +495 -0
  7. benchlab/config/config_tool.py +358 -0
  8. benchlab/config/diff.py +163 -0
  9. benchlab/config/examples/complete_config.json +56 -0
  10. benchlab/config/examples/rgb_lighting.json +24 -0
  11. benchlab/config/examples/simple_fan.json +32 -0
  12. benchlab/config/schema.py +138 -0
  13. benchlab/core/README.md +154 -0
  14. benchlab/core/__init__.py +78 -0
  15. benchlab/core/config.py +145 -0
  16. benchlab/core/datasource.py +1209 -0
  17. benchlab/core/datasource_manager.py +418 -0
  18. benchlab/core/device_registry.py +206 -0
  19. benchlab/core/discovery.py +92 -0
  20. benchlab/core/infrastructure.py +309 -0
  21. benchlab/core/process_manager.py +356 -0
  22. benchlab/core/retry.py +85 -0
  23. benchlab/core/shared_serial.py +235 -0
  24. benchlab/core/statistics.py +224 -0
  25. benchlab/csv_log/README.md +206 -0
  26. benchlab/csv_log/__init__.py +5 -0
  27. benchlab/csv_log/csv_logger_enhanced.py +416 -0
  28. benchlab/csv_log/message_batcher.py +361 -0
  29. benchlab/csv_log/requirements.txt +3 -0
  30. benchlab/csv_log/smart_retry.py +466 -0
  31. benchlab/graph/README.md +117 -0
  32. benchlab/graph/__init__.py +5 -0
  33. benchlab/graph/app.py +353 -0
  34. benchlab/graph/requirements.txt +2 -0
  35. benchlab/graph/runner.py +42 -0
  36. benchlab/graph/ui.py +288 -0
  37. benchlab/hwinfo/README.md +135 -0
  38. benchlab/hwinfo/__init__.py +5 -0
  39. benchlab/hwinfo/hwinfo_export.py +386 -0
  40. benchlab/hwinfo/requirements.txt +1 -0
  41. benchlab/launcher.py +387 -0
  42. benchlab/link/.env.EXAMPLE +10 -0
  43. benchlab/link/README.md +172 -0
  44. benchlab/link/__init__.py +1 -0
  45. benchlab/link/link_main.py +479 -0
  46. benchlab/main.py +462 -0
  47. benchlab/menu.py +729 -0
  48. benchlab/menu_classic.py +410 -0
  49. benchlab/mqtt/README.md +201 -0
  50. benchlab/mqtt/__init__.py +5 -0
  51. benchlab/mqtt/mqtt.config_template +2 -0
  52. benchlab/mqtt/mqtt_publisher.py +540 -0
  53. benchlab/mqtt/requirements.txt +3 -0
  54. benchlab/prefs.py +67 -0
  55. benchlab/restapi/.env.example +17 -0
  56. benchlab/restapi/__init__.py +5 -0
  57. benchlab/restapi/favicon.ico +0 -0
  58. benchlab/restapi/readme.md +202 -0
  59. benchlab/restapi/requirements.txt +5 -0
  60. benchlab/restapi/telemetry_api.py +808 -0
  61. benchlab/sources.py +515 -0
  62. benchlab/tools.py +147 -0
  63. benchlab/tui/README.md +266 -0
  64. benchlab/tui/__init__.py +5 -0
  65. benchlab/tui/config.py +477 -0
  66. benchlab/tui/requirements.txt +2 -0
  67. benchlab/tui/tui_core.py +1298 -0
  68. benchlab/tui/tui_main.py +418 -0
  69. benchlab/vu/README.md +64 -0
  70. benchlab/vu/VU-Server/NOTICE.md +13 -0
  71. benchlab/vu/VU-Server/README.md +80 -0
  72. benchlab/vu/VU-Server/Running_from_source_on_linux.md +97 -0
  73. benchlab/vu/VU-Server/__init__.py +0 -0
  74. benchlab/vu/VU-Server/assets/vu1_hello_world.png +0 -0
  75. benchlab/vu/VU-Server/community_applications.md +13 -0
  76. benchlab/vu/VU-Server/config.yaml +9 -0
  77. benchlab/vu/VU-Server/database.py +256 -0
  78. benchlab/vu/VU-Server/dial_driver.py +534 -0
  79. benchlab/vu/VU-Server/dials/Comms_Hub_Gauge.py +78 -0
  80. benchlab/vu/VU-Server/dials/Comms_Hub_Server.py +100 -0
  81. benchlab/vu/VU-Server/dials/__init__.py +0 -0
  82. benchlab/vu/VU-Server/dials/base_logger.py +100 -0
  83. benchlab/vu/VU-Server/installer/inc/icon.ico +0 -0
  84. benchlab/vu/VU-Server/installer/install.nsi +148 -0
  85. benchlab/vu/VU-Server/make_version.py +40 -0
  86. benchlab/vu/VU-Server/pylintrc +628 -0
  87. benchlab/vu/VU-Server/requirements.txt +9 -0
  88. benchlab/vu/VU-Server/serial_driver.py +244 -0
  89. benchlab/vu/VU-Server/server.py +670 -0
  90. benchlab/vu/VU-Server/server_config.py +255 -0
  91. benchlab/vu/VU-Server/server_dial_handler.py +334 -0
  92. benchlab/vu/VU-Server/vu_notifications.py +24 -0
  93. benchlab/vu/VU-Server/www/android-chrome-192x192.png +0 -0
  94. benchlab/vu/VU-Server/www/android-chrome-512x512.png +0 -0
  95. benchlab/vu/VU-Server/www/apple-touch-icon.png +0 -0
  96. benchlab/vu/VU-Server/www/assets/css/demo.css +291 -0
  97. benchlab/vu/VU-Server/www/assets/css/demo.min.css +9 -0
  98. benchlab/vu/VU-Server/www/assets/css/demo.rtl.css +276 -0
  99. benchlab/vu/VU-Server/www/assets/css/demo.rtl.min.css +9 -0
  100. benchlab/vu/VU-Server/www/assets/css/tabler-flags.css +1084 -0
  101. benchlab/vu/VU-Server/www/assets/css/tabler-flags.min.css +9 -0
  102. benchlab/vu/VU-Server/www/assets/css/tabler-flags.rtl.css +1084 -0
  103. benchlab/vu/VU-Server/www/assets/css/tabler-flags.rtl.min.css +9 -0
  104. benchlab/vu/VU-Server/www/assets/css/tabler-payments.css +528 -0
  105. benchlab/vu/VU-Server/www/assets/css/tabler-payments.min.css +9 -0
  106. benchlab/vu/VU-Server/www/assets/css/tabler-payments.rtl.css +528 -0
  107. benchlab/vu/VU-Server/www/assets/css/tabler-payments.rtl.min.css +9 -0
  108. benchlab/vu/VU-Server/www/assets/css/tabler-social.css +10 -0
  109. benchlab/vu/VU-Server/www/assets/css/tabler-social.min.css +8 -0
  110. benchlab/vu/VU-Server/www/assets/css/tabler-social.rtl.css +10 -0
  111. benchlab/vu/VU-Server/www/assets/css/tabler-social.rtl.min.css +8 -0
  112. benchlab/vu/VU-Server/www/assets/css/tabler-vendors.css +1504 -0
  113. benchlab/vu/VU-Server/www/assets/css/tabler-vendors.min.css +9 -0
  114. benchlab/vu/VU-Server/www/assets/css/tabler-vendors.rtl.css +1504 -0
  115. benchlab/vu/VU-Server/www/assets/css/tabler-vendors.rtl.min.css +9 -0
  116. benchlab/vu/VU-Server/www/assets/css/tabler.css +25813 -0
  117. benchlab/vu/VU-Server/www/assets/css/tabler.min.css +13 -0
  118. benchlab/vu/VU-Server/www/assets/css/tabler.rtl.css +25777 -0
  119. benchlab/vu/VU-Server/www/assets/css/tabler.rtl.min.css +13 -0
  120. benchlab/vu/VU-Server/www/assets/css/theme.min.css +261 -0
  121. benchlab/vu/VU-Server/www/assets/img/header.png +0 -0
  122. benchlab/vu/VU-Server/www/assets/img/logo.png +0 -0
  123. benchlab/vu/VU-Server/www/assets/js/dark-theme.js +35 -0
  124. benchlab/vu/VU-Server/www/assets/js/dark-theme.min.js +9 -0
  125. benchlab/vu/VU-Server/www/assets/js/demo.js +132 -0
  126. benchlab/vu/VU-Server/www/assets/js/demo.min.js +9 -0
  127. benchlab/vu/VU-Server/www/assets/js/jquery.min.js +2 -0
  128. benchlab/vu/VU-Server/www/assets/js/tabler.esm.js +7482 -0
  129. benchlab/vu/VU-Server/www/assets/js/tabler.esm.min.js +15 -0
  130. benchlab/vu/VU-Server/www/assets/js/tabler.js +7543 -0
  131. benchlab/vu/VU-Server/www/assets/js/tabler.min.js +15 -0
  132. benchlab/vu/VU-Server/www/assets/js/vu1_api.js +68 -0
  133. benchlab/vu/VU-Server/www/assets/js/vu1_gui_api_key_settings.js +167 -0
  134. benchlab/vu/VU-Server/www/assets/js/vu1_gui_api_keys.js +138 -0
  135. benchlab/vu/VU-Server/www/assets/js/vu1_gui_dial.js +179 -0
  136. benchlab/vu/VU-Server/www/assets/js/vu1_gui_home.js +60 -0
  137. benchlab/vu/VU-Server/www/assets/js/vu1_gui_root.js +125 -0
  138. benchlab/vu/VU-Server/www/favicon-16x16.png +0 -0
  139. benchlab/vu/VU-Server/www/favicon-32x32.png +0 -0
  140. benchlab/vu/VU-Server/www/favicon.ico +0 -0
  141. benchlab/vu/VU-Server/www/favicon.png +0 -0
  142. benchlab/vu/VU-Server/www/index.html +47 -0
  143. benchlab/vu/VU-Server/www/views/api_keys.html +151 -0
  144. benchlab/vu/VU-Server/www/views/dial.html +286 -0
  145. benchlab/vu/VU-Server/www/views/footer.html +27 -0
  146. benchlab/vu/VU-Server/www/views/header.html +86 -0
  147. benchlab/vu/VU-Server/www/views/key_settings.html +132 -0
  148. benchlab/vu/VU-Server/www/views/start.html +124 -0
  149. benchlab/vu/__init__.py +5 -0
  150. benchlab/vu/assets/Barlow-Bold.ttf +0 -0
  151. benchlab/vu/assets/bl_dial_144x200.png +0 -0
  152. benchlab/vu/assets/bl_logo_144x200.png +0 -0
  153. benchlab/vu/devices.py +166 -0
  154. benchlab/vu/requirements.txt +24 -0
  155. benchlab/vu/sensors.py +18 -0
  156. benchlab/vu/vu_dial.config_template +90 -0
  157. benchlab/vu/vu_logo_gen.py +97 -0
  158. benchlab/vu/vu_server.config_template +5 -0
  159. benchlab/vu/vu_server_config.py +40 -0
  160. benchlab/vu/vu_server_manager.py +192 -0
  161. benchlab/vu/vu_tui.py +919 -0
  162. benchlab/vu/vu_updater.py +540 -0
  163. benchlab/wigidash/README.md +182 -0
  164. benchlab/wigidash/__init__.py +5 -0
  165. benchlab/wigidash/assets/Inter-Bold.ttf +0 -0
  166. benchlab/wigidash/assets/Inter.ttf +0 -0
  167. benchlab/wigidash/assets/benchlab.png +0 -0
  168. benchlab/wigidash/benchlab_fleet.py +150 -0
  169. benchlab/wigidash/benchlab_graph.py +517 -0
  170. benchlab/wigidash/benchlab_overview.py +426 -0
  171. benchlab/wigidash/benchlab_telemetry.py +105 -0
  172. benchlab/wigidash/benchlab_ui.py +190 -0
  173. benchlab/wigidash/benchlab_utils.py +182 -0
  174. benchlab/wigidash/requirements.txt +9 -0
  175. benchlab/wigidash/wigidash_device.py +541 -0
  176. benchlab/wigidash/wigidash_manager.py +342 -0
  177. benchlab/wigidash/wigidash_session.py +355 -0
  178. benchlab/wigidash/wigidash_usb.py +247 -0
  179. benchlab/wigidash/wigidash_widget.py +88 -0
  180. benchlab_pytools-3.0.0.dist-info/METADATA +239 -0
  181. benchlab_pytools-3.0.0.dist-info/RECORD +184 -0
  182. benchlab_pytools-3.0.0.dist-info/WHEEL +4 -0
  183. benchlab_pytools-3.0.0.dist-info/entry_points.txt +2 -0
  184. benchlab_pytools-3.0.0.dist-info/licenses/LICENSE +21 -0
benchlab/tui/README.md ADDED
@@ -0,0 +1,266 @@
1
+ # BENCHLAB Enhanced TUI
2
+
3
+ ## Overview
4
+
5
+ The BENCHLAB Enhanced TUI provides a modern, feature-rich curses-based interface for real-time telemetry monitoring of BENCHLAB devices. This enhanced version includes significant improvements over the original implementation with better visuals, enhanced functionality, and improved user experience.
6
+
7
+ ## 🚀 Key Features
8
+
9
+ ### **Visual Enhancements**
10
+ - **Rich Color Scheme**: Color-coded telemetry data for better readability
11
+ - **Progress Bars**: Visual indicators for power, temperature, voltage, and fan duty cycles
12
+ - **Status Indicators**: Clear visual feedback for connection status and warnings
13
+ - **Enhanced Layout**: Better spacing, alignment, and information hierarchy
14
+
15
+ ### **Advanced Telemetry Features**
16
+ - **Real-time Statistics**: Min/max/average values for power and temperature
17
+ - **Efficiency Monitoring**: System efficiency calculations and display
18
+ - **Thermal Status**: Automatic thermal status classification (NORMAL/WARNING/CRITICAL)
19
+ - **Voltage Status**: Color-coded voltage status indicators
20
+ - **Fan Statistics**: Average duty cycles and RPM monitoring
21
+
22
+ ### **Enhanced Navigation & Interaction**
23
+ - **Multiple Navigation Methods**: Vim-style (hjkl) and arrow key navigation
24
+ - **Help System**: Built-in help modal with keybindings reference
25
+ - **Statistics Reset**: Quick reset of min/max statistics
26
+ - **Device Management**: Enhanced fleet management with connection status
27
+
28
+ ### **Robustness & Error Handling**
29
+ - **Better Connection Recovery**: More graceful handling of disconnections
30
+ - **Enhanced Error Messages**: Clear error indicators and status messages
31
+ - **Connection Uptime**: Real-time connection duration tracking
32
+ - **Device Statistics**: Comprehensive device connection and performance stats
33
+
34
+ ## 📊 Telemetry Tabs
35
+
36
+ The TUI has 8 tabs: `Fleet`, `Device`, `System`, `Motherboard`, `12VHPWR`, `Voltage`, `Temperature`, `Fans` (in this order; see `Config.TAB_NAMES` in `benchlab/tui/config.py`). Tabs can also be jumped to directly with the number keys `0`-`7`.
37
+
38
+ ### **Fleet Tab (Tab 0)**
39
+ - Device list with connection status indicators
40
+ - Active device highlighting
41
+ - Connection uptime display
42
+ - Device selection and management
43
+
44
+ ### **Device Tab (Tab 1)**
45
+ - Connection details and port information
46
+ - Device identification (Model, Vendor ID, Product ID, UID)
47
+ - Firmware version display
48
+ - TUI refresh interval
49
+
50
+ ### **System / Motherboard / 12VHPWR Tabs (Tabs 2-4)**
51
+ - Real-time power consumption with progress bars
52
+ - Component power monitoring, split across dedicated System, Motherboard, and 12VHPWR tabs
53
+ - Efficiency calculations and display
54
+ - Min/max power statistics
55
+ - Power progress bars with color coding
56
+
57
+ ### **Voltage Tab (Tab 5)**
58
+ - Vdd and Vref voltage monitoring with status
59
+ - VIN channel voltage display with progress bars
60
+ - Voltage status indicators (OK/LOW/HIGH)
61
+ - Average voltage calculations
62
+ - Color-coded voltage readings
63
+
64
+ ### **Temperature Tab (Tab 6)**
65
+ - Chip and ambient temperature monitoring
66
+ - Temperature progress bars with thermal status
67
+ - Multiple temperature sensor readings
68
+ - Humidity monitoring
69
+ - Thermal status classification (NORMAL/WARNING/CRITICAL)
70
+ - Min/max temperature statistics
71
+
72
+ ### **Fans Tab (Tab 7)**
73
+ - Fan duty cycle monitoring with progress bars
74
+ - RPM readings for each fan
75
+ - Fan enable/disable status
76
+ - External fan duty monitoring
77
+ - Fan statistics (average duty, max RPM, active count)
78
+
79
+ ## 🎮 Keyboard Shortcuts
80
+
81
+ ### **Navigation**
82
+ - `h`, `←` - Move to previous tab
83
+ - `l`, `→` - Move to next tab
84
+ - `0`-`7` - Jump directly to a tab by index
85
+ - `q`, `Q` - Quit application
86
+ - `?` - Show/hide help modal
87
+
88
+ ### **Fleet Tab Specific**
89
+ - `↑`, `↓` - Navigate device list
90
+ - `Enter` - Select active device
91
+
92
+ ### **Global Commands**
93
+ - `r`, `R` - Reset min/max statistics
94
+ - `f` - Rescan the fleet for devices
95
+
96
+ Note: navigation is arrow-key and `h`/`l` only — there is no vim-style `j`/`k` tab switching or full vim keybinding scheme.
97
+
98
+ ## 🎨 Color Coding
99
+
100
+ - **Green**: Normal operation / Connected / OK status
101
+ - **Red**: Warnings / Errors / Disconnected / Critical status
102
+ - **Yellow**: High values / Caution / Warning status
103
+ - **Blue**: Information / Voltage readings
104
+ - **Cyan**: Temperature readings
105
+ - **White**: Headers and active elements
106
+
107
+ ## 📈 Enhanced Features
108
+
109
+ ### **Progress Bars**
110
+ All major telemetry values now include visual progress bars:
111
+ - Power consumption (0-500W scale)
112
+ - Temperature readings (0-100°C scale)
113
+ - Voltage levels (0-12V scale for VIN channels)
114
+ - Fan duty cycles (0-100% scale)
115
+
116
+ ### **Statistics Tracking**
117
+ - **Power Statistics**: Track minimum and maximum power consumption
118
+ - **Temperature Statistics**: Monitor thermal performance over time
119
+ - **Connection Statistics**: Track uptime and connection history
120
+ - **Reset Functionality**: Quickly reset statistics with 'r' key
121
+
122
+ ### **Status Indicators**
123
+ - **Connection Status**: Real-time connection monitoring
124
+ - **Thermal Status**: Automatic thermal classification
125
+ - **Voltage Status**: Per-channel voltage health monitoring
126
+ - **Fan Status**: Individual fan health and operation status
127
+
128
+ ### **Enhanced Error Handling**
129
+ - Graceful handling of device disconnections
130
+ - Clear error messages and status indicators
131
+ - Automatic reconnection attempts
132
+ - Robust serial communication error recovery
133
+
134
+ ## 🛠️ Installation
135
+
136
+ Ensure your environment has required dependencies:
137
+
138
+ ```bash
139
+ pip install -r requirements.txt
140
+ ```
141
+
142
+ Dependencies (see `requirements.txt`):
143
+ - `pyserial>=3.5`
144
+ - `windows-curses>=2.4.1` (Windows only — the Python standard library's `curses` module isn't available on Windows, so this package provides it)
145
+
146
+ On Linux/macOS, `curses` ships with the Python standard library, so no extra curses package is needed there.
147
+
148
+ ## 🚀 Usage
149
+
150
+ ### Launch the Enhanced TUI
151
+
152
+ ```bash
153
+ python -m benchlab -tui
154
+ ```
155
+
156
+ Running `python -m benchlab` with no flags at all also launches the interactive menu, from which the TUI can be selected; `-tui` is otherwise the default consumer tool.
157
+
158
+ ### Configuration
159
+
160
+ - `-i`, `--interval` - Telemetry refresh interval in seconds (default: `1.0`)
161
+ - `--source` - Data source to read telemetry from: `direct` (serial, default), `fastapi`, `fastapi_custom`, `mqtt`, `named_pipe`, or `service_http`
162
+ - `--api-port` - FastAPI server port, used when `--source fastapi` (default: `8000`)
163
+ - `--mqtt-broker`, `--mqtt-port` - MQTT broker host/port, used when `--source mqtt` (defaults: `localhost` / `1883`)
164
+ - `--service-url` - C# BenchLab service HTTP API URL, used when `--source service_http` (default: `http://localhost:8585`)
165
+
166
+ Example:
167
+
168
+ ```bash
169
+ python -m benchlab -tui --source fastapi --api-port 8000 --interval 0.5
170
+ ```
171
+
172
+ ## 📋 Requirements
173
+
174
+ - **Minimum Terminal Size**: 100x35 characters
175
+ - **Python 3.6+** with curses support
176
+ - **BENCHLAB devices** connected via USB
177
+ - **Serial port access** permissions (Linux: `dialout` group)
178
+
179
+ ## 🔧 Technical Details
180
+
181
+ ### **Enhanced Data Storage**
182
+ - **Telemetry History**: 100-point rolling history per device
183
+ - **Device Statistics**: Comprehensive performance tracking
184
+ - **Connection Tracking**: Uptime and disconnect monitoring
185
+ - **Memory Efficient**: Automatic cleanup and bounded storage
186
+
187
+ ### **Performance Optimizations**
188
+ - **Efficient Redrawing**: Minimal screen updates
189
+ - **Smart Refresh**: Different refresh rates per tab
190
+ - **Memory Management**: Prevents memory leaks in long sessions
191
+ - **Resource Monitoring**: TUI resource usage tracking
192
+
193
+ ### **Cross-Platform Support**
194
+ - **Windows**: Full COM port support
195
+ - **Linux**: ttyUSB/ttyACM/ttyS port detection
196
+ - **macOS**: Serial port compatibility
197
+ - **Terminal Compatibility**: Works with most terminal emulators
198
+
199
+ ## 🎯 Comparison with Original TUI
200
+
201
+ | Feature | Original | Enhanced |
202
+ |---------|----------|----------|
203
+ | Color Scheme | Basic | Rich, semantic colors |
204
+ | Progress Bars | None | Comprehensive visual indicators |
205
+ | Statistics | None | Min/max/average tracking |
206
+ | Help System | None | Built-in help modal |
207
+ | Error Handling | Basic | Enhanced with clear indicators |
208
+ | Navigation | Arrow keys only | Arrow keys + `h`/`l` |
209
+ | Status Indicators | Text only | Color-coded + text |
210
+ | Connection Monitoring | Basic | Uptime + status tracking |
211
+ | Statistics Reset | None | Quick reset functionality |
212
+ | Visual Layout | Basic | Enhanced spacing and hierarchy |
213
+
214
+ ## 🐛 Troubleshooting
215
+
216
+ ### **Common Issues**
217
+
218
+ 1. **Terminal too small**
219
+ - Resize terminal to at least 100x35 characters
220
+ - Message will appear if terminal is too small
221
+
222
+ 2. **No devices found**
223
+ - Check USB connections
224
+ - Verify device firmware
225
+ - Check serial port permissions (Linux: `sudo usermod -a -G dialout $USER`)
226
+
227
+ 3. **Permission errors**
228
+ - On Linux, add user to `dialout` group
229
+ - Restart terminal or reboot after group changes
230
+
231
+ 4. **Connection issues**
232
+ - Check device power and connections
233
+ - Verify device is in correct mode
234
+ - Check for conflicting applications using the port
235
+
236
+ ### **Debug Mode**
237
+ Enable debug logging for troubleshooting:
238
+ ```bash
239
+ LOG_LEVEL=DEBUG python -m benchlab -tui
240
+ ```
241
+
242
+ ## 🔄 Development
243
+
244
+ ### **Adding New Features**
245
+ 1. **New Telemetry Fields**: Update `translate_sensor_struct` to expose new metrics
246
+ 2. **Custom Tabs**: Add to `TAB_NAMES` and implement tab logic
247
+ 3. **Enhanced Visuals**: Leverage curses color pairs and formatting
248
+ 4. **Statistics**: Extend `device_stats` structure
249
+
250
+ ### **Customization**
251
+ - **Color Schemes**: Modify `curses.init_pair()` calls
252
+ - **Progress Bar Scales**: Adjust scaling factors in tab implementations
253
+ - **Status Thresholds**: Update temperature and voltage status logic
254
+ - **Keyboard Shortcuts**: Add to key handling section
255
+
256
+ ## 📚 References
257
+
258
+ - [Python curses documentation](https://docs.python.org/3/library/curses.html)
259
+
260
+ ## 🤝 Contributing
261
+
262
+ Enhancements and improvements are welcome! Please follow the existing code patterns and ensure backward compatibility where possible.
263
+
264
+ ## 📄 License
265
+
266
+ This project is part of the BenchLab suite. See the main project license for details.
@@ -0,0 +1,5 @@
1
+ """
2
+ BENCHLAB PyTools TUI
3
+ """
4
+
5
+ __version__ = "2.0.0"