From e6a369a44e782058a3f3325b36b9d74758912bef Mon Sep 17 00:00:00 2001 From: Dani Bodor Date: Thu, 7 Mar 2024 16:45:46 +0100 Subject: [PATCH 1/5] add `_sliced_copy` method to continousdata --- eitprocessing/continuous_data/__init__.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/eitprocessing/continuous_data/__init__.py b/eitprocessing/continuous_data/__init__.py index 43fed526f..8c042e5db 100644 --- a/eitprocessing/continuous_data/__init__.py +++ b/eitprocessing/continuous_data/__init__.py @@ -174,3 +174,26 @@ def locked(self) -> bool: def loaded(self) -> bool: """Return whether the data was loaded from disk, or derived from elsewhere.""" return len(self.derived_from) == 0 + + def _sliced_copy( + self, + start_index: int, + end_index: int, + label: str, + ) -> Self: + # TODO: check correct implementation + cls = self.__class__ + time = self.time[start_index:end_index] + values = self.values[start_index:end_index] + description = f"Slice ({start_index}-{end_index}) of <{self.description}>" + + return cls( + label=label, + name=self.name, + unit=self.unit, + category=self.category, + description=description, + derived_from=[*self.derived_from, self], + time=time, + values=values, + ) From 1b86be70cb16636116bcd97dc4025c5415a58f83 Mon Sep 17 00:00:00 2001 From: Dani Bodor Date: Thu, 7 Mar 2024 16:55:49 +0100 Subject: [PATCH 2/5] hotfix `_convert_medibus_data` there was no `time` given to the medibus data and `loaded` was still used in this method, while this attribute is no longer used in `ContinuousData` --- eitprocessing/eit_data/draeger.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/eitprocessing/eit_data/draeger.py b/eitprocessing/eit_data/draeger.py index 8a005d6cb..3a4a57b4a 100644 --- a/eitprocessing/eit_data/draeger.py +++ b/eitprocessing/eit_data/draeger.py @@ -113,7 +113,7 @@ def _from_path( ( continuous_data_collection, sparse_data_collections, - ) = cls._convert_medibus_data(medibus_data) + ) = cls._convert_medibus_data(medibus_data, time) return ( eit_data_collection, @@ -127,6 +127,7 @@ def _from_path( def _convert_medibus_data( cls, medibus_data: NDArray, + time: NDArray, ) -> tuple[DataCollection, DataCollection]: continuous_data_collection = DataCollection(ContinuousData) sparse_data_collection = DataCollection(SparseData) @@ -138,7 +139,7 @@ def _convert_medibus_data( name=field_info.signal_name, description=f"Continuous {field_info.signal_name} data loaded from file", unit=field_info.unit, - loaded=True, + time=time, values=data, category=field_info.signal_name, ) From 8a3624440610d8e63502d0933ccadabe71c3665a Mon Sep 17 00:00:00 2001 From: Dani Bodor Date: Fri, 8 Mar 2024 11:39:06 +0100 Subject: [PATCH 3/5] hotfix set attr method --- eitprocessing/continuous_data/__init__.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/eitprocessing/continuous_data/__init__.py b/eitprocessing/continuous_data/__init__.py index 8c042e5db..44704d88d 100644 --- a/eitprocessing/continuous_data/__init__.py +++ b/eitprocessing/continuous_data/__init__.py @@ -45,11 +45,14 @@ def __post_init__(self) -> None: self.lock("time") def __setattr__(self, attr: str, value: Any): # noqa: ANN401 - old_value = getattr(self, attr) - if isinstance(old_value, np.ndarray) and old_value.flags["WRITEABLE"] is False: - msg = f"Attribute '{attr}' is locked and can't be overwritten." - raise AttributeError(msg) - super().__setattr__(self, attr, value) + try: + old_value = getattr(self, attr) + if isinstance(old_value, np.ndarray) and old_value.flags["WRITEABLE"] is False: + msg = f"Attribute '{attr}' is locked and can't be overwritten." + raise ValueError(msg) + except AttributeError: + pass + super().__setattr__(attr, value) def copy( self, From 7351fdf0699bc72eda2f96898e329c8b3d68ecf7 Mon Sep 17 00:00:00 2001 From: Peter Somhorst Date: Mon, 11 Mar 2024 09:04:00 +0100 Subject: [PATCH 4/5] Fix try/except to allow appropriate AttributeError --- eitprocessing/continuous_data/__init__.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/eitprocessing/continuous_data/__init__.py b/eitprocessing/continuous_data/__init__.py index 44704d88d..b6b243035 100644 --- a/eitprocessing/continuous_data/__init__.py +++ b/eitprocessing/continuous_data/__init__.py @@ -47,11 +47,12 @@ def __post_init__(self) -> None: def __setattr__(self, attr: str, value: Any): # noqa: ANN401 try: old_value = getattr(self, attr) - if isinstance(old_value, np.ndarray) and old_value.flags["WRITEABLE"] is False: - msg = f"Attribute '{attr}' is locked and can't be overwritten." - raise ValueError(msg) except AttributeError: pass + else: + if isinstance(old_value, np.ndarray) and old_value.flags["WRITEABLE"] is False: + msg = f"Attribute '{attr}' is locked and can't be overwritten." + raise AttributeError(msg) super().__setattr__(attr, value) def copy( From a6ded814ed11961f97e43bc972b96ab99abc0b08 Mon Sep 17 00:00:00 2001 From: Peter Somhorst Date: Mon, 11 Mar 2024 09:05:31 +0100 Subject: [PATCH 5/5] Add `__len__()` to ContinuousData --- eitprocessing/continuous_data/__init__.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eitprocessing/continuous_data/__init__.py b/eitprocessing/continuous_data/__init__.py index b6b243035..4c09eb22d 100644 --- a/eitprocessing/continuous_data/__init__.py +++ b/eitprocessing/continuous_data/__init__.py @@ -179,6 +179,9 @@ def loaded(self) -> bool: """Return whether the data was loaded from disk, or derived from elsewhere.""" return len(self.derived_from) == 0 + def __len__(self): + return len(self.time) + def _sliced_copy( self, start_index: int,