Skip to content

Commit 5c5d79a

Browse files
authored
Add units to ResultsIndex (#330)
* Expose data unit for ResultIndex * Update test * Improve coverage * Improve readability
1 parent 7ee22a4 commit 5c5d79a

File tree

4 files changed

+65
-9
lines changed

4 files changed

+65
-9
lines changed

src/ansys/dpf/post/index.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,31 @@ class ResultsIndex(Index):
165165
def __init__(
166166
self,
167167
values: List[str],
168+
units: Union[List[Union[str, None]], None] = None,
168169
):
169170
"""Initiate this class."""
170-
super().__init__(name=ref_labels.results, values=values, scoping=None)
171+
# Initialize results labels
172+
result_values = values
173+
if units is None:
174+
# If no units, initialize as list of None
175+
units = [None] * len(values)
176+
else:
177+
# Truncate units if longer than values
178+
if len(units) > len(values):
179+
units = units[: len(values)]
180+
# Update result labels with unit when necessary
181+
for i, unit in enumerate(units):
182+
result_values[i] += f" ({unit})" if unit is not None else ""
183+
# If units was shorter than values, extend with Nones
184+
if len(units) < len(values):
185+
units.extend([None] * (len(values) - len(units)))
186+
self._units = units
187+
super().__init__(name=ref_labels.results, values=result_values, scoping=None)
188+
189+
@property
190+
def units(self) -> List[str]:
191+
"""Return the list of units for this index."""
192+
return self._units
171193

172194
def __repr__(self):
173195
"""Representation of the Index."""

src/ansys/dpf/post/simulation.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,14 +523,15 @@ def _create_dataframe(self, fc, location, columns, comp, base_name, disp_wf=None
523523
message=f"Returned Dataframe with columns {columns} is empty.",
524524
category=UserWarning,
525525
)
526+
unit = fc[0].unit
526527
comp_index = None
527528
if comp is not None:
528529
comp_index = CompIndex(values=comp)
529530
row_indexes = [MeshIndex(location=location, fc=fc)]
530531
if comp_index is not None:
531532
row_indexes.append(comp_index)
532533
column_indexes = [
533-
ResultsIndex(values=[base_name]),
534+
ResultsIndex(values=[base_name], units=[unit]),
534535
SetIndex(values=fc.get_available_ids_for_label("time")),
535536
]
536537
label_indexes = []

tests/test_dataframe.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,15 @@ def test_dataframe_animate(transient_rst):
139139

140140
def test_dataframe_repr(df):
141141
ref = (
142-
"DataFrame<index=MultiIndex<[MeshIndex<name=\"node_ids\", dtype=<class 'int'>>, "
143-
"Index<name=\"components\", dtype=<class 'str'>>]>, columns=MultiIndex<[ResultIndex<['U']>, " # noqa: E501
144-
"SetIndex<values=[1]>]>>"
142+
"DataFrame<"
143+
"index=MultiIndex<["
144+
"MeshIndex<name=\"node_ids\", dtype=<class 'int'>>, "
145+
"Index<name=\"components\", dtype=<class 'str'>>"
146+
"]>, "
147+
"columns=MultiIndex<["
148+
"ResultIndex<['U (m)']>, "
149+
"SetIndex<values=[1]>"
150+
"]>>"
145151
)
146152
assert repr(df) == ref
147153

@@ -151,7 +157,7 @@ def test_dataframe_str(transient_rst):
151157
df = simulation.displacement(all_sets=True)
152158
print(df)
153159
ref = """
154-
results U ...
160+
results U (m) ...
155161
set_ids 1 2 3 4 5 6 ...
156162
node_ids components ...
157163
525 X 0.0000e+00 4.8506e-05 2.3022e-04 6.5140e-04 1.4812e-03 2.9324e-03 ...
@@ -166,7 +172,7 @@ def test_dataframe_str(transient_rst):
166172
df2 = df.select(node_ids=525)
167173
print(df2)
168174
ref = """
169-
results U ...
175+
results U (m) ...
170176
set_ids 1 2 3 4 5 6 ...
171177
node_ids components ...
172178
525 X 0.0000e+00 4.8506e-05 2.3022e-04 6.5140e-04 1.4812e-03 2.9324e-03 ...
@@ -179,7 +185,7 @@ def test_dataframe_str(transient_rst):
179185
print(df)
180186
print(df._fc[0].get_entity_data_by_id(391))
181187
ref = """
182-
results S
188+
results S (Pa)
183189
set_ids 35
184190
element_ids components
185191
391 XX (1) -3.2780e+05
@@ -194,7 +200,7 @@ def test_dataframe_str(transient_rst):
194200
df2 = df.select(components="YY")
195201
print(df2)
196202
ref = """
197-
results S
203+
results S (Pa)
198204
set_ids 35
199205
element_ids components
200206
391 YY (1) 1.3601e+06

tests/test_index.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from ansys.dpf.post.index import ResultsIndex
2+
3+
4+
class TestResultsIndex:
5+
def test_results_index(self):
6+
result_index = ResultsIndex(values=["U", "V", "A"], units=None)
7+
ref = "ResultIndex<['U', 'V', 'A']>"
8+
assert repr(result_index) == ref
9+
result_index = ResultsIndex(values=["U", "V", "A"], units=["m", "m/s"])
10+
ref = "ResultIndex<['U (m)', 'V (m/s)', 'A']>"
11+
assert repr(result_index) == ref
12+
result_index = ResultsIndex(values=["U", "V", "A"], units=["m", None, "m/s^2"])
13+
ref = "ResultIndex<['U (m)', 'V', 'A (m/s^2)']>"
14+
assert repr(result_index) == ref
15+
result_index = ResultsIndex(values=["U", "V", "A"], units=["m", "m/s", "m/s^2"])
16+
ref = "ResultIndex<['U (m)', 'V (m/s)', 'A (m/s^2)']>"
17+
assert repr(result_index) == ref
18+
19+
def test_results_index_units(self):
20+
result_index = ResultsIndex(values=["U", "V", "A"], units=None)
21+
assert result_index.units == [None, None, None]
22+
result_index = ResultsIndex(values=["U", "V", "A"], units=["m", "m/s"])
23+
assert result_index.units == ["m", "m/s", None]
24+
result_index = ResultsIndex(values=["U", "V", "A"], units=["m", None, "m/s^2"])
25+
assert result_index.units == ["m", None, "m/s^2"]
26+
result_index = ResultsIndex(values=["U", "V", "A"], units=["m", "m/s", "m/s^2"])
27+
assert result_index.units == ["m", "m/s", "m/s^2"]

0 commit comments

Comments
 (0)