Skip to content

Commit afa40a2

Browse files
committed
Replace for-loops with pandas in check_designinput
1 parent 4cc2aa9 commit afa40a2

2 files changed

Lines changed: 14 additions & 11 deletions

File tree

src/semeio/fmudesign/_excel2dict.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -168,18 +168,18 @@ def _find_onebyone_input_sheet(input_filename: str) -> str:
168168

169169
def _check_designinput(dsgn_input: pd.DataFrame) -> None:
170170
"""Checks for valid input in designinput sheet"""
171+
# Filter out rows where sensname has no value
172+
valid_sensnames = dsgn_input["sensname"].dropna()
173+
duplicated_mask = valid_sensnames.duplicated()
171174

172-
# Check for duplicate sensnames
173-
sensitivity_names = []
174-
for row in dsgn_input.itertuples():
175-
if _has_value(row.sensname):
176-
if row.sensname in sensitivity_names:
177-
raise ValueError(
178-
f"sensname '{row.sensname}' was found on more than one row in designinput "
179-
"sheet. Two sensitivities can not share the same sensname. "
180-
"Please correct this and rerun"
181-
)
182-
sensitivity_names.append(row.sensname)
175+
if duplicated_mask.any():
176+
# Find the first duplicate to include in error message
177+
duplicate_name = valid_sensnames[duplicated_mask].iloc[0]
178+
raise ValueError(
179+
f"sensname '{duplicate_name}' was found on more than one row in designinput "
180+
"sheet. Two sensitivities can not share the same sensname. "
181+
"Please correct this and rerun"
182+
)
183183

184184

185185
def _check_for_mixed_sensitivities(sens_name: str, sens_group: pd.DataFrame) -> None:

tests/fmudesign/test_excel2dict.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,9 @@ def test_duplicate_sensname_exception(tmpdir, monkeypatch):
8787
["sensname", "numreal", "type", "param_name"],
8888
["rms_seed", "", "seed"],
8989
["rms_seed", "", "seed"],
90+
[np.nan, "", "seed"], # NaN sensname - should be ignored
91+
["", "", "seed"], # Empty string - should be ignored
92+
["valid_name", "", "seed"], # Valid unique name
9093
]
9194
)
9295
monkeypatch.chdir(tmpdir)

0 commit comments

Comments
 (0)