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,111 @@
1
+ """Finite sample summaries without offset loss or intermediate overflow."""
2
+
3
+ import math
4
+ from fractions import Fraction
5
+
6
+ import numpy as np
7
+
8
+
9
+ def _scalar(value):
10
+ return value.item() if isinstance(value, np.generic) else value
11
+
12
+
13
+ def sample_fraction(value):
14
+ """Retain a recorded scalar exactly, including NumPy extended floats."""
15
+ if isinstance(value, np.floating):
16
+ # longdouble.item() can remain a NumPy scalar, which Fraction does
17
+ # not accept. Its integer ratio also preserves wider mantissas.
18
+ return Fraction(*value.as_integer_ratio())
19
+ return Fraction(_scalar(value))
20
+
21
+
22
+ def _binary_total(values, check_cancelled):
23
+ """Accumulate recorded integers/binary floats without per-cell Fractions."""
24
+ total, denominator = 0, 1
25
+ if values.dtype.kind in "iu":
26
+ flat = values.ravel()
27
+ for start in range(0, values.size, 65536):
28
+ check_cancelled()
29
+ total += np.sum(flat[start:start + 65536], dtype=object)
30
+ return int(total), denominator
31
+ for index, value in enumerate(values.flat):
32
+ if index % 1024 == 0:
33
+ check_cancelled()
34
+ if isinstance(value, (int, np.integer)):
35
+ total += int(value) * denominator
36
+ elif isinstance(value, (float, np.floating)):
37
+ numerator, divisor = value.as_integer_ratio()
38
+ # Binary denominators are powers of two, so their maximum is
39
+ # their common denominator. Neither source nor total is rounded.
40
+ if divisor > denominator:
41
+ total *= divisor // denominator
42
+ denominator = divisor
43
+ total += numerator * (denominator // divisor)
44
+ else:
45
+ return None
46
+ return total, denominator
47
+
48
+
49
+ def finite_mean(values, *, check_cancelled=lambda: None):
50
+ """Mean finite recorded samples, retaining integer and decimal precision."""
51
+ values = np.asarray(values)
52
+
53
+ def samples():
54
+ for index, value in enumerate(values.flat):
55
+ if index % 1024 == 0:
56
+ check_cancelled()
57
+ yield value
58
+
59
+ if values.dtype.kind in "iuO":
60
+ exact = _binary_total(values, check_cancelled)
61
+ if exact is not None:
62
+ total, denominator = exact
63
+ check_cancelled()
64
+ return float(Fraction(total, denominator * values.size))
65
+ return float(sum((sample_fraction(v) for v in samples()), Fraction()) / values.size)
66
+ try:
67
+ return math.fsum(samples()) / values.size
68
+ except OverflowError:
69
+ # The sum can exceed float's range even though its mean cannot.
70
+ return float(sum((Fraction(float(v)) for v in samples()), Fraction()) / values.size)
71
+
72
+
73
+ def finite_standard_deviation(values):
74
+ """Population deviation with subtraction before conversion and scaling."""
75
+ values = np.asarray(values).ravel()
76
+ if values.dtype.kind in "iuO":
77
+ anchor = sample_fraction(values[0])
78
+ try:
79
+ if values.dtype.kind in "iu":
80
+ # Python-integer subtraction cannot wrap at signed/unsigned
81
+ # endpoints and converts only the already-centered values.
82
+ shifted = (values.astype(object) - anchor.numerator).astype(float)
83
+ else:
84
+ def difference(value):
85
+ if isinstance(value, (int, np.integer)):
86
+ numerator, denominator = int(value), 1
87
+ elif isinstance(value, (float, np.floating)):
88
+ numerator, denominator = value.as_integer_ratio()
89
+ else:
90
+ return float(sample_fraction(value) - anchor)
91
+ return (numerator * anchor.denominator - anchor.numerator * denominator) / (
92
+ denominator * anchor.denominator)
93
+ shifted = np.fromiter((difference(v) for v in values), dtype=float, count=values.size)
94
+ except OverflowError:
95
+ shifted = np.full(values.shape, np.inf)
96
+ else:
97
+ values = values.astype(np.float64, copy=False)
98
+ with np.errstate(over="ignore", invalid="ignore"):
99
+ shifted = values - values[0]
100
+ if not np.all(np.isfinite(shifted)):
101
+ # Opposite finite extremes can have unrepresentable differences.
102
+ scale = float(np.max(np.abs(values.astype(float))))
103
+ normalized = values.astype(float) / scale
104
+ else:
105
+ scale = float(np.max(np.abs(shifted)))
106
+ if scale == 0:
107
+ return 0.
108
+ normalized = shifted / scale
109
+ centered = normalized - finite_mean(normalized)
110
+ variance = math.fsum(float(v) * float(v) for v in centered) / values.size
111
+ return math.sqrt(variance) * scale