From d1609cb4eecc7084a1a5a07152ecd90e6db788dd Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Sun, 10 Jul 2022 20:35:07 +0200 Subject: [PATCH] added Collection adjustable --- slic/core/adjustable/__init__.py | 1 + slic/core/adjustable/collection.py | 35 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 slic/core/adjustable/collection.py diff --git a/slic/core/adjustable/__init__.py b/slic/core/adjustable/__init__.py index 080582a0..635ffca5 100644 --- a/slic/core/adjustable/__init__.py +++ b/slic/core/adjustable/__init__.py @@ -8,6 +8,7 @@ from .pvadjustable import PVAdjustable from .pvenumadjustable import PVEnumAdjustable from .combined import Combined +from .collection import Collection from .converted import Converted diff --git a/slic/core/adjustable/collection.py b/slic/core/adjustable/collection.py new file mode 100644 index 00000000..f2a7cdc6 --- /dev/null +++ b/slic/core/adjustable/collection.py @@ -0,0 +1,35 @@ +from .adjustable import Adjustable + + +class Collection(Adjustable): + + def __init__(self, ID, adjs, **kwargs): + super().__init__(ID, **kwargs) + self.adjs = adjs + + def get_current_value(self): + return tuple(a.get_current_value() for a in self.adjs) + + def set_target_value(self, *vals): + adjs = self.adjs + _check_sizes(vals, adjs) + tasks = [a.set_target_value(v) for a, v in zip(adjs, vals)] + for t in tasks: + t.wait() + + def is_moving(self): + return any(a.is_moving() for a in self.adjs) + + def __repr__(self): + return "\n".join(repr(a) for a in self.adjs) + + + +def _check_sizes(vals, adjs): + nvals = len(vals) + nadjs = len(adjs) + if nvals != nadjs: + raise ValueError(f"number of values ({nvals}) is not equal to number of adjustables ({nadjs})") + + +