bec-widgets 1.24.5__py3-none-any.whl → 1.25.1__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.
.gitlab-ci.yml CHANGED
@@ -197,7 +197,13 @@ end-2-end-conda:
197
197
  script:
198
198
  - *clone-repos
199
199
  - *install-os-packages
200
- - conda config --prepend channels conda-forge
200
+ - conda config --show-sources
201
+ - conda config --add channels conda-forge
202
+ - conda config --system --remove channels https://repo.anaconda.com/pkgs/main
203
+ - conda config --system --remove channels https://repo.anaconda.com/pkgs/r
204
+ - conda config --remove channels https://repo.anaconda.com/pkgs/main
205
+ - conda config --remove channels https://repo.anaconda.com/pkgs/r
206
+ - conda config --show-sources
201
207
  - conda config --set channel_priority strict
202
208
  - conda config --set always_yes yes --set changeps1 no
203
209
  - conda create -q -n test-environment python=3.11
@@ -227,6 +233,7 @@ end-2-end-conda:
227
233
  - if: '$CI_PIPELINE_SOURCE == "parent_pipeline"'
228
234
  - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main"'
229
235
  - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "production"'
236
+ - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^pre_release.*$/'
230
237
 
231
238
  semver:
232
239
  stage: Deploy
CHANGELOG.md CHANGED
@@ -1,6 +1,33 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## v1.25.1 (2025-03-24)
5
+
6
+ ### Bug Fixes
7
+
8
+ - **positioner_box**: Fixed motor moving flags for spinner
9
+ ([`be274a1`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/be274a10fc76528e1e5d6b309678c7fb4e9b890e))
10
+
11
+ - **positioner_box**: If possible tweak should use the current setpoint instead of the readback
12
+ ([`e5c9dd2`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/e5c9dd288c571d29722497a2d40b000d1cffb475))
13
+
14
+ ### Continuous Integration
15
+
16
+ - Add e2e job for pre_release branches
17
+ ([`d86ef4e`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/d86ef4e763b321b1c82be71c9f275abb610fed06))
18
+
19
+ - Fix conda channels for PSI policy change
20
+ ([`6cf39b3`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/6cf39b3796f850294705465adfaf6ad25a71461f))
21
+
22
+
23
+ ## v1.25.0 (2025-03-07)
24
+
25
+ ### Features
26
+
27
+ - **waveform**: Add slice handling and reset functionality for async updates
28
+ ([`7cbebbb`](https://gitlab.psi.ch/bec/bec_widgets/-/commit/7cbebbb1f00ea2e2b3678c96b183a877e59c5240))
29
+
30
+
4
31
  ## v1.24.5 (2025-03-06)
5
32
 
6
33
  ### Bug Fixes
PKG-INFO CHANGED
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 1.24.5
3
+ Version: 1.25.1
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -126,6 +126,8 @@ class BECWaveform(BECPlotBase):
126
126
  "label_suffix": "",
127
127
  }
128
128
 
129
+ self._slice_index = None
130
+
129
131
  # Scan segment update proxy
130
132
  self.proxy_update_plot = pg.SignalProxy(
131
133
  self.scan_signal_update, rateLimit=25, slot=self._update_scan_curves
@@ -1252,7 +1254,9 @@ class BECWaveform(BECPlotBase):
1252
1254
  x_data = None
1253
1255
  instruction = metadata.get("async_update", {}).get("type")
1254
1256
  max_shape = metadata.get("async_update", {}).get("max_shape", [])
1255
- for curve in self._curves_data["async"].values():
1257
+ all_async_curves = self._curves_data["async"].values()
1258
+ # for curve in self._curves_data["async"].values():
1259
+ for curve in all_async_curves:
1256
1260
  y_entry = curve.config.signals.y.entry
1257
1261
  x_name = self._x_axis_mode["name"]
1258
1262
  for device, async_data in msg["signals"].items():
@@ -1276,6 +1280,18 @@ class BECWaveform(BECPlotBase):
1276
1280
  curve.setData(x_data, new_data)
1277
1281
  else:
1278
1282
  curve.setData(new_data)
1283
+ elif instruction == "add_slice":
1284
+ current_slice_id = metadata.get("async_update", {}).get("index")
1285
+ data_plot = async_data["value"]
1286
+ if current_slice_id != self._slice_index:
1287
+ self._slice_index = current_slice_id
1288
+ new_data = data_plot
1289
+ else:
1290
+ x_data, y_data = curve.get_data()
1291
+ new_data = np.hstack((y_data, data_plot))
1292
+
1293
+ curve.setData(new_data)
1294
+
1279
1295
  elif instruction == "replace":
1280
1296
  if x_name == "timestamp":
1281
1297
  x_data = async_data["timestamp"]
@@ -1524,6 +1540,10 @@ class BECWaveform(BECPlotBase):
1524
1540
  for curve_id in curve_ids_to_remove:
1525
1541
  self.remove_curve(curve_id)
1526
1542
 
1543
+ def reset(self):
1544
+ self._slice_index = None
1545
+ super().reset()
1546
+
1527
1547
  def clear_all(self):
1528
1548
  sources = list(self._curves_data.keys())
1529
1549
  for source in sources:
@@ -1,6 +1,5 @@
1
1
  import uuid
2
2
  from abc import abstractmethod
3
- from ast import Tuple
4
3
  from typing import Callable, TypedDict
5
4
 
6
5
  from bec_lib.device import Positioner
@@ -140,10 +139,12 @@ class PositionerBoxBase(BECWidget, CompactPopupWidget):
140
139
  if setpoint_val is not None:
141
140
  break
142
141
 
143
- for moving_signal in ["motor_done_move", "motor_is_moving"]:
144
- is_moving = signals.get(f"{device}_{moving_signal}", {}).get("value")
145
- if is_moving is not None:
146
- break
142
+ if f"{device}_motor_done_move" in signals:
143
+ is_moving = not signals[f"{device}_motor_done_move"].get("value")
144
+ elif f"{device}_motor_is_moving" in signals:
145
+ is_moving = signals[f"{device}_motor_is_moving"].get("value")
146
+ else:
147
+ is_moving = None
147
148
 
148
149
  if is_moving is not None:
149
150
  spinner.setVisible(True)
@@ -1,4 +1,4 @@
1
- """ Module for a PositionerBox widget to control a positioner device."""
1
+ """Module for a PositionerBox widget to control a positioner device."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -212,12 +212,34 @@ class PositionerBox(PositionerBoxBase):
212
212
  @SafeSlot()
213
213
  def on_tweak_right(self):
214
214
  """Tweak motor right"""
215
- self.dev[self.device].move(self.step_size, relative=True)
215
+ setpoint = self._get_setpoint()
216
+ if setpoint is None:
217
+ self.dev[self.device].move(self.step_size, relative=True)
218
+ return
219
+ target = setpoint + self.step_size
220
+ self.dev[self.device].move(target, relative=False)
216
221
 
217
222
  @SafeSlot()
218
223
  def on_tweak_left(self):
219
224
  """Tweak motor left"""
220
- self.dev[self.device].move(-self.step_size, relative=True)
225
+ setpoint = self._get_setpoint()
226
+ if setpoint is None:
227
+ self.dev[self.device].move(-self.step_size, relative=True)
228
+ return
229
+ target = setpoint - self.step_size
230
+ self.dev[self.device].move(target, relative=False)
231
+
232
+ def _get_setpoint(self) -> float | None:
233
+ """Get the setpoint of the motor"""
234
+ setpoint = getattr(self.dev[self.device], "setpoint", None)
235
+ if not setpoint:
236
+ setpoint = getattr(self.dev[self.device], "user_setpoint", None)
237
+ if not setpoint:
238
+ return None
239
+ try:
240
+ return float(setpoint.get())
241
+ except Exception:
242
+ return None
221
243
 
222
244
  @SafeSlot()
223
245
  def on_setpoint_change(self):
@@ -23,8 +23,8 @@ class SpinnerWidget(QWidget):
23
23
  self.timer = QTimer(self)
24
24
  self.timer.timeout.connect(self.rotate)
25
25
  self.time = 0
26
- self.duration = 50
27
- self.speed = 50
26
+ self.duration = 40
27
+ self.speed = 40
28
28
  self._started = False
29
29
 
30
30
  def start(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bec_widgets
3
- Version: 1.24.5
3
+ Version: 1.25.1
4
4
  Summary: BEC Widgets
5
5
  Project-URL: Bug Tracker, https://gitlab.psi.ch/bec/bec_widgets/issues
6
6
  Project-URL: Homepage, https://gitlab.psi.ch/bec/bec_widgets
@@ -1,12 +1,12 @@
1
1
  .gitignore,sha256=cMQ1MLmnoR88aMCCJwUyfoTnufzl4-ckmHtlFUqHcT4,3253
2
- .gitlab-ci.yml,sha256=PuL-FmkTHm7qs467Mh9D8quWcEj4tgEA-UUGDieMuWk,8774
2
+ .gitlab-ci.yml,sha256=s8RDN8XxVKa1Rq_MyeZgrYq7-qXKlvoOSfb9krqbl5s,9212
3
3
  .pylintrc,sha256=eeY8YwSI74oFfq6IYIbCqnx3Vk8ZncKaatv96n_Y8Rs,18544
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=qu6q-QB1UAzXW1TvW34P8Fxg7z4qzgzPj64GcNOUutY,233498
5
+ CHANGELOG.md,sha256=VWqpvRWolUlmlouilk1SoQ4dnKFxsvKnXsjD-cWIDZc,234451
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=4P4wQ_dTjPtB0j6ztaBcGPWVyYeDvbPo0EvMEXHvOok,1173
7
+ PKG-INFO,sha256=VVTJOK3kRpwUGUHQfeeix3900I_av8A6fInPxLLBWjo,1173
8
8
  README.md,sha256=KgdKusjlvEvFtdNZCeDMO91y77MWK2iDcYMDziksOr4,2553
9
- pyproject.toml,sha256=jFjyDlhvbrT_dHbirfA8WZLT_zvL0DQNmMpFiJQ8vZs,2540
9
+ pyproject.toml,sha256=QPMn5S9kX0_kmFnGPk0G6-h4Lj0o71bHhsmDi3sJ4rY,2540
10
10
  .git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
11
11
  .gitlab/issue_templates/bug_report_template.md,sha256=gAuyEwl7XlnebBrkiJ9AqffSNOywmr8vygUFWKTuQeI,386
12
12
  .gitlab/issue_templates/documentation_update_template.md,sha256=FHLdb3TS_D9aL4CYZCjyXSulbaW5mrN2CmwTaeLPbNw,860
@@ -111,7 +111,7 @@ bec_widgets/widgets/containers/figure/plots/motor_map/motor_map.py,sha256=G59EmA
111
111
  bec_widgets/widgets/containers/figure/plots/multi_waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
112
112
  bec_widgets/widgets/containers/figure/plots/multi_waveform/multi_waveform.py,sha256=NBVC9mWmeleTfLsfBl1yyMx8L4EgHFcdM9kX20QOJ00,11766
113
113
  bec_widgets/widgets/containers/figure/plots/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
114
- bec_widgets/widgets/containers/figure/plots/waveform/waveform.py,sha256=Xs3f0W8XE4-z2Zz5S6b7YTgikSloVo7G3c38ygk2ylo,57913
114
+ bec_widgets/widgets/containers/figure/plots/waveform/waveform.py,sha256=ih1UQ_CT2ab7CFs0L36qyWrOyidoFCnXue48150f7Do,58720
115
115
  bec_widgets/widgets/containers/figure/plots/waveform/waveform_curve.py,sha256=YctH0W8ns03BzYNaG9CR18_2HaNVbzyr7ua5226He2Y,8735
116
116
  bec_widgets/widgets/containers/layout_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
117
  bec_widgets/widgets/containers/layout_manager/layout_manager.py,sha256=mPKLWp1ZJtr1K59jJWbpDaWUjGr47QG3-nNrEqo6a0E,33811
@@ -147,9 +147,9 @@ bec_widgets/widgets/control/device_control/position_indicator/position_indicator
147
147
  bec_widgets/widgets/control/device_control/position_indicator/register_position_indicator.py,sha256=ZbN5wPv4dhWEAgX9QD1HL7k7y1O5qZHAgj-xZjwFSho,539
148
148
  bec_widgets/widgets/control/device_control/positioner_box/__init__.py,sha256=0vO7JjxKsO6bbxUjdCGYKELFTY0n4Cv8u4Z1i-MhwL0,476
149
149
  bec_widgets/widgets/control/device_control/positioner_box/_base/__init__.py,sha256=IiOglwEwd908gs10ZRF6PHGdbRHw0B-ScAmebtQKhXc,84
150
- bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py,sha256=bxZNAN2hXAdTnQBpQiDrBMaRviMqPmO_UAoyTK94ESE,8775
150
+ bec_widgets/widgets/control/device_control/positioner_box/_base/positioner_box_base.py,sha256=ZsAY5mJMHZpjLgaa_z9INJknbZEVmD8jQ30u-C7uLXQ,8841
151
151
  bec_widgets/widgets/control/device_control/positioner_box/positioner_box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py,sha256=HDRNbS1w2Do4WHs3VmYI-jEbmkpEEeo85UBjVdT-oos,8035
152
+ bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.py,sha256=2nwosz-rsDRaf7gUDxNfydT5e5siiTBo7nVlDotIc5c,8835
153
153
  bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.pyproject,sha256=7966pHdDseaHciaPNEKgdQgbUThSZf5wEDCeAEJh9po,32
154
154
  bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box.ui,sha256=7LZlM9smIqmkvS2KAIDkBamn04mBAkXeG9T1fpKRQe8,6093
155
155
  bec_widgets/widgets/control/device_control/positioner_box/positioner_box/positioner_box_plugin.py,sha256=CKtz61p5uYUh_l30APyhsV3uwJuLFBiBeFZfaOdT0Do,1421
@@ -333,7 +333,7 @@ bec_widgets/widgets/utility/spinbox/decimal_spinbox.py,sha256=cfq6SSATI-Mu7ix6hH
333
333
  bec_widgets/widgets/utility/spinbox/register_bec_spin_box.py,sha256=_whARPM42TCYV_rUBtThGUK7XC1VoIwRn8fVHzxI2pc,476
334
334
  bec_widgets/widgets/utility/spinner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
335
335
  bec_widgets/widgets/utility/spinner/register_spinner_widget.py,sha256=96A13dEcyTgXfc9G0sTdlXYCDcVav8Z2P2eDC95bESQ,484
336
- bec_widgets/widgets/utility/spinner/spinner.py,sha256=6c0fN7mdGzELg4mf_yG08ubses3svb6w0EqMeHDFkIw,2651
336
+ bec_widgets/widgets/utility/spinner/spinner.py,sha256=PvckwA3oWO_QYUI2SFG7gNhAHqvVqrm1rkXWR6UJ_Mk,2651
337
337
  bec_widgets/widgets/utility/spinner/spinner_widget.pyproject,sha256=zzLajGB3DTgVnrSqMey2jRpBlxTq9cBXZL9tWJCKe-I,25
338
338
  bec_widgets/widgets/utility/spinner/spinner_widget_plugin.py,sha256=kRQCOwxPQsFOrJIkSoqq7xdF_VtoRo_b2vOZEr5eXrA,1363
339
339
  bec_widgets/widgets/utility/toggle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -362,8 +362,8 @@ bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.py,sha256=c
362
362
  bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button.pyproject,sha256=Lbi9zb6HNlIq14k6hlzR-oz6PIFShBuF7QxE6d87d64,34
363
363
  bec_widgets/widgets/utility/visual/dark_mode_button/dark_mode_button_plugin.py,sha256=CzChz2SSETYsR8-36meqWnsXCT-FIy_J_xeU5coWDY8,1350
364
364
  bec_widgets/widgets/utility/visual/dark_mode_button/register_dark_mode_button.py,sha256=rMpZ1CaoucwobgPj1FuKTnt07W82bV1GaSYdoqcdMb8,521
365
- bec_widgets-1.24.5.dist-info/METADATA,sha256=4P4wQ_dTjPtB0j6ztaBcGPWVyYeDvbPo0EvMEXHvOok,1173
366
- bec_widgets-1.24.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
367
- bec_widgets-1.24.5.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
368
- bec_widgets-1.24.5.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
369
- bec_widgets-1.24.5.dist-info/RECORD,,
365
+ bec_widgets-1.25.1.dist-info/METADATA,sha256=VVTJOK3kRpwUGUHQfeeix3900I_av8A6fInPxLLBWjo,1173
366
+ bec_widgets-1.25.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
367
+ bec_widgets-1.25.1.dist-info/entry_points.txt,sha256=dItMzmwA1wizJ1Itx15qnfJ0ZzKVYFLVJ1voxT7K7D4,214
368
+ bec_widgets-1.25.1.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
369
+ bec_widgets-1.25.1.dist-info/RECORD,,
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "1.24.5"
7
+ version = "1.25.1"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [