Skip to content

Commit 7e357ab

Browse files
author
Mauko Quiroga
committed
Add test to get_memory_usage
1 parent 9fa7172 commit 7e357ab

File tree

3 files changed

+76
-17
lines changed

3 files changed

+76
-17
lines changed

openfisca_core/data_storage.py

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,13 @@ def put(self, value: numpy.ndarray, period: periods.Period) -> None:
2525
def delete(self, period: Optional[periods.Period] = None) -> None:
2626
...
2727

28+
@abc.abstractmethod
2829
def get_known_periods(self) -> List[periods.Period]:
2930
...
3031

31-
def get_memory_usage(self):
32-
if not self._arrays:
33-
return {
34-
"nb_arrays": 0,
35-
"total_nb_bytes": 0,
36-
"cell_size": numpy.nan,
37-
}
38-
39-
nb_arrays = len(self._arrays)
40-
array = next(iter(self._arrays.values()))
41-
42-
return {
43-
"nb_arrays": nb_arrays,
44-
"total_nb_bytes": array.nbytes * nb_arrays,
45-
"cell_size": array.itemsize,
46-
}
32+
@abc.abstractmethod
33+
def get_memory_usage(self) -> dict:
34+
...
4735

4836

4937
class InMemoryStorage(StorageLike):
@@ -97,6 +85,23 @@ def delete(self, period: Optional[periods.Period] = None) -> None:
9785
def get_known_periods(self) -> List[periods.Period]:
9886
return list(self._arrays.keys())
9987

88+
def get_memory_usage(self) -> dict:
89+
if not self._arrays:
90+
return {
91+
"nb_arrays": 0,
92+
"total_nb_bytes": 0,
93+
"cell_size": numpy.nan,
94+
}
95+
96+
nb_arrays = len(self._arrays)
97+
array = next(iter(self._arrays.values()))
98+
99+
return {
100+
"nb_arrays": nb_arrays,
101+
"total_nb_bytes": array.nbytes * nb_arrays,
102+
"cell_size": array.itemsize,
103+
}
104+
100105

101106
class OnDiskStorage(StorageLike):
102107
"""
@@ -175,9 +180,28 @@ def delete(self, period: Optional[periods.Period] = None) -> None:
175180
def get_known_periods(self) -> List[periods.Period]:
176181
return list(self._files.keys())
177182

183+
def get_memory_usage(self) -> dict:
184+
if not self._files:
185+
return {
186+
"nb_files": 0,
187+
"total_nb_bytes": 0,
188+
"cell_size": numpy.nan,
189+
}
190+
191+
nb_files = len(self._files)
192+
file = next(iter(self._files.values()))
193+
size = os.path.getsize(file)
194+
array = self._decode_file(file)
195+
196+
return {
197+
"nb_files": nb_files,
198+
"total_nb_bytes": size * nb_files,
199+
"cell_size": array.itemsize,
200+
}
201+
178202
def restore(self):
179203
self._files = files = {}
180-
# Restore self._arrays from content of storage_dir.
204+
# Restore self._files from content of storage_dir.
181205
for filename in os.listdir(self.storage_dir):
182206
if not filename.endswith('.npy'):
183207
continue

tests/core/data_storage/test_in_memory_storage.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,16 @@ def test_get_known_periods(storage, value, period):
9898
result = storage.get_known_periods()
9999

100100
assert result == [period]
101+
102+
103+
def test_get_memory_usage(storage, value, period):
104+
storage = storage()
105+
storage.put(value, period)
106+
107+
result = storage.get_memory_usage()
108+
109+
assert result == {
110+
"nb_arrays": 1,
111+
"total_nb_bytes": 8,
112+
"cell_size": 8,
113+
}

tests/core/data_storage/test_on_disk_storage.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,3 +95,25 @@ def test_delete_when_is_eternal(eternal_storage, value):
9595
result = storage.get("qwerty"), storage.get("azerty")
9696

9797
assert result == (None, None)
98+
99+
100+
def test_get_known_periods(storage, value, period):
101+
storage = storage()
102+
storage.put(value, period)
103+
104+
result = storage.get_known_periods()
105+
106+
assert result == [period]
107+
108+
109+
def test_get_memory_usage(storage, value, period):
110+
storage = storage()
111+
storage.put(value, period)
112+
113+
result = storage.get_memory_usage()
114+
115+
assert result == {
116+
"nb_files": 1,
117+
"total_nb_bytes": 136,
118+
"cell_size": 8,
119+
}

0 commit comments

Comments
 (0)