Skip to content

Commit

Permalink
Add test for SUEWS configuration YAML-DataFrame conversion cycle
Browse files Browse the repository at this point in the history
- Implemented a new test method to verify SUEWS configuration conversion between YAML and DataFrame formats
- Checks preservation of key configuration attributes during conversion
- Ensures DataFrame conversion maintains the original configuration structure
  • Loading branch information
sunt05 committed Feb 5, 2025
1 parent d3e43e4 commit 63c18ad
Showing 1 changed file with 37 additions and 13 deletions.
50 changes: 37 additions & 13 deletions test/test_supy.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,8 @@ def test_is_supy_sim_save_multi_grid_par(self):

# only print to screen on macOS due incompatibility on Windows
if platform.system() == "Darwin":
# capturedOutput = io.StringIO() # Create StringIO object
# sys.stdout = capturedOutput # and redirect stdout.
# Call function.
n_grid = df_state_init_multi.index.size
print(f"Running time: {t_end-t_start:.2f} s for {n_grid} grids")
# sys.stdout = sys.__stdout__ # Reset redirect.
# Now works as before.
# print("Captured:\n", capturedOutput.getvalue())

test_non_empty = np.all(
[
Expand Down Expand Up @@ -188,13 +182,6 @@ def test_is_flag_test_working(self):
# df_state_init, df_forcing_tstep = sp.load_SampleData()
# df_forcing_part = df_forcing_tstep.iloc[: 12*8]

# # output group for testing
# list_grp_test = [
# "SUEWS",
# # "DailyState",
# "RSL",
# ]

# # single-step results
# df_output_s, df_state_s = sp.run_supy(
# df_forcing_part, df_state_init, save_state=True
Expand Down Expand Up @@ -428,3 +415,40 @@ def test_water_balance_closed(self):
test_dif = (ser_totalstore_change-ser_water_balance).abs().max() < 1e-6
self.assertTrue(test_dif)

def test_config_conversion_cycle(self):
"""Test if SUEWS configuration can be correctly converted between YAML and DataFrame formats."""
print("\n========================================")
print("Testing YAML-DataFrame-YAML conversion cycle for SUEWS configuration...")

# Get path to sample config from supy package
import supy as sp
from pathlib import Path
path_sample_config = Path(sp.__file__).parent / "sample_run" / "sample_config.yml"

# Load sample config from YAML
config_orig = sp.util._config.init_config_from_yaml(path_sample_config)

# Convert to DataFrame
df_state = config_orig.to_df_state()

# Convert back to config object
config_reconst = sp.util._config.SUEWSConfig.from_df_state(df_state)

# Compare the two configs
# We'll compare a few key attributes as a basic test
self.assertEqual(config_orig.name, config_reconst.name)
self.assertEqual(config_orig.description, config_reconst.description)
self.assertEqual(config_orig.model.control.tstep, config_reconst.model.control.tstep)
self.assertEqual(
config_orig.model.physics.netradiationmethod.value,
config_reconst.model.physics.netradiationmethod.value
)
self.assertEqual(
config_orig.site[0].properties.lat.value,
config_reconst.site[0].properties.lat.value
)

# Test if DataFrame conversion preserves structure
df_state_2 = config_reconst.to_df_state()
pd.testing.assert_frame_equal(df_state, df_state_2)

0 comments on commit 63c18ad

Please sign in to comment.