qplotter 1.6.0b3__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.
Files changed (322) hide show
  1. qplotter-1.6.0b3/Agents.md +110 -0
  2. qplotter-1.6.0b3/CHANGELOG.md +666 -0
  3. qplotter-1.6.0b3/CONTRIBUTING.md +306 -0
  4. qplotter-1.6.0b3/LICENSE +21 -0
  5. qplotter-1.6.0b3/MANIFEST.in +35 -0
  6. qplotter-1.6.0b3/PKG-INFO +318 -0
  7. qplotter-1.6.0b3/README.md +273 -0
  8. qplotter-1.6.0b3/docs/architecture.md +824 -0
  9. qplotter-1.6.0b3/docs/assets/qplot-color-scale-dialog.png +0 -0
  10. qplotter-1.6.0b3/docs/assets/qplot-heatmap.png +0 -0
  11. qplotter-1.6.0b3/docs/assets/qplot-line-plot.png +0 -0
  12. qplotter-1.6.0b3/docs/assets/qplot-main-window.png +0 -0
  13. qplotter-1.6.0b3/docs/configuration.md +148 -0
  14. qplotter-1.6.0b3/docs/demo-data.md +170 -0
  15. qplotter-1.6.0b3/docs/distribution.md +587 -0
  16. qplotter-1.6.0b3/docs/troubleshooting.md +397 -0
  17. qplotter-1.6.0b3/docs/trusted-live-reader.md +985 -0
  18. qplotter-1.6.0b3/docs/user-guide.md +584 -0
  19. qplotter-1.6.0b3/pyproject.toml +230 -0
  20. qplotter-1.6.0b3/scripts/README.md +69 -0
  21. qplotter-1.6.0b3/scripts/benchmark_heatmap_aggregation.py +137 -0
  22. qplotter-1.6.0b3/scripts/benchmark_plot_launch.py +242 -0
  23. qplotter-1.6.0b3/scripts/capture_demo_screenshots.py +297 -0
  24. qplotter-1.6.0b3/scripts/liveplot.py +89 -0
  25. qplotter-1.6.0b3/scripts/manual_run.py +22 -0
  26. qplotter-1.6.0b3/scripts/profile_trusted_reads.py +77 -0
  27. qplotter-1.6.0b3/scripts/release.py +336 -0
  28. qplotter-1.6.0b3/scripts/time_stress.py +97 -0
  29. qplotter-1.6.0b3/scripts/validate_compiler_free_install.py +477 -0
  30. qplotter-1.6.0b3/scripts/validate_distribution.py +3825 -0
  31. qplotter-1.6.0b3/setup.cfg +4 -0
  32. qplotter-1.6.0b3/src/qplot/__init__.py +46 -0
  33. qplotter-1.6.0b3/src/qplot/__main__.py +232 -0
  34. qplotter-1.6.0b3/src/qplot/_auxiliary_paths.py +63 -0
  35. qplotter-1.6.0b3/src/qplot/_metadata.py +12 -0
  36. qplotter-1.6.0b3/src/qplot/_repair.py +14 -0
  37. qplotter-1.6.0b3/src/qplot/_shutdown_supervisor.py +4049 -0
  38. qplotter-1.6.0b3/src/qplot/_version.py +12 -0
  39. qplotter-1.6.0b3/src/qplot/_windows_shutdown_job.py +1166 -0
  40. qplotter-1.6.0b3/src/qplot/configuration/__init__.py +3 -0
  41. qplotter-1.6.0b3/src/qplot/configuration/config.py +573 -0
  42. qplotter-1.6.0b3/src/qplot/configuration/config_schema.json +319 -0
  43. qplotter-1.6.0b3/src/qplot/configuration/scripts.py +255 -0
  44. qplotter-1.6.0b3/src/qplot/configuration/themes/__init__.py +13 -0
  45. qplotter-1.6.0b3/src/qplot/configuration/themes/_base.py +579 -0
  46. qplotter-1.6.0b3/src/qplot/configuration/themes/blank.py +17 -0
  47. qplotter-1.6.0b3/src/qplot/configuration/themes/dark.py +54 -0
  48. qplotter-1.6.0b3/src/qplot/configuration/themes/light.py +54 -0
  49. qplotter-1.6.0b3/src/qplot/datahandling/LoadFromDB.py +224 -0
  50. qplotter-1.6.0b3/src/qplot/datahandling/__init__.py +47 -0
  51. qplotter-1.6.0b3/src/qplot/datahandling/_trusted_live_helper.py +812 -0
  52. qplotter-1.6.0b3/src/qplot/datahandling/_trusted_live_protocol.py +1745 -0
  53. qplotter-1.6.0b3/src/qplot/datahandling/database.py +2330 -0
  54. qplotter-1.6.0b3/src/qplot/datahandling/dimensions.py +43 -0
  55. qplotter-1.6.0b3/src/qplot/datahandling/file_identity.py +461 -0
  56. qplotter-1.6.0b3/src/qplot/datahandling/parameter_data.py +149 -0
  57. qplotter-1.6.0b3/src/qplot/datahandling/plot_progress.py +17 -0
  58. qplotter-1.6.0b3/src/qplot/datahandling/qcodes_cache.py +277 -0
  59. qplotter-1.6.0b3/src/qplot/datahandling/qcodes_compat.py +14 -0
  60. qplotter-1.6.0b3/src/qplot/datahandling/readSQL.py +2442 -0
  61. qplotter-1.6.0b3/src/qplot/datahandling/readonly.py +2561 -0
  62. qplotter-1.6.0b3/src/qplot/datahandling/source_activity.py +21 -0
  63. qplotter-1.6.0b3/src/qplot/datahandling/trusted_array_preview.py +127 -0
  64. qplotter-1.6.0b3/src/qplot/datahandling/trusted_derived_cache.py +1605 -0
  65. qplotter-1.6.0b3/src/qplot/datahandling/trusted_derived_rendering.py +868 -0
  66. qplotter-1.6.0b3/src/qplot/datahandling/trusted_heatmap.py +241 -0
  67. qplotter-1.6.0b3/src/qplot/datahandling/trusted_live.py +2808 -0
  68. qplotter-1.6.0b3/src/qplot/datahandling/trusted_live_queries.py +5907 -0
  69. qplotter-1.6.0b3/src/qplot/datahandling/trusted_live_service.py +1894 -0
  70. qplotter-1.6.0b3/src/qplot/datahandling/trusted_live_supervisor.py +2161 -0
  71. qplotter-1.6.0b3/src/qplot/datahandling/trusted_plot.py +283 -0
  72. qplotter-1.6.0b3/src/qplot/datahandling/trusted_presentation.py +1065 -0
  73. qplotter-1.6.0b3/src/qplot/datahandling/trusted_snapshot.py +1132 -0
  74. qplotter-1.6.0b3/src/qplot/datahandling/trusted_work_coordinator.py +2157 -0
  75. qplotter-1.6.0b3/src/qplot/datahandling/trusted_work_scheduler.py +1204 -0
  76. qplotter-1.6.0b3/src/qplot/diagnostics.py +241 -0
  77. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_01_10mb.csv +11 -0
  78. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_02_25mb.csv +14 -0
  79. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_03_50mb.csv +17 -0
  80. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_04_100mb.csv +20 -0
  81. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_05_250mb.csv +23 -0
  82. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_06_500mb.csv +26 -0
  83. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_07_1gb.csv +29 -0
  84. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_08_5gb.csv +32 -0
  85. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_09_10gb.csv +35 -0
  86. qplotter-1.6.0b3/src/qplot/resources/testdata/qplot_test_db_10_30gb.csv +38 -0
  87. qplotter-1.6.0b3/src/qplot/testdata.py +1733 -0
  88. qplotter-1.6.0b3/src/qplot/tools/__init__.py +13 -0
  89. qplotter-1.6.0b3/src/qplot/tools/finite_means.py +114 -0
  90. qplotter-1.6.0b3/src/qplot/tools/general.py +134 -0
  91. qplotter-1.6.0b3/src/qplot/tools/heatmap_geometry.py +381 -0
  92. qplotter-1.6.0b3/src/qplot/tools/operation_registry.py +179 -0
  93. qplotter-1.6.0b3/src/qplot/tools/plot_tools.py +625 -0
  94. qplotter-1.6.0b3/src/qplot/tools/sample_statistics.py +56 -0
  95. qplotter-1.6.0b3/src/qplot/tools/worker.py +2787 -0
  96. qplotter-1.6.0b3/src/qplot/windows/__init__.py +9 -0
  97. qplotter-1.6.0b3/src/qplot/windows/_colorbar.py +422 -0
  98. qplotter-1.6.0b3/src/qplot/windows/_commands.py +523 -0
  99. qplotter-1.6.0b3/src/qplot/windows/_config_persistence.py +123 -0
  100. qplotter-1.6.0b3/src/qplot/windows/_database_actions.py +4904 -0
  101. qplotter-1.6.0b3/src/qplot/windows/_dataset_handle.py +221 -0
  102. qplotter-1.6.0b3/src/qplot/windows/_dragdrop.py +71 -0
  103. qplotter-1.6.0b3/src/qplot/windows/_export_paths.py +1167 -0
  104. qplotter-1.6.0b3/src/qplot/windows/_help.py +169 -0
  105. qplotter-1.6.0b3/src/qplot/windows/_native_averaging.py +173 -0
  106. qplotter-1.6.0b3/src/qplot/windows/_native_transforms.py +389 -0
  107. qplotter-1.6.0b3/src/qplot/windows/_plot1d_snap.py +608 -0
  108. qplotter-1.6.0b3/src/qplot/windows/_plot1d_traces.py +2183 -0
  109. qplotter-1.6.0b3/src/qplot/windows/_plot2d_colorbar.py +1126 -0
  110. qplotter-1.6.0b3/src/qplot/windows/_plot2d_colorbar_dialog.py +786 -0
  111. qplotter-1.6.0b3/src/qplot/windows/_plot2d_layers.py +2197 -0
  112. qplotter-1.6.0b3/src/qplot/windows/_plot2d_sweeps.py +712 -0
  113. qplotter-1.6.0b3/src/qplot/windows/_plotWin.py +1993 -0
  114. qplotter-1.6.0b3/src/qplot/windows/_plot_actions.py +2695 -0
  115. qplotter-1.6.0b3/src/qplot/windows/_plot_appearance.py +276 -0
  116. qplotter-1.6.0b3/src/qplot/windows/_plot_axis_scaling.py +1485 -0
  117. qplotter-1.6.0b3/src/qplot/windows/_plot_export.py +1445 -0
  118. qplotter-1.6.0b3/src/qplot/windows/_plot_feedback.py +110 -0
  119. qplotter-1.6.0b3/src/qplot/windows/_plot_marquee.py +656 -0
  120. qplotter-1.6.0b3/src/qplot/windows/_plot_refresh.py +942 -0
  121. qplotter-1.6.0b3/src/qplot/windows/_plot_state.py +239 -0
  122. qplotter-1.6.0b3/src/qplot/windows/_plot_transform_labels.py +60 -0
  123. qplotter-1.6.0b3/src/qplot/windows/_preferences.py +635 -0
  124. qplotter-1.6.0b3/src/qplot/windows/_refresh_interval.py +70 -0
  125. qplotter-1.6.0b3/src/qplot/windows/_run_controls.py +828 -0
  126. qplotter-1.6.0b3/src/qplot/windows/_shortcuts.py +47 -0
  127. qplotter-1.6.0b3/src/qplot/windows/_subplots/__init__.py +8 -0
  128. qplotter-1.6.0b3/src/qplot/windows/_subplots/subplot1d.py +531 -0
  129. qplotter-1.6.0b3/src/qplot/windows/_subplots/subplot2d.py +918 -0
  130. qplotter-1.6.0b3/src/qplot/windows/_svg_export.py +209 -0
  131. qplotter-1.6.0b3/src/qplot/windows/_trusted_derived_qt.py +1759 -0
  132. qplotter-1.6.0b3/src/qplot/windows/_widgets/__init__.py +23 -0
  133. qplotter-1.6.0b3/src/qplot/windows/_widgets/_run_formatting.py +387 -0
  134. qplotter-1.6.0b3/src/qplot/windows/_widgets/details_tables.py +1119 -0
  135. qplotter-1.6.0b3/src/qplot/windows/_widgets/dropbox.py +290 -0
  136. qplotter-1.6.0b3/src/qplot/windows/_widgets/operations.py +460 -0
  137. qplotter-1.6.0b3/src/qplot/windows/_widgets/preview.py +2997 -0
  138. qplotter-1.6.0b3/src/qplot/windows/_widgets/run_list_items.py +488 -0
  139. qplotter-1.6.0b3/src/qplot/windows/_widgets/toolbar.py +111 -0
  140. qplotter-1.6.0b3/src/qplot/windows/_widgets/treeWidgets.py +2572 -0
  141. qplotter-1.6.0b3/src/qplot/windows/_window_controls.py +413 -0
  142. qplotter-1.6.0b3/src/qplot/windows/main.py +1635 -0
  143. qplotter-1.6.0b3/src/qplot/windows/plot1d.py +311 -0
  144. qplotter-1.6.0b3/src/qplot/windows/plot2d.py +1901 -0
  145. qplotter-1.6.0b3/src/qplotter.egg-info/SOURCES.txt +319 -0
  146. qplotter-1.6.0b3/tests/_artifact_audit.py +86 -0
  147. qplotter-1.6.0b3/tests/_ci_scheduling.py +75 -0
  148. qplotter-1.6.0b3/tests/_window_lifecycle.py +57 -0
  149. qplotter-1.6.0b3/tests/conftest.py +71 -0
  150. qplotter-1.6.0b3/tests/datahandling/_wal_lineage_scenarios.py +939 -0
  151. qplotter-1.6.0b3/tests/datahandling/test_array_record_metadata.py +198 -0
  152. qplotter-1.6.0b3/tests/datahandling/test_database_worker_instance_binding.py +1214 -0
  153. qplotter-1.6.0b3/tests/datahandling/test_dimensions.py +32 -0
  154. qplotter-1.6.0b3/tests/datahandling/test_inferred_planned_counts.py +146 -0
  155. qplotter-1.6.0b3/tests/datahandling/test_integer_record_cache.py +54 -0
  156. qplotter-1.6.0b3/tests/datahandling/test_live_acquired_point_counts.py +193 -0
  157. qplotter-1.6.0b3/tests/datahandling/test_plot_progress.py +78 -0
  158. qplotter-1.6.0b3/tests/datahandling/test_qcodes_cache.py +384 -0
  159. qplotter-1.6.0b3/tests/datahandling/test_read_sql.py +1798 -0
  160. qplotter-1.6.0b3/tests/datahandling/test_read_sql_database_identity.py +195 -0
  161. qplotter-1.6.0b3/tests/datahandling/test_readonly.py +2946 -0
  162. qplotter-1.6.0b3/tests/datahandling/test_snapshot_planned_setpoints.py +103 -0
  163. qplotter-1.6.0b3/tests/datahandling/test_stage5c_real_qcodes.py +1577 -0
  164. qplotter-1.6.0b3/tests/datahandling/test_trusted_array_preview.py +146 -0
  165. qplotter-1.6.0b3/tests/datahandling/test_trusted_array_record_metadata.py +239 -0
  166. qplotter-1.6.0b3/tests/datahandling/test_trusted_database_information.py +51 -0
  167. qplotter-1.6.0b3/tests/datahandling/test_trusted_derived_cache.py +1322 -0
  168. qplotter-1.6.0b3/tests/datahandling/test_trusted_derived_cache_ownership.py +150 -0
  169. qplotter-1.6.0b3/tests/datahandling/test_trusted_derived_live_integration.py +719 -0
  170. qplotter-1.6.0b3/tests/datahandling/test_trusted_derived_queries.py +428 -0
  171. qplotter-1.6.0b3/tests/datahandling/test_trusted_derived_rendering.py +1125 -0
  172. qplotter-1.6.0b3/tests/datahandling/test_trusted_heatmap.py +384 -0
  173. qplotter-1.6.0b3/tests/datahandling/test_trusted_live.py +2692 -0
  174. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_partial_frames.py +303 -0
  175. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_protocol.py +131 -0
  176. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_queries.py +3310 -0
  177. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_result_limits.py +816 -0
  178. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_service.py +1571 -0
  179. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_stage4_integration.py +468 -0
  180. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_supervisor.py +2122 -0
  181. qplotter-1.6.0b3/tests/datahandling/test_trusted_live_worker_integration.py +1545 -0
  182. qplotter-1.6.0b3/tests/datahandling/test_trusted_plot.py +421 -0
  183. qplotter-1.6.0b3/tests/datahandling/test_trusted_presentation.py +479 -0
  184. qplotter-1.6.0b3/tests/datahandling/test_trusted_read_scope.py +158 -0
  185. qplotter-1.6.0b3/tests/datahandling/test_trusted_snapshot.py +555 -0
  186. qplotter-1.6.0b3/tests/datahandling/test_trusted_source_identifiers.py +133 -0
  187. qplotter-1.6.0b3/tests/datahandling/test_trusted_work_coordinator.py +4670 -0
  188. qplotter-1.6.0b3/tests/datahandling/test_trusted_work_scheduler.py +1247 -0
  189. qplotter-1.6.0b3/tests/datahandling/test_wal_lineage_subprocess.py +93 -0
  190. qplotter-1.6.0b3/tests/test_auxiliary_database_protection.py +221 -0
  191. qplotter-1.6.0b3/tests/test_bounded_heatmap_means.py +251 -0
  192. qplotter-1.6.0b3/tests/test_bounded_integer_precision.py +78 -0
  193. qplotter-1.6.0b3/tests/test_ci_artifacts.py +82 -0
  194. qplotter-1.6.0b3/tests/test_ci_scheduling.py +186 -0
  195. qplotter-1.6.0b3/tests/test_compiler_free_install.py +279 -0
  196. qplotter-1.6.0b3/tests/test_config.py +1312 -0
  197. qplotter-1.6.0b3/tests/test_demo_database_safety.py +112 -0
  198. qplotter-1.6.0b3/tests/test_derivative_numeric_ranges.py +253 -0
  199. qplotter-1.6.0b3/tests/test_diagnostics.py +128 -0
  200. qplotter-1.6.0b3/tests/test_distribution_validator.py +531 -0
  201. qplotter-1.6.0b3/tests/test_heatmap_cancellation_residuals.py +60 -0
  202. qplotter-1.6.0b3/tests/test_heatmap_float_means.py +116 -0
  203. qplotter-1.6.0b3/tests/test_heatmap_geometry.py +207 -0
  204. qplotter-1.6.0b3/tests/test_independent_heatmap_extremes.py +72 -0
  205. qplotter-1.6.0b3/tests/test_liveplot_database_safety.py +152 -0
  206. qplotter-1.6.0b3/tests/test_native_fft_mixed_coordinates.py +104 -0
  207. qplotter-1.6.0b3/tests/test_nonuniform_cancellation.py +60 -0
  208. qplotter-1.6.0b3/tests/test_package_import.py +89 -0
  209. qplotter-1.6.0b3/tests/test_packaging_split.py +56 -0
  210. qplotter-1.6.0b3/tests/test_release.py +279 -0
  211. qplotter-1.6.0b3/tests/test_sample_statistics_accuracy.py +51 -0
  212. qplotter-1.6.0b3/tests/test_shutdown_supervisor.py +4886 -0
  213. qplotter-1.6.0b3/tests/test_testdata.py +2645 -0
  214. qplotter-1.6.0b3/tests/test_time_stress_database_safety.py +183 -0
  215. qplotter-1.6.0b3/tests/test_tools.py +1040 -0
  216. qplotter-1.6.0b3/tests/test_windows_ci.py +173 -0
  217. qplotter-1.6.0b3/tests/test_windows_shutdown_job.py +595 -0
  218. qplotter-1.6.0b3/tests/test_worker_array_heatmaps.py +1043 -0
  219. qplotter-1.6.0b3/tests/test_worker_array_measurements.py +177 -0
  220. qplotter-1.6.0b3/tests/test_worker_boolean_heatmap_missing.py +165 -0
  221. qplotter-1.6.0b3/tests/test_worker_complex_heatmaps.py +212 -0
  222. qplotter-1.6.0b3/tests/test_worker_complex_lines.py +26 -0
  223. qplotter-1.6.0b3/tests/test_worker_coordinate_precision.py +163 -0
  224. qplotter-1.6.0b3/tests/test_worker_heatmap_limits.py +232 -0
  225. qplotter-1.6.0b3/tests/test_worker_nonfinite_sql_heatmaps.py +205 -0
  226. qplotter-1.6.0b3/tests/test_worker_shaped_coordinate_validity.py +162 -0
  227. qplotter-1.6.0b3/tests/test_worker_sidecar_identities.py +105 -0
  228. qplotter-1.6.0b3/tests/widgets/test_operations.py +130 -0
  229. qplotter-1.6.0b3/tests/widgets/test_plot_preview_reuse.py +148 -0
  230. qplotter-1.6.0b3/tests/widgets/test_preview_database_instance.py +972 -0
  231. qplotter-1.6.0b3/tests/widgets/test_preview_dragdrop.py +569 -0
  232. qplotter-1.6.0b3/tests/widgets/test_preview_extreme_range.py +95 -0
  233. qplotter-1.6.0b3/tests/widgets/test_preview_placeholders.py +375 -0
  234. qplotter-1.6.0b3/tests/widgets/test_run_details.py +3051 -0
  235. qplotter-1.6.0b3/tests/widgets/test_run_list.py +2162 -0
  236. qplotter-1.6.0b3/tests/widgets/test_themes.py +102 -0
  237. qplotter-1.6.0b3/tests/windows/_trusted_derived_wal_ui.py +132 -0
  238. qplotter-1.6.0b3/tests/windows/test_appearance_swap_cuts.py +169 -0
  239. qplotter-1.6.0b3/tests/windows/test_axis_auto_padding_overflow.py +119 -0
  240. qplotter-1.6.0b3/tests/windows/test_axis_global_auto_validation.py +297 -0
  241. qplotter-1.6.0b3/tests/windows/test_axis_limit_overflow.py +412 -0
  242. qplotter-1.6.0b3/tests/windows/test_axis_limit_precision.py +97 -0
  243. qplotter-1.6.0b3/tests/windows/test_bounded_shutdown.py +952 -0
  244. qplotter-1.6.0b3/tests/windows/test_centering_extremes.py +129 -0
  245. qplotter-1.6.0b3/tests/windows/test_color_scale_locale.py +106 -0
  246. qplotter-1.6.0b3/tests/windows/test_commands.py +111 -0
  247. qplotter-1.6.0b3/tests/windows/test_complex_line_data.py +173 -0
  248. qplotter-1.6.0b3/tests/windows/test_config_transactions.py +670 -0
  249. qplotter-1.6.0b3/tests/windows/test_csv_shared_coordinates.py +58 -0
  250. qplotter-1.6.0b3/tests/windows/test_cut_cursor_integration.py +159 -0
  251. qplotter-1.6.0b3/tests/windows/test_database_information.py +304 -0
  252. qplotter-1.6.0b3/tests/windows/test_database_worker_errors.py +394 -0
  253. qplotter-1.6.0b3/tests/windows/test_derivative_scale.py +68 -0
  254. qplotter-1.6.0b3/tests/windows/test_differentiation_integration.py +510 -0
  255. qplotter-1.6.0b3/tests/windows/test_export_paths.py +1322 -0
  256. qplotter-1.6.0b3/tests/windows/test_filtered_axis_autoscale.py +390 -0
  257. qplotter-1.6.0b3/tests/windows/test_free_cursor_axis_assignment.py +150 -0
  258. qplotter-1.6.0b3/tests/windows/test_heatmap_appearance.py +193 -0
  259. qplotter-1.6.0b3/tests/windows/test_heatmap_color_range.py +322 -0
  260. qplotter-1.6.0b3/tests/windows/test_heatmap_layer_integration.py +292 -0
  261. qplotter-1.6.0b3/tests/windows/test_heatmap_limit_missing_samples.py +113 -0
  262. qplotter-1.6.0b3/tests/windows/test_help_menu.py +100 -0
  263. qplotter-1.6.0b3/tests/windows/test_independent_cancellation_mean.py +87 -0
  264. qplotter-1.6.0b3/tests/windows/test_independent_native_extremes.py +78 -0
  265. qplotter-1.6.0b3/tests/windows/test_limit_integer_integration.py +183 -0
  266. qplotter-1.6.0b3/tests/windows/test_live_array_dtypes.py +193 -0
  267. qplotter-1.6.0b3/tests/windows/test_main_window.py +5576 -0
  268. qplotter-1.6.0b3/tests/windows/test_marquee_statistics_accuracy.py +45 -0
  269. qplotter-1.6.0b3/tests/windows/test_merged_trace_metadata.py +288 -0
  270. qplotter-1.6.0b3/tests/windows/test_native_average_cancellation.py +50 -0
  271. qplotter-1.6.0b3/tests/windows/test_native_averaging.py +228 -0
  272. qplotter-1.6.0b3/tests/windows/test_native_boolean_derivatives.py +60 -0
  273. qplotter-1.6.0b3/tests/windows/test_native_fft_coordinates.py +434 -0
  274. qplotter-1.6.0b3/tests/windows/test_native_fft_dynamic_range.py +153 -0
  275. qplotter-1.6.0b3/tests/windows/test_native_fft_float_precision.py +177 -0
  276. qplotter-1.6.0b3/tests/windows/test_native_fft_integer_precision.py +163 -0
  277. qplotter-1.6.0b3/tests/windows/test_native_float_transforms.py +186 -0
  278. qplotter-1.6.0b3/tests/windows/test_native_integer_transforms.py +337 -0
  279. qplotter-1.6.0b3/tests/windows/test_native_transform_labels.py +537 -0
  280. qplotter-1.6.0b3/tests/windows/test_native_transform_snapping.py +226 -0
  281. qplotter-1.6.0b3/tests/windows/test_nonuniform_gradient_overflow.py +134 -0
  282. qplotter-1.6.0b3/tests/windows/test_numeric_sample_preservation.py +204 -0
  283. qplotter-1.6.0b3/tests/windows/test_numerical_stability.py +309 -0
  284. qplotter-1.6.0b3/tests/windows/test_offset_precision_regressions.py +132 -0
  285. qplotter-1.6.0b3/tests/windows/test_pending_preview_drop.py +82 -0
  286. qplotter-1.6.0b3/tests/windows/test_planned_integer_array_extent.py +229 -0
  287. qplotter-1.6.0b3/tests/windows/test_plot1d.py +3193 -0
  288. qplotter-1.6.0b3/tests/windows/test_plot1d_snap_precision.py +250 -0
  289. qplotter-1.6.0b3/tests/windows/test_plot2d.py +3261 -0
  290. qplotter-1.6.0b3/tests/windows/test_plot2d_layers.py +693 -0
  291. qplotter-1.6.0b3/tests/windows/test_plot_actions.py +455 -0
  292. qplotter-1.6.0b3/tests/windows/test_plot_csv_precision.py +342 -0
  293. qplotter-1.6.0b3/tests/windows/test_plot_dialog_lifecycle.py +196 -0
  294. qplotter-1.6.0b3/tests/windows/test_plot_integration.py +4540 -0
  295. qplotter-1.6.0b3/tests/windows/test_plot_overlay_integration.py +645 -0
  296. qplotter-1.6.0b3/tests/windows/test_plot_progress_ui.py +174 -0
  297. qplotter-1.6.0b3/tests/windows/test_plot_sidecar_binding.py +793 -0
  298. qplotter-1.6.0b3/tests/windows/test_plot_window.py +3841 -0
  299. qplotter-1.6.0b3/tests/windows/test_preferences.py +415 -0
  300. qplotter-1.6.0b3/tests/windows/test_preferences_lifecycle.py +114 -0
  301. qplotter-1.6.0b3/tests/windows/test_preferences_value_preservation.py +118 -0
  302. qplotter-1.6.0b3/tests/windows/test_refresh_interval_precision.py +257 -0
  303. qplotter-1.6.0b3/tests/windows/test_refresh_lifecycle.py +322 -0
  304. qplotter-1.6.0b3/tests/windows/test_run_csv_export_race.py +651 -0
  305. qplotter-1.6.0b3/tests/windows/test_run_csv_mixed_integer_precision.py +139 -0
  306. qplotter-1.6.0b3/tests/windows/test_run_duration_wal.py +187 -0
  307. qplotter-1.6.0b3/tests/windows/test_settings_decoder_limits.py +83 -0
  308. qplotter-1.6.0b3/tests/windows/test_svg_export_integration.py +337 -0
  309. qplotter-1.6.0b3/tests/windows/test_testdata_gui.py +715 -0
  310. qplotter-1.6.0b3/tests/windows/test_tiny_tick_labels.py +127 -0
  311. qplotter-1.6.0b3/tests/windows/test_trusted_derived_live_counts.py +205 -0
  312. qplotter-1.6.0b3/tests/windows/test_trusted_derived_qt.py +2495 -0
  313. qplotter-1.6.0b3/tests/windows/test_trusted_derived_wal_grid_ui.py +432 -0
  314. qplotter-1.6.0b3/tests/windows/test_trusted_derived_wal_snapshot_ui.py +304 -0
  315. qplotter-1.6.0b3/tests/windows/test_trusted_derived_wal_tiers_ui.py +436 -0
  316. qplotter-1.6.0b3/tests/windows/test_trusted_derived_wal_ui.py +570 -0
  317. qplotter-1.6.0b3/tests/windows/test_trusted_live_ui.py +4225 -0
  318. qplotter-1.6.0b3/tests/windows/test_trusted_plot_launch.py +233 -0
  319. qplotter-1.6.0b3/tests/windows/test_unloaded_database_export.py +220 -0
  320. qplotter-1.6.0b3/tests/windows/test_variable_array_records.py +220 -0
  321. qplotter-1.6.0b3/tests/windows/test_visual_smoke.py +81 -0
  322. qplotter-1.6.0b3/tests/windows/test_window_controls.py +199 -0
@@ -0,0 +1,110 @@
1
+ # Project instructions for Codex
2
+
3
+ ## Scope
4
+
5
+ The program is required only to show data generated by QCoDeS. This means for example that only the most recend .db specification needs to be supported.
6
+
7
+ ## Database access invariant
8
+
9
+ qPlot must never write, truncate, replace, rename, or delete an existing QCoDeS main database, its `-wal` file, or its rollback `-journal`. Ordinary viewing must not checkpoint the database, change journal mode, migrate its schema, or otherwise cause database content to be written.
10
+
11
+ For trusted live viewing of a local WAL-mode database, qPlot's pinned SQLite reader may create, open, resize, memory-map, lock, and modify only the exact regular, colocated `<database>-shm` file through SQLite's standard WAL shared-memory operations. Resulting SHM content and timestamp changes are permitted. qPlot must not rename or delete the SHM file, and no application code may write it outside the pinned SQLite VFS.
12
+
13
+ All main-database and WAL handles used by qPlot must remain physically read-only. Reader transactions must be short, bounded, and cancellable so that viewing does not indefinitely delay QCoDeS checkpoints.
14
+
15
+ The sole additional exception is explicit synthetic test-database generation. That workflow may create temporary files and create or atomically replace only the exact output path selected by the user. Replacing an existing file requires explicit user confirmation.
16
+
17
+ For trusted live reading, the selected local database directory and its path components are assumed trusted and are not expected to be concurrently redirected by a hostile actor. qPlot need not resist adversarial namespace substitution. SQLite’s standard handling of the exact -shm, including permission-mode normalization such as POSIX fchmod, is permitted. Trusted live reading must run unprivileged.
18
+
19
+ ## Settings compatibility
20
+
21
+ Backward compatibility with older qPlot settings formats is not required. The small user base does not justify additional compatibility complexity.
22
+
23
+ Do not add settings migrations or support for legacy settings formats unless explicitly requested. When the settings schema changes, resetting incompatible settings to current defaults is acceptable; the application
24
+ should still start normally.
25
+
26
+ Continue validating current settings and saving them safely. This policy applies only to qPlot settings and does not relax the database-access invariant or measurement-data correctness requirements.
27
+
28
+ ## Python environment
29
+
30
+ Always use the project virtual environment for Python commands. If the
31
+ environment is activated, use `python -m ...`; otherwise call the environment's
32
+ Python executable directly.
33
+
34
+ On Windows:
35
+ - Prefer `.venv\Scripts\python.exe` if the environment lives inside the
36
+ repository.
37
+ - In local checkouts where the environment is next to the repository, use
38
+ `..\.venv\Scripts\python.exe`.
39
+ - Use the selected venv Python with `-m pytest` instead of bare `pytest`.
40
+ - Use the selected venv Python with `-m pip` instead of bare `pip`.
41
+
42
+ On macOS/Linux:
43
+ - Use `.venv-mac/bin/python` if the environment is not already activated.
44
+ - Use the selected venv Python with `-m pytest` instead of bare `pytest`.
45
+ - Use the selected venv Python with `-m pip` instead of bare `pip`.
46
+
47
+ Do not try the system Python first.
48
+ Do not run tests with bare `pytest`; run them through the appropriate venv Python for the current OS.
49
+
50
+ ## Test commands
51
+
52
+ Use these commands when relevant:
53
+
54
+ Windows:
55
+ ```powershell
56
+ python -m pytest
57
+ ```
58
+
59
+ macOS/Linux:
60
+ ```bash
61
+ python -m pytest
62
+ ```
63
+ ## After code changes
64
+
65
+ If you modify application code, before the final response:
66
+
67
+ 1. Run the relevant automated tests.
68
+ 2. If the change affects runtime behavior or UI, start qPlot from the project venv.
69
+
70
+ On Windows, prefer:
71
+
72
+ ```powershell
73
+ ..\.venv\Scripts\python.exe -m qplot
74
+ ```
75
+
76
+ On macOS/Linux, prefer:
77
+
78
+ ```bash
79
+ .venv-mac/bin/python -m qplot
80
+ ```
81
+
82
+ ## Matplotlib cache
83
+
84
+ On macOS, prefix every Python command that may import Matplotlib with the same
85
+ writable cache directory:
86
+
87
+ ```bash
88
+ MPLCONFIGDIR=/private/tmp/qplot-matplotlib-cache .venv-mac/bin/python -m pytest
89
+ ```
90
+
91
+ Reuse this exact cache directory; do not create a fresh temporary directory for
92
+ each run. The first invocation may build the font cache once, but subsequent
93
+ runs should reuse it. Set `MPLCONFIGDIR` on each command invocation because
94
+ separate Codex shell commands may not share exported environment variables.
95
+
96
+ For automated qPlot startup smoke checks, use:
97
+
98
+ ```bash
99
+ QT_QPA_PLATFORM=offscreen MPLCONFIGDIR=/private/tmp/qplot-matplotlib-cache .venv-mac/bin/python -m qplot
100
+ ```
101
+
102
+ Omit `QT_QPA_PLATFORM=offscreen` when a visible manual UI check is required.
103
+
104
+ ## GitHub publishing
105
+
106
+ Do not use the GitHub CLI (`gh`) or require `gh auth` for repository work.
107
+
108
+ Use the configured Git remote and credentials for `git fetch`, `git push`, and tag pushes. Use the connected GitHub app for pull-request operations.
109
+
110
+ If GitHub release creation is needed but unavailable through the connected app, stop and ask for direction; do not fall back to `gh`.