From e9eca59d5c459c9c4068c9643dc5ab5c749850dc Mon Sep 17 00:00:00 2001 From: Mohcine Chraibi Date: Tue, 24 Mar 2026 10:11:07 +0100 Subject: [PATCH 1/3] Add test to reproduce bug --- tests/acceptance_tests/test_devc.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/acceptance_tests/test_devc.py b/tests/acceptance_tests/test_devc.py index 9a86a63..ac42b57 100644 --- a/tests/acceptance_tests/test_devc.py +++ b/tests/acceptance_tests/test_devc.py @@ -1,6 +1,15 @@ +import os from fdsreader import Simulation +TEST_DIR = os.path.dirname(os.path.abspath(__file__)) + def test_devc(): - sim = Simulation("./steckler_data") + sim = Simulation(os.path.join(TEST_DIR, "../cases/steckler_data")) assert abs(sim.devices["TC_Door"][0].data - 23.58) < 1e-6 + + +def test_clear_cache_with_line_devices(): + """Test that clear_cache works with line DEVC devices (issue #104).""" + sim = Simulation(os.path.join(TEST_DIR, "../cases/devc_data")) + sim.clear_cache() From 1f2c3d7f65386efa5b1709395eced72370238bdb Mon Sep 17 00:00:00 2001 From: Mohcine Chraibi Date: Tue, 24 Mar 2026 10:20:23 +0100 Subject: [PATCH 2/3] Added clear_cache() method to DeviceCollection --- fdsreader/devc/device_collection.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/fdsreader/devc/device_collection.py b/fdsreader/devc/device_collection.py index e54f195..61c0893 100644 --- a/fdsreader/devc/device_collection.py +++ b/fdsreader/devc/device_collection.py @@ -1,4 +1,3 @@ - from typing import Iterable, Union, List from fdsreader.devc import Device @@ -6,8 +5,7 @@ class DeviceCollection(FDSDataCollection): - """Collection of :class:`Device` objects. Offers additional functionality for working on devices using pandas. - """ + """Collection of :class:`Device` objects. Offers additional functionality for working on devices using pandas.""" def __init__(self, *devices: Iterable[Device]): super().__init__(*devices) @@ -16,16 +14,32 @@ def __getitem__(self, key) -> Union[Device, List[Device]]: if type(key) == int: return self._elements[key] else: - return next(devc for devc in self._elements if (devc.id == key if type(devc) == Device else devc[0].id == key)) + return next( + devc + for devc in self._elements + if (devc.id == key if type(devc) == Device else devc[0].id == key) + ) def __contains__(self, value: Union[Device, str]): - id_matching = any((devc.id == value if type(devc) == Device else devc[0].id == value) for devc in self._elements) + id_matching = any( + (devc.id == value if type(devc) == Device else devc[0].id == value) + for devc in self._elements + ) return value in self._elements or id_matching + def clear_cache(self): + """Remove all data from the internal cache that has been loaded so far to free memory.""" + for devc in self._elements: + if type(devc) == Device: + devc.clear_cache() + elif type(devc) == list: + for list_devc in devc: + list_devc.clear_cache() + def to_pandas_dataframe(self): - """Returns a pandas DataFrame with device-IDs as column names and device data as column values. - """ + """Returns a pandas DataFrame with device-IDs as column names and device data as column values.""" import pandas as pd + data = dict() for devc in self: if type(devc) == Device: @@ -35,4 +49,3 @@ def to_pandas_dataframe(self): for i, list_devc in enumerate(devc): data[list_devc.id + "_" + str(i)] = list_devc.data return pd.DataFrame(data) - From a1dff2040dc4a4e726e12eaa65f08ca9d233a894 Mon Sep 17 00:00:00 2001 From: Mohcine Chraibi Date: Tue, 24 Mar 2026 10:29:12 +0100 Subject: [PATCH 3/3] assert type of devices --- tests/acceptance_tests/test_devc.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/acceptance_tests/test_devc.py b/tests/acceptance_tests/test_devc.py index ac42b57..80d3bd0 100644 --- a/tests/acceptance_tests/test_devc.py +++ b/tests/acceptance_tests/test_devc.py @@ -12,4 +12,8 @@ def test_devc(): def test_clear_cache_with_line_devices(): """Test that clear_cache works with line DEVC devices (issue #104).""" sim = Simulation(os.path.join(TEST_DIR, "../cases/devc_data")) + assert any(isinstance(d, list) for d in sim.devices), ( + "Test data should contain line devices" + ) + sim.clear_cache()