qplotter 1.6.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 (130) hide show
  1. qplot/__init__.py +46 -0
  2. qplot/__main__.py +232 -0
  3. qplot/_auxiliary_paths.py +67 -0
  4. qplot/_build_info.json +1 -0
  5. qplot/_metadata.py +75 -0
  6. qplot/_repair.py +14 -0
  7. qplot/_shutdown_supervisor.py +4049 -0
  8. qplot/_version.py +12 -0
  9. qplot/_windows_shutdown_job.py +1166 -0
  10. qplot/configuration/__init__.py +3 -0
  11. qplot/configuration/config.py +578 -0
  12. qplot/configuration/config_schema.json +357 -0
  13. qplot/configuration/fonts.py +3 -0
  14. qplot/configuration/scripts.py +255 -0
  15. qplot/configuration/themes/__init__.py +13 -0
  16. qplot/configuration/themes/_base.py +592 -0
  17. qplot/configuration/themes/blank.py +17 -0
  18. qplot/configuration/themes/dark.py +54 -0
  19. qplot/configuration/themes/light.py +54 -0
  20. qplot/datahandling/LoadFromDB.py +224 -0
  21. qplot/datahandling/__init__.py +47 -0
  22. qplot/datahandling/_trusted_live_helper.py +812 -0
  23. qplot/datahandling/_trusted_live_protocol.py +1745 -0
  24. qplot/datahandling/database.py +2340 -0
  25. qplot/datahandling/dimensions.py +43 -0
  26. qplot/datahandling/file_identity.py +461 -0
  27. qplot/datahandling/parameter_data.py +149 -0
  28. qplot/datahandling/plot_progress.py +17 -0
  29. qplot/datahandling/qcodes_cache.py +277 -0
  30. qplot/datahandling/qcodes_compat.py +14 -0
  31. qplot/datahandling/readSQL.py +2442 -0
  32. qplot/datahandling/readonly.py +2566 -0
  33. qplot/datahandling/source_activity.py +21 -0
  34. qplot/datahandling/trusted_array_preview.py +148 -0
  35. qplot/datahandling/trusted_derived_cache.py +1605 -0
  36. qplot/datahandling/trusted_derived_rendering.py +876 -0
  37. qplot/datahandling/trusted_heatmap.py +246 -0
  38. qplot/datahandling/trusted_live.py +2808 -0
  39. qplot/datahandling/trusted_live_queries.py +5907 -0
  40. qplot/datahandling/trusted_live_service.py +1919 -0
  41. qplot/datahandling/trusted_live_supervisor.py +2161 -0
  42. qplot/datahandling/trusted_plot.py +283 -0
  43. qplot/datahandling/trusted_presentation.py +1065 -0
  44. qplot/datahandling/trusted_snapshot.py +1132 -0
  45. qplot/datahandling/trusted_work_coordinator.py +2157 -0
  46. qplot/datahandling/trusted_work_scheduler.py +1204 -0
  47. qplot/diagnostics.py +241 -0
  48. qplot/resources/testdata/qplot_test_db_01_10mb.csv +11 -0
  49. qplot/resources/testdata/qplot_test_db_02_25mb.csv +14 -0
  50. qplot/resources/testdata/qplot_test_db_03_50mb.csv +17 -0
  51. qplot/resources/testdata/qplot_test_db_04_100mb.csv +20 -0
  52. qplot/resources/testdata/qplot_test_db_05_250mb.csv +23 -0
  53. qplot/resources/testdata/qplot_test_db_06_500mb.csv +26 -0
  54. qplot/resources/testdata/qplot_test_db_07_1gb.csv +29 -0
  55. qplot/resources/testdata/qplot_test_db_08_5gb.csv +32 -0
  56. qplot/resources/testdata/qplot_test_db_09_10gb.csv +35 -0
  57. qplot/resources/testdata/qplot_test_db_10_30gb.csv +38 -0
  58. qplot/testdata.py +1804 -0
  59. qplot/tools/__init__.py +13 -0
  60. qplot/tools/finite_means.py +123 -0
  61. qplot/tools/general.py +139 -0
  62. qplot/tools/heatmap_geometry.py +391 -0
  63. qplot/tools/operation_registry.py +179 -0
  64. qplot/tools/plot_tools.py +650 -0
  65. qplot/tools/sample_statistics.py +111 -0
  66. qplot/tools/worker.py +2838 -0
  67. qplot/windows/__init__.py +9 -0
  68. qplot/windows/_colorbar.py +422 -0
  69. qplot/windows/_commands.py +523 -0
  70. qplot/windows/_config_persistence.py +123 -0
  71. qplot/windows/_database_actions.py +4933 -0
  72. qplot/windows/_dataset_handle.py +221 -0
  73. qplot/windows/_display_precision.py +48 -0
  74. qplot/windows/_dragdrop.py +70 -0
  75. qplot/windows/_export_paths.py +1167 -0
  76. qplot/windows/_help.py +210 -0
  77. qplot/windows/_mixed_appearance.py +303 -0
  78. qplot/windows/_mixed_plots.py +461 -0
  79. qplot/windows/_native_averaging.py +323 -0
  80. qplot/windows/_native_transforms.py +551 -0
  81. qplot/windows/_plot1d_snap.py +612 -0
  82. qplot/windows/_plot1d_traces.py +2236 -0
  83. qplot/windows/_plot2d_colorbar.py +1127 -0
  84. qplot/windows/_plot2d_colorbar_dialog.py +786 -0
  85. qplot/windows/_plot2d_layers.py +2291 -0
  86. qplot/windows/_plot2d_sweeps.py +712 -0
  87. qplot/windows/_plotWin.py +2082 -0
  88. qplot/windows/_plot_actions.py +2703 -0
  89. qplot/windows/_plot_annotation.py +186 -0
  90. qplot/windows/_plot_appearance.py +283 -0
  91. qplot/windows/_plot_axis_scaling.py +1521 -0
  92. qplot/windows/_plot_data_viewbox.py +94 -0
  93. qplot/windows/_plot_drop_axes.py +224 -0
  94. qplot/windows/_plot_export.py +1445 -0
  95. qplot/windows/_plot_feedback.py +112 -0
  96. qplot/windows/_plot_marquee.py +659 -0
  97. qplot/windows/_plot_refresh.py +950 -0
  98. qplot/windows/_plot_source_promotion.py +178 -0
  99. qplot/windows/_plot_state.py +237 -0
  100. qplot/windows/_plot_status.py +115 -0
  101. qplot/windows/_plot_tiling.py +35 -0
  102. qplot/windows/_plot_transform_labels.py +60 -0
  103. qplot/windows/_preferences.py +724 -0
  104. qplot/windows/_refresh_interval.py +172 -0
  105. qplot/windows/_run_controls.py +789 -0
  106. qplot/windows/_shortcuts.py +47 -0
  107. qplot/windows/_subplots/__init__.py +8 -0
  108. qplot/windows/_subplots/subplot1d.py +532 -0
  109. qplot/windows/_subplots/subplot2d.py +919 -0
  110. qplot/windows/_svg_export.py +209 -0
  111. qplot/windows/_trusted_derived_qt.py +1759 -0
  112. qplot/windows/_widgets/__init__.py +23 -0
  113. qplot/windows/_widgets/_run_formatting.py +387 -0
  114. qplot/windows/_widgets/details_tables.py +1119 -0
  115. qplot/windows/_widgets/dropbox.py +290 -0
  116. qplot/windows/_widgets/operations.py +460 -0
  117. qplot/windows/_widgets/preview.py +2997 -0
  118. qplot/windows/_widgets/run_list_items.py +488 -0
  119. qplot/windows/_widgets/toolbar.py +111 -0
  120. qplot/windows/_widgets/treeWidgets.py +2572 -0
  121. qplot/windows/_window_controls.py +414 -0
  122. qplot/windows/main.py +1632 -0
  123. qplot/windows/plot1d.py +313 -0
  124. qplot/windows/plot2d.py +1935 -0
  125. qplotter-1.6.0.dist-info/METADATA +322 -0
  126. qplotter-1.6.0.dist-info/RECORD +130 -0
  127. qplotter-1.6.0.dist-info/WHEEL +5 -0
  128. qplotter-1.6.0.dist-info/entry_points.txt +4 -0
  129. qplotter-1.6.0.dist-info/licenses/LICENSE +21 -0
  130. qplotter-1.6.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,322 @@
1
+ Metadata-Version: 2.4
2
+ Name: qplotter
3
+ Version: 1.6.0
4
+ Summary: PyQt-based viewer for completed and running QCoDeS database experiments
5
+ Author-email: Ben Wordsworth <b.wordsworth@lancaster.ac.uk>, Edward Laird <e.a.laird@lancaster.ac.uk>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/lairdgrouplancaster/QCoDeS-Plotter.git
8
+ Project-URL: Source, https://github.com/lairdgrouplancaster/QCoDeS-Plotter
9
+ Project-URL: Issues, https://github.com/lairdgrouplancaster/QCoDeS-Plotter/issues
10
+ Keywords: qcodes,pyqt,pyqtgraph,data-visualization,scientific-computing
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Environment :: MacOS X
13
+ Classifier: Environment :: Win32 (MS Windows)
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: Operating System :: MacOS
16
+ Classifier: Operating System :: Microsoft :: Windows
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Programming Language :: Python :: Implementation :: CPython
23
+ Classifier: Topic :: Scientific/Engineering :: Visualization
24
+ Requires-Python: >=3.11
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: qplotter-native==1.0.0
28
+ Requires-Dist: apsw==3.53.4.0
29
+ Requires-Dist: jsonschema>=4.23.0
30
+ Requires-Dist: numpy>=2.3.1
31
+ Requires-Dist: pandas>=2.3.0
32
+ Requires-Dist: PyQt6>=6.8.0
33
+ Requires-Dist: pyqtgraph>=0.14.0
34
+ Requires-Dist: qcodes>=0.53.0
35
+ Provides-Extra: dev
36
+ Requires-Dist: build>=1.2; extra == "dev"
37
+ Requires-Dist: mypy<2.0,>=1.14; extra == "dev"
38
+ Requires-Dist: pytest>=8.2; extra == "dev"
39
+ Requires-Dist: pytest-cov>=6.0; extra == "dev"
40
+ Requires-Dist: pytest-timeout>=2.3; extra == "dev"
41
+ Requires-Dist: pytest-xdist>=3.8; extra == "dev"
42
+ Requires-Dist: ruff>=0.8; extra == "dev"
43
+ Requires-Dist: twine>=5.0; extra == "dev"
44
+ Dynamic: license-file
45
+
46
+ # QCoDeS-Plotter
47
+
48
+ [![release](https://img.shields.io/github/v/release/lairdgrouplancaster/QCoDeS-Plotter?label=release)](https://github.com/lairdgrouplancaster/QCoDeS-Plotter/releases/latest)
49
+ [![pre-release](https://img.shields.io/github/v/release/lairdgrouplancaster/QCoDeS-Plotter?include_prereleases&label=pre-release&sort=semver)](https://github.com/lairdgrouplancaster/QCoDeS-Plotter/releases)
50
+
51
+ QCoDeS-Plotter, or qPlot, is a PyQt-based data viewer for QCoDeS databases. It
52
+ is designed for inspecting completed and running experiments, with live refresh,
53
+ line plots, heatmaps, 1D cut extraction, CSV export, and simple data operations.
54
+
55
+ ## Requirements
56
+
57
+ qPlot supports standard CPython 3.11–3.14. Free-threaded Python and PyPy are
58
+ outside the supported matrix.
59
+
60
+ Runtime dependencies are declared in `pyproject.toml` and are installed
61
+ automatically when qPlot is installed.
62
+
63
+ Application development and Git installs use a separately installed native
64
+ platform wheel for trusted live QCoDeS access. A C compiler is required only
65
+ when building the native distribution from source.
66
+
67
+ Native wheels are prepared for Windows x64, macOS ARM64, macOS Intel, and Linux
68
+ x86_64 (`manylinux_2_28`, requiring glibc 2.28 or newer). Windows and macOS are
69
+ the supported desktop platforms. Linux receives headless application, reader
70
+ and installation validation; its interactive desktop GUI is not yet supported.
71
+ Linux may need system Qt libraries such as `libegl1`. Other architectures,
72
+ 32-bit Windows and musl-based Linux have no native wheel. Their ordinary PyPI
73
+ installation fails with a missing compatible distribution instead of compiling.
74
+
75
+ For a supported local database, qPlot now attempts trusted live access first.
76
+ One application read broker uses one persistent helper to publish the basic run
77
+ list, detect later commits, fill run metadata progressively, and load the
78
+ selected run's plain detail view without copying the database. Main-database,
79
+ WAL, and rollback-journal handles remain read-only; SQLite may update only the
80
+ exact colocated `-shm` file as transient WAL coordination state.
81
+
82
+ Normal `qplot`, `python -m qplot`, and `qplot.run()` launches put the complete
83
+ qPlot process tree behind a shutdown boundary before Qt or reader helpers can
84
+ start. The command-line process is the launcher. A public `qplot.run()` call
85
+ first starts a dedicated Python launcher, so the calling process, its threads,
86
+ its QCoDeS writer, and unrelated children stay outside that boundary. POSIX
87
+ uses a dedicated GUI session/process group whose leader is retained until it is
88
+ reaped; Windows assigns the GUI atomically to a retained kill-on-close Job
89
+ Object and keeps the original handles. The API launcher reports only after the
90
+ GUI tree is gone, through a private authenticated channel whose EOF remains
91
+ usable even if a caller thread reaps the launcher first. `qplot.run()` returns
92
+ 70 for forced shutdown and represents POSIX signal termination without
93
+ signalling its caller as `-signal_number`. If the caller receives
94
+ `KeyboardInterrupt`, `SystemExit`, or another control-flow exception while
95
+ waiting, it sends an irreversible authenticated cancellation and re-raises the
96
+ original exception only after the launcher has killed and reaped its GUI/helper
97
+ tree and exited. A dedicated cancellation writer retains partial-send progress;
98
+ one serialized lifecycle permits exactly one worker creation and start attempt,
99
+ or one committed write-side-EOF fallback if startup fails. Later interrupts are
100
+ absorbed until authenticated outcome, launcher EOF, and exit/reap observation
101
+ are all complete, so they cannot replace the first exception or release a live
102
+ tree. During that bounded interval qPlot transactionally installs a temporary
103
+ SIGINT absorber and always restores the exact caller handler, including when an
104
+ interrupt lands after either signal-handler side effect. Caller-channel EOF
105
+ triggers the same fail-closed cleanup. A
106
+ confirmed shutdown therefore has
107
+ one immutable absolute deadline even if native Qt teardown blocks. The special
108
+ `qplot.run(return_objects=True)` form instead runs in the caller's process and
109
+ returns caller-owned Qt objects; it intentionally does not acquire the
110
+ launcher's process-tree containment or hard-deadline guarantee.
111
+
112
+ Snapshot fallback is limited to an unavailable native backend or an explicitly
113
+ unsupported source or filesystem that the legacy access probe can verify
114
+ safely. Ordinary fallback selection is basic-only: it renders cached run-list
115
+ fields and an unavailable detail state without starting a selected-detail
116
+ reader or preparing an additional selected-detail snapshot. That claim applies
117
+ only to row selection: fallback metadata and retained preview paths can still
118
+ create private snapshots. Plot and CSV actions also acquire action-owned
119
+ snapshots. Trusted live previews and thumbnails load progressively through a bounded
120
+ scheduler and application cache. See
121
+ [Trusted live QCoDeS reader](docs/trusted-live-reader.md).
122
+
123
+ ## Packages
124
+
125
+ The application distribution is `qplotter`; its Python imports and
126
+ console commands remain `qplot`, `qplot-cfg`, and `qplot-generate-db`.
127
+ Use **Help → About qPlot** to see the version in use on every platform.
128
+ Source checkouts also show the commit and
129
+ whether there are local changes. CI-built packages retain their build commit
130
+ and, for pull-request builds, the PR number. Packages installed without build
131
+ provenance still show the release number.
132
+ The separately built `qplotter-native==1.0.0` supplies the protected
133
+ SQLite reader through `qplot_native`. The application's exact dependency pin
134
+ installs the compatible native wheel automatically. Both packages pin the same
135
+ APSW/SQLite runtime, preserving trusted live reading and database protections.
136
+
137
+ Contributors can edit the application without a C compiler:
138
+
139
+ ```console
140
+ python -m pip install --only-binary=:all: -e ".[dev]"
141
+ ```
142
+
143
+ See [Contributing](CONTRIBUTING.md) and [Distribution](docs/distribution.md)
144
+ for prepublication development using a local native wheel, explicit native
145
+ source builds, and release validation.
146
+
147
+ ## Install
148
+
149
+ Install qPlot inside a supported Python virtual environment. This checkout
150
+ prepares the stable application release `1.6.0`, with native `1.0.0`.
151
+ The installation examples below work after publication; until then, use
152
+ validated local artifacts as described in [Distribution](docs/distribution.md).
153
+
154
+ ### Prelude
155
+ #### Windows
156
+
157
+ Create a folder for qPlot, open it in Terminal, and execute:
158
+ ```console
159
+ py -3.11 --version
160
+ py -3.11 -m venv .venv
161
+ .\.venv\Scripts\Activate.ps1
162
+ python -m pip install -U pip
163
+ ```
164
+ #### macOS / Linux
165
+
166
+ Create a folder for qPlot, open Terminal there, and execute:
167
+ ```console
168
+ python3 --version
169
+ python3 -m venv .venv-mac
170
+ source .venv-mac/bin/activate
171
+ python -m pip install -U pip
172
+ ```
173
+ ### Installing your chosen version
174
+
175
+ For ordinary installation after a stable PyPI release is available:
176
+
177
+ ```console
178
+ python -m pip install --only-binary=:all: qplotter
179
+ ```
180
+
181
+ To select version 1.6.0 explicitly after publication:
182
+ ```console
183
+ python -m pip install --only-binary=:all: qplotter==1.6.0
184
+ ```
185
+
186
+ Both commands install the full runtime dependency set as wheels, with no C
187
+ compiler. To follow subsequent betas, add `--pre`. Check the selected Python
188
+ interpreter and platform if pip reports no compatible wheel.
189
+
190
+ Historical releases retain their old packaging. For example, the earlier full
191
+ release remains available from its Git tag:
192
+ ```console
193
+ python -m pip install git+https://github.com/lairdgrouplancaster/QCoDeS-Plotter.git@v1.5.0
194
+ ```
195
+
196
+ ### Replacing an older installation
197
+
198
+ Older releases used the distribution name `qplot`. A fresh virtual environment
199
+ is the simplest replacement. To reuse an environment, close qPlot, uninstall
200
+ the old distribution and any overlapping split installation **before**
201
+ installing the new packages:
202
+
203
+ ```console
204
+ python -m pip uninstall -y qplot qcodes-plotter qcodes-plotter-native qplotter qplotter-native
205
+ python -m pip install --only-binary=:all: qplotter==1.6.0
206
+ python -m pip check
207
+ ```
208
+
209
+ Do this even if the old installation was editable. Installing the new name
210
+ over `qplot` leaves two distributions owning the same `qplot` import package
211
+ and console commands; uninstalling the old one afterward can remove the new
212
+ installation's files. Settings and measurement databases are outside these
213
+ packages and are unaffected by pip uninstall.
214
+
215
+ ### Troubleshooting
216
+
217
+ If the version check above reports Python 3.10 or older, install Python 3.11 or newer
218
+ first and use that launcher instead, for example `python3.12` on macOS.
219
+
220
+ Virtual environments are not portable between operating systems. If the
221
+ checkout is synced between systems, make sure VS Code is using the interpreter
222
+ created for the current system:
223
+
224
+ * Windows: `.\.venv\Scripts\python.exe`
225
+ * macOS: `./.venv-mac/bin/python`
226
+ * Linux development: `./.venv-linux/bin/python`
227
+
228
+ ### Check the install
229
+
230
+ ```console
231
+ qplot-cfg -version
232
+ python -c "import qplot; print(qplot.__file__)"
233
+ ```
234
+
235
+ ## Run
236
+
237
+ Start the app from an activated virtual environment:
238
+
239
+ ```console
240
+ qplot
241
+ ```
242
+
243
+ To open a database directly:
244
+
245
+ ```console
246
+ qplot path/to/database.db
247
+ ```
248
+
249
+ For file-manager `Open With` and double-click setup, see
250
+ [Opening Databases from the File Manager](docs/user-guide.md#opening-databases-from-the-file-manager).
251
+
252
+ You can also run:
253
+
254
+ ```console
255
+ python -m qplot
256
+ ```
257
+
258
+ or start it from Python:
259
+
260
+ ```python
261
+ import qplot
262
+
263
+ qplot.run()
264
+ ```
265
+
266
+ ## Basic Use
267
+
268
+ 1. Open qPlot.
269
+ 2. Drag a QCoDeS `.db` file onto the database path field, or use
270
+ `File -> Load Database...`.
271
+ 3. Select a run in the run table.
272
+ 4. Plot a measurement using the run-table context menu, or enter a run ID and
273
+ measurement number at the top of the window. Snapshot fallback sessions may
274
+ also offer a preview that can be double-clicked.
275
+
276
+ Plot windows may appear before their data has finished loading. Check the
277
+ status bar at the bottom of the plot window before assuming a load has failed.
278
+
279
+ For the installed `1.5.0` release, see its
280
+ [versioned user guide](https://github.com/lairdgrouplancaster/QCoDeS-Plotter/blob/v1.5.0/docs/user-guide.md).
281
+
282
+ Likewise, use the
283
+ [1.5.0 troubleshooting guide](https://github.com/lairdgrouplancaster/QCoDeS-Plotter/blob/v1.5.0/docs/troubleshooting.md)
284
+ for this release.
285
+
286
+ For release history, see [CHANGELOG.md](CHANGELOG.md).
287
+
288
+ ## Configuration
289
+
290
+ On first run, qPlot creates:
291
+
292
+ ```text
293
+ ~/.qplot/config.json
294
+ ```
295
+
296
+ Useful commands:
297
+
298
+ ```console
299
+ qplot-cfg -info
300
+ qplot-cfg -version
301
+ qplot-cfg -dump
302
+ qplot-cfg -find user_preference.theme
303
+ qplot-cfg -set_value user_preference.theme dark
304
+ qplot-cfg -reset
305
+ ```
306
+
307
+ For all config keys, defaults, validation rules, and contributor notes, see
308
+ [docs/configuration.md](docs/configuration.md).
309
+
310
+ ## Development
311
+
312
+ For development setup, test commands, and contribution workflow, see
313
+ [CONTRIBUTING.md](CONTRIBUTING.md).
314
+
315
+ For a short map of the codebase, see [docs/architecture.md](docs/architecture.md).
316
+
317
+ For demo data and screenshot workflow notes, see [docs/demo-data.md](docs/demo-data.md).
318
+
319
+ For release and packaging notes, see [docs/distribution.md](docs/distribution.md).
320
+
321
+ Local development helper scripts are documented in
322
+ [scripts/README.md](scripts/README.md).
@@ -0,0 +1,130 @@
1
+ qplot/__init__.py,sha256=h7bATpj2Fws18yzOZB9S4CG4WI2nspp1y62SGYMBQs0,995
2
+ qplot/__main__.py,sha256=mo3MljVvNwH9UER9zVelA5OtwAKbwP3ioOWRPLa7XL8,7196
3
+ qplot/_auxiliary_paths.py,sha256=PSHcPlOsZLyifrFM2exq0UjbXOxdAwtjvv9G1WRrGyE,2869
4
+ qplot/_build_info.json,sha256=s5OetzXTjqAJW09Fg9TkYucRpECC_nQhgJ0fi-gV56c,109
5
+ qplot/_metadata.py,sha256=JdYjUqPMlvuLorfKFrDBzDl5XtuK1UajiSabvTREVYU,2882
6
+ qplot/_repair.py,sha256=p0ECi8EUalhbO5dqyYYDTI2_056hXjoC1iz4ttGxLsQ,400
7
+ qplot/_shutdown_supervisor.py,sha256=-_6JHn3QGS3kb3Ve9OvfXPVzuOdx4uTxHmPhnW1TUz8,150232
8
+ qplot/_version.py,sha256=erFpq1Pi8onofb-kYwA1Vef7QbFxKKLRchDZBJSaPWw,255
9
+ qplot/_windows_shutdown_job.py,sha256=4VerCXKwHkOwBUtpDZDf-H3-Jl6SuA7SeI3qVnpYzmg,44929
10
+ qplot/diagnostics.py,sha256=B5_vR60t5cWwE5y_hxyZQJQDoM_PZNavgWK_LCCGiOs,6796
11
+ qplot/testdata.py,sha256=fv2uGoVCB2lijl9gWD8VkK3kU5sNpHuGisbZelD6vio,69253
12
+ qplot/configuration/__init__.py,sha256=coXd1W4qzG_qftVAVidfUj_8HC5mYRKQF1-6AfnnFbw,32
13
+ qplot/configuration/config.py,sha256=iI0sZseXF08HNLUNx_rnzintd6wwDNnmLXEqBUGTNA4,18704
14
+ qplot/configuration/config_schema.json,sha256=9BcbkCnVkUFgmSrEdssK4MU-8jodD7O-KKdJV3--T6o,12592
15
+ qplot/configuration/fonts.py,sha256=f5t7MKDgZVfxVs8njQHpUstooGOcthbmVsQFZ4wTMy4,91
16
+ qplot/configuration/scripts.py,sha256=XlJWj242rtXMUJobuQSjSG2s5MJFYM24UwOfPL3IN88,7061
17
+ qplot/configuration/themes/__init__.py,sha256=TDdORwH1LMAknZVNrm6uIlpp-LlMUFE9TvUJZMURVVg,222
18
+ qplot/configuration/themes/_base.py,sha256=2Ok9IS3NEK3niEIFP98dEuVkBwU7KAoWYBN1u8LYlKQ,15898
19
+ qplot/configuration/themes/blank.py,sha256=0GPSpECINzeMnLRk4K3xJWcM8rEYfbQ4P-popFYJAK8,463
20
+ qplot/configuration/themes/dark.py,sha256=9Z5GzpJgJ5FydfuownFAOIN8Y_JAs2IivBw8cAAVe0o,1364
21
+ qplot/configuration/themes/light.py,sha256=s0aMj2-6kBjSuP4kUb-1e4FkbvibS1uuw2rgEN8rgns,1369
22
+ qplot/datahandling/LoadFromDB.py,sha256=U4ERlImWRCokqrWRDFrOPfvluNEaHYGxFske0NiUmP0,8197
23
+ qplot/datahandling/__init__.py,sha256=lVgpAbIwthVdxhr0Ifpxpg71bRQ-zQKGL1H38oFAYJY,1386
24
+ qplot/datahandling/_trusted_live_helper.py,sha256=7QcgRtGFTlFXdQX-tet6aA2G5M_78XZ1n-CHbM32w2k,30458
25
+ qplot/datahandling/_trusted_live_protocol.py,sha256=v8HwmRc3Ify_8FZSQKR1k5UoGkc681Br6tivG85P4BQ,63164
26
+ qplot/datahandling/database.py,sha256=3Xdj4nTvErngJrTbdiCaozRal0-Bdt4PjYadHb21zJc,81732
27
+ qplot/datahandling/dimensions.py,sha256=rttzcg8_LftVsl2cP5fK26n9Wt-GbmD52gsOW4Co2yU,1452
28
+ qplot/datahandling/file_identity.py,sha256=TRvh8GcGsl82ZoRhz7bi7FkLxtXa6c_Vyb6OvlNbbHA,15807
29
+ qplot/datahandling/parameter_data.py,sha256=VxXEzU3gIQZKABcYPBtaQMMEbuABhz_P03j-RXXpBW8,5609
30
+ qplot/datahandling/plot_progress.py,sha256=WzgyWY4d7Q29D7ZH0HdKdTKTuEPLrDic6s05gm-qW9c,368
31
+ qplot/datahandling/qcodes_cache.py,sha256=RSfyctKs-qjICxgmtpJfRLfsWw2T9tzFZFzROnnDXnU,9076
32
+ qplot/datahandling/qcodes_compat.py,sha256=ScgxuRDrPBN65QvHEj8OUGWdXpiXAHy2GN3b45xmE2Q,535
33
+ qplot/datahandling/readSQL.py,sha256=aJDadBNroHAJfAf0uoN2L2I0Bqaw24YFWFnCA8SmggQ,81697
34
+ qplot/datahandling/readonly.py,sha256=JnKJq8R-bAJHWDMwrjW0ei1UUZ8NnXKB0onmBVQJQy4,93659
35
+ qplot/datahandling/source_activity.py,sha256=4WP9VFD5usBjI4hckg5OXfbD7lQMj6NM-DclEOkOzfE,751
36
+ qplot/datahandling/trusted_array_preview.py,sha256=3-CJ15sWqRuCJz7ZRnSrb1xrOUyfBBxT354tRCldTE0,6752
37
+ qplot/datahandling/trusted_derived_cache.py,sha256=3SETZTfNovjHj2wwRfRcDuPaNwajiAP1I9CzmwhXoss,62213
38
+ qplot/datahandling/trusted_derived_rendering.py,sha256=VT1Dh1_O1-ukXbX49YNDL2gOfG06ccbw2N6ednoApuU,33399
39
+ qplot/datahandling/trusted_heatmap.py,sha256=RIyT_pFXiHCT5sKJE47osXrUu0O2wz7DKPcIwnKSiZ4,10849
40
+ qplot/datahandling/trusted_live.py,sha256=_qQSRTThJKpiIIMw9Ukegnys-oEdRa1MefBwTe_MFTs,113026
41
+ qplot/datahandling/trusted_live_queries.py,sha256=1Lv_4PCbYIBDd-BSTwNVad0vDB4miNeZtF8evIepPJU,233550
42
+ qplot/datahandling/trusted_live_service.py,sha256=AaLT4JLVPskIrv242l62SuGMCSgZx6wfZRE9nVuodRw,75330
43
+ qplot/datahandling/trusted_live_supervisor.py,sha256=fd3-33_EA5rPCH8Eeo071tqlWRs5150EX_RM9LREo7Y,81053
44
+ qplot/datahandling/trusted_plot.py,sha256=4kdNhTnNILxPvM5NalDWtP5vmTLPf5gH06Mje84nsCk,13137
45
+ qplot/datahandling/trusted_presentation.py,sha256=RL6F_pjVmoFdpMaylaGpkPr7EnESXmAjCtaOkDsVlTU,37591
46
+ qplot/datahandling/trusted_snapshot.py,sha256=o6EJqntswtVBiQ745zluKwtqKwI2c35oxgKiGbYkJno,39912
47
+ qplot/datahandling/trusted_work_coordinator.py,sha256=JdJTbi73O2uoSStuufcEsOzbwzCRvofL0hUqgaFuSu4,83916
48
+ qplot/datahandling/trusted_work_scheduler.py,sha256=rslm4R9LJl0FzMWYbSDyKrc8liGA1WgKUEhoYAhmH2s,46553
49
+ qplot/resources/testdata/qplot_test_db_01_10mb.csv,sha256=orvze7G1wYHVxRJ9P8RD_HUk6fAHjLBMpMRPDohfo6I,590
50
+ qplot/resources/testdata/qplot_test_db_02_25mb.csv,sha256=vXHkaakA2Kc4ghKzPnAXPeFFQ21aQOB1UxeG9A456WM,731
51
+ qplot/resources/testdata/qplot_test_db_03_50mb.csv,sha256=FBwUONqm2EIBTAUsg6D4tJOQYjspfPITgV1Wol_CAAQ,872
52
+ qplot/resources/testdata/qplot_test_db_04_100mb.csv,sha256=TBTpmEVfWJ2a6vZ5Chn5k7gPSl9Gy8tKXYbLUWIdgQk,1015
53
+ qplot/resources/testdata/qplot_test_db_05_250mb.csv,sha256=DgtuXKmRZeIby88CVhfYGTyZxrJvf77YfxCjQ57wb_o,1164
54
+ qplot/resources/testdata/qplot_test_db_06_500mb.csv,sha256=g2E21l2IfeF4mpNLQeuGO3bNBPVuTku7ygH0gt0eRcg,1313
55
+ qplot/resources/testdata/qplot_test_db_07_1gb.csv,sha256=klnu_9KiWXJcsFgtYfGQQrtRrWQBgxe7JZKrnM1M27w,1462
56
+ qplot/resources/testdata/qplot_test_db_08_5gb.csv,sha256=0yDuBKsK8_X2SWPPoDWTiH-KAAb2PG7ToGPub-6CA9w,1611
57
+ qplot/resources/testdata/qplot_test_db_09_10gb.csv,sha256=MP4GMMS_osFubnn1orKZHsUKlNpfueQo0_vPDtlJ9bQ,1760
58
+ qplot/resources/testdata/qplot_test_db_10_30gb.csv,sha256=n5TYHogO9_mmUu9-yPjO09ExCqVWaEl623XPK8pLCgo,1919
59
+ qplot/tools/__init__.py,sha256=Ssfd1pPEQCU_Ji59hN2nXQ3mS9U63eaQ6_YN2SvD8O8,167
60
+ qplot/tools/finite_means.py,sha256=L9cQNoFQZfCc2j2TPTfBb2hZZAa0LVqKCp-3dP3Dvxw,5980
61
+ qplot/tools/general.py,sha256=adlJ2f4EpI-0DBzS1SUVJ29n9ZY8cknUk52aGsZeaks,5559
62
+ qplot/tools/heatmap_geometry.py,sha256=TKNormEKCXiGFGM56AsZ9Teu4fmtlBRGOqsdNLJ5BQU,14157
63
+ qplot/tools/operation_registry.py,sha256=7G0Q7cpuWJkySfcx_xwHKHQkC_cXpW-VQwKSj_cIRto,5100
64
+ qplot/tools/plot_tools.py,sha256=p_Kc19wxLXbsyIzKJPz6YPF1ZxOrY4zFf7YA2m0U-Ps,29344
65
+ qplot/tools/sample_statistics.py,sha256=5OaaqwO8RXnk1RTk1BpMtHdNuSeGBwIRRUWQ7ysyJVY,4656
66
+ qplot/tools/worker.py,sha256=F0zvErGjVsdO8dNOB2b8SaFRRHzRl-oiWglnwkZnX60,116167
67
+ qplot/windows/__init__.py,sha256=TDjjzSl7-RlPj5XWVYO4cRsIDoeDrI2MITv8Hw5jw-s,148
68
+ qplot/windows/_colorbar.py,sha256=DPx2ZmTTx1k636DCMztQkOIwd8xSNdK6TW5a44qlVvs,9855
69
+ qplot/windows/_commands.py,sha256=vg9-ivGC83hpTnz5g1fMAvj5etbfziUQKx0Q9Bk1ino,16143
70
+ qplot/windows/_config_persistence.py,sha256=VtcdAiApp4xNl5-yb_PxBWeWfPBPU5zcE6Q2KaNUbJ8,3371
71
+ qplot/windows/_database_actions.py,sha256=zGxW7WvLUhAlfbjJgp4QZiC3jpIonf-rB7vWwI-pjrg,192402
72
+ qplot/windows/_dataset_handle.py,sha256=cEUOqZFRm84FrVMOREbNEKlQi90LYym72F3-98uRtnU,6792
73
+ qplot/windows/_display_precision.py,sha256=riC8HtgM5lfiJb9662AaFHGzjGEjE6rFYVxLpKwUDTA,1930
74
+ qplot/windows/_dragdrop.py,sha256=YbUyaPG53JojEuWBIa1jf5CXoAVshon9WIl6aiRHnZU,2470
75
+ qplot/windows/_export_paths.py,sha256=o5J-wWMCOaVyjflqX2d-9xZnVgd46qlqSYuuOVS9zJU,40073
76
+ qplot/windows/_help.py,sha256=G80F749dYfKd4wmdxZY5wch4iJgAbnrwMtmG7mtU9xQ,7442
77
+ qplot/windows/_mixed_appearance.py,sha256=5w91csvpiWzkDC-lyM_yQdTHmWZbIG5kKcTYQQ6N-1Y,14564
78
+ qplot/windows/_mixed_plots.py,sha256=QNcb7StkPAO92HQmdm3AWP3t5KWBZ4ZROwBaUwOUNCg,20846
79
+ qplot/windows/_native_averaging.py,sha256=OoXlwjrS2LMjRGzSv9rtB4lWUgoHHcwtsDacLCSZL1Q,15418
80
+ qplot/windows/_native_transforms.py,sha256=T-afZaE4dhFTjcVssxD0Ay32HXJje_tnBvQ9N_VvEeg,27393
81
+ qplot/windows/_plot1d_snap.py,sha256=TktSEQOPsebf2LrENkQ02OSNz9E7z0BiiaPlJlvnEGY,19920
82
+ qplot/windows/_plot1d_traces.py,sha256=lMCYBSvxJ5ieF8wPqFJMhOwzOqpA7oEEUXj1aCubbKM,90208
83
+ qplot/windows/_plot2d_colorbar.py,sha256=JrIlsVLzeT_V3D_OneWntp-5F_1YkeGht0EBtUOTybE,38102
84
+ qplot/windows/_plot2d_colorbar_dialog.py,sha256=0PgBF52uxQGXrigKXu8xTbf5i7773_QNruxfdOt4XWk,29282
85
+ qplot/windows/_plot2d_layers.py,sha256=DZblhbyO3vwbvSddrfljlLhsPAltsze5P55-TuvNfho,89605
86
+ qplot/windows/_plot2d_sweeps.py,sha256=WHb57R_ldKKU4hVyFsQz11H3D_hHbs27yi9dnT9SA5I,24053
87
+ qplot/windows/_plotWin.py,sha256=lAlTKBP93Oqm2fESG5na8RC91Ox_vGRrPNpS8gIU8ZE,75061
88
+ qplot/windows/_plot_actions.py,sha256=uYL8hrB3Y2JXw7P_CDhjBPKClkqzKgp5prgEm4w8FN8,102480
89
+ qplot/windows/_plot_annotation.py,sha256=Nby3p-21Wbak4Z6_16GegPFyVYtl7swtSGU2GpzbR1M,7413
90
+ qplot/windows/_plot_appearance.py,sha256=5siPatEk7lSVN5MEUmH72nFtZ08IHS41hDrdDCv9lnU,10071
91
+ qplot/windows/_plot_axis_scaling.py,sha256=7ydY6yjR-hfxq5LgzTCE5wq4AHxblTmZ3jnVq8TkPe4,63229
92
+ qplot/windows/_plot_data_viewbox.py,sha256=T5UMZ6HHPnfuRqdxUd_scCDpxTDx3DaR2l9Nt8zc77A,3637
93
+ qplot/windows/_plot_drop_axes.py,sha256=HbAGv4Rz6l8QlsvyWlWvhySryTqWfPVSU-at2DMkrsw,10411
94
+ qplot/windows/_plot_export.py,sha256=510J1WmwnLNZYiHQMqPu-RuDof3Om1xeIw8q4YgXDBc,51691
95
+ qplot/windows/_plot_feedback.py,sha256=mjlKBt-Mo4sfxyRfjTjPQTVL34ESLoTSIR5ibOr-iqs,2966
96
+ qplot/windows/_plot_marquee.py,sha256=bM8MgqfRuLeOL1Pzf-wGecnxQvipkXOeO_kLxQJ_eRk,23613
97
+ qplot/windows/_plot_refresh.py,sha256=kqSNBuSV7dJ510mG9EEQsYFbiGXmgqJtx3RLZSaIYfU,35940
98
+ qplot/windows/_plot_source_promotion.py,sha256=Jy3MQI6WzF2yHF-QmigW9Ujg0SkL3SFkwzAs1bSJNGg,8310
99
+ qplot/windows/_plot_state.py,sha256=zGcwYvuzbW26dnX7OIiAd9cP06N3mlJAh7q6Qj10c8U,8612
100
+ qplot/windows/_plot_status.py,sha256=E2vXihUoSUt_eilN1PK0VY4lf3lhMxbwj8mRgr2bs24,4879
101
+ qplot/windows/_plot_tiling.py,sha256=wETDCQ7SlO4Dwj8HrH9-iss5Ydf5VpFUknwrGh1eGNs,1320
102
+ qplot/windows/_plot_transform_labels.py,sha256=aI3eDgWJklL6_SgDQMYYEVfHnwj_QDWbtqDqIfSv9Ic,2241
103
+ qplot/windows/_preferences.py,sha256=-MkS9u985D8sYirI6Wppb1MPGgdoaTyzwenQGDa3J30,29835
104
+ qplot/windows/_refresh_interval.py,sha256=k25WtU5O5e1VWHC7-YQt0f6nQrNCGBR1qV83b7Xgi0Y,6484
105
+ qplot/windows/_run_controls.py,sha256=bKMCNjVsUwQWu2sF9DC7KjOgqTcNGiK4kQLdeZ7f6qc,29781
106
+ qplot/windows/_shortcuts.py,sha256=LPSjVZzQmSOdN5h6KZ9MSG1RLVOCnL5Xxwb6aDWaIy8,1166
107
+ qplot/windows/_svg_export.py,sha256=DzQxvBPm40rBoZrXIkoYDFkAsoxpTKXfnrn8iYCJkJc,9065
108
+ qplot/windows/_trusted_derived_qt.py,sha256=L8AytLvDDs-gTRx53uHn0zTVOzDg8CAqsz-PugTh4gM,69708
109
+ qplot/windows/_window_controls.py,sha256=nKSMoRkSbtybMv8ZKMccChjDkD3KaX9bIqBQbby53AA,12541
110
+ qplot/windows/main.py,sha256=IdqwxNkW7T9BM1QUF60nxQNWMsU_TqkmCfBKnnXL0gM,63400
111
+ qplot/windows/plot1d.py,sha256=IYfeIKdOt5c4mp71RDOXISiQtCFwqF3_U9ttBrBehG8,10849
112
+ qplot/windows/plot2d.py,sha256=hbmBjT6Cju-wH8jrrnVadBgjQGhsmex2QSersFvNXRU,71754
113
+ qplot/windows/_subplots/__init__.py,sha256=Ap-OwFwkdizuY7gNpUDYfdVJoY_dcO3kvGIoRo9L8W0,154
114
+ qplot/windows/_subplots/subplot1d.py,sha256=-W4vQrz_2g29uanp_C71SwqaSdtKThvz7NeHKq-8Ryk,17710
115
+ qplot/windows/_subplots/subplot2d.py,sha256=wF2i_UzWt0gB6-9ASHa8dG5yq0JeGFljXNAxQEuuxf0,32375
116
+ qplot/windows/_widgets/__init__.py,sha256=dNRx5KrMZO1JvHHuKFF_mObW3cuRPE9D3ogpI4yPUoE,459
117
+ qplot/windows/_widgets/_run_formatting.py,sha256=8oIT3d8oWAYZp7ii6vOOamG1Aq7THg_xdMrVLder8xA,11893
118
+ qplot/windows/_widgets/details_tables.py,sha256=jx2DbJ0ywsKnzbkI_e39lVa0ypdfI2zvDcxZYY3gwNk,41586
119
+ qplot/windows/_widgets/dropbox.py,sha256=5lijy1zs6ZVTpp-8f7UdUZjqTEywEo6PgL7bZIHX3nM,9036
120
+ qplot/windows/_widgets/operations.py,sha256=QUw_Sqk5UoZhLfEaW1Eesu2j7MpC7ylkciJc63lRflQ,16451
121
+ qplot/windows/_widgets/preview.py,sha256=8Qx5r7lm8jFURx1oSTE5ca04VukvysDrx2CaRAfKXwE,96566
122
+ qplot/windows/_widgets/run_list_items.py,sha256=yCDXUbutUGGmYI7vIoVJBzXiQT24THwmSUl5dAk4C4U,16837
123
+ qplot/windows/_widgets/toolbar.py,sha256=hdLaQ80VekKnkQgY9ESassiCN1-IxPGuqrFn7rn6Ugg,3834
124
+ qplot/windows/_widgets/treeWidgets.py,sha256=Ir9jkyQOjv56ZPV5nI92Xlolq447TYxo0NML6zB3SI8,93791
125
+ qplotter-1.6.0.dist-info/licenses/LICENSE,sha256=pAF_Uxq42gSBSjDcnzaFQwvCf-oQZc42t0R8u27p9nk,1076
126
+ qplotter-1.6.0.dist-info/METADATA,sha256=8Zakhx2xz4rfgQd7yt95u1eOaCDpDAwj1PgAoHYJj_0,13091
127
+ qplotter-1.6.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
128
+ qplotter-1.6.0.dist-info/entry_points.txt,sha256=qyuJQsN21MFJrhDZJSQ5YJs1MXm546hoXdjH_autJGU,133
129
+ qplotter-1.6.0.dist-info/top_level.txt,sha256=0DiVN2Aw9NMB6RtGe8zXPFDdhyaU1QYwDVRdPiR-xYA,6
130
+ qplotter-1.6.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ qplot = qplot.__main__:run
3
+ qplot-cfg = qplot.configuration.scripts:scripts
4
+ qplot-generate-db = qplot.testdata:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 lairdgrouplancaster
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.
@@ -0,0 +1 @@
1
+ qplot