Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions fdsreader/devc/device_collection.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@

from typing import Iterable, Union, List

from fdsreader.devc import Device
from fdsreader.utils.data import FDSDataCollection


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)
Expand All @@ -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:
Expand All @@ -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)

15 changes: 14 additions & 1 deletion tests/acceptance_tests/test_devc.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
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"))
assert any(isinstance(d, list) for d in sim.devices), (
"Test data should contain line devices"
)

sim.clear_cache()