Skip to content

Commit a323de8

Browse files
committed
Wave: Revert cdip reader and test changes
These changes were a reaction to failing tests, but it is likely that the failing tests were not caused by this code specifically, but pandas 3.0 updates. This reverts these changes back to the develop branch as they are likely unnecessary for the tests to pass when pandas is pinned below 3.0
1 parent 9a1c0dc commit a323de8

2 files changed

Lines changed: 79 additions & 62 deletions

File tree

mhkit/tests/wave/io/test_cdip.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import pytz
88
import os
99

10+
1011
testdir = dirname(abspath(__file__))
1112
datadir = normpath(join(testdir, "..", "..", "..", "..", "examples", "data", "wave"))
1213

@@ -128,19 +129,19 @@ def test_request_parse_workflow_multiyear(self):
128129
expected_index0 = datetime(year1, 1, 1)
129130
expected_index_final = datetime(year2, 12, 31)
130131

131-
wave1D = data["wave"]
132-
self.assertEqual(wave1D.index[0].floor("D").to_pydatetime(), expected_index0)
132+
wave1D = data["data"]["wave"]
133+
self.assertEqual(wave1D.index[0].floor("d").to_pydatetime(), expected_index0)
133134

134135
self.assertEqual(
135-
wave1D.index[-1].floor("D").to_pydatetime(), expected_index_final
136+
wave1D.index[-1].floor("d").to_pydatetime(), expected_index_final
136137
)
137138

138-
for key, wave2D in data["wave2D"].items():
139+
for key, wave2D in data["data"]["wave2D"].items():
139140
self.assertEqual(
140-
wave2D.index[0].floor("D").to_pydatetime(), expected_index0
141+
wave2D.index[0].floor("d").to_pydatetime(), expected_index0
141142
)
142143
self.assertEqual(
143-
wave2D.index[-1].floor("D").to_pydatetime(), expected_index_final
144+
wave2D.index[-1].floor("d").to_pydatetime(), expected_index_final
144145
)
145146

146147
def test_plot_boxplot(self):
@@ -158,7 +159,7 @@ def test_plot_boxplot(self):
158159
)
159160

160161
plt.figure()
161-
wave.graphics.plot_boxplot(data["wave"]["waveHs"])
162+
wave.graphics.plot_boxplot(data["data"]["wave"]["waveHs"])
162163
plt.savefig(filename, format="png")
163164
plt.close()
164165

@@ -181,9 +182,9 @@ def test_plot_compendium(self):
181182

182183
plt.figure()
183184
wave.graphics.plot_compendium(
184-
data["wave"]["waveHs"],
185-
data["wave"]["waveTp"],
186-
data["wave"]["waveDp"],
185+
data["data"]["wave"]["waveHs"],
186+
data["data"]["wave"]["waveTp"],
187+
data["data"]["wave"]["waveDp"],
187188
)
188189
plt.savefig(filename, format="png")
189190
plt.close()

mhkit/wave/io/cdip.py

Lines changed: 68 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -310,72 +310,88 @@ def request_parse_workflow(
310310
nc.variables["metaStationName"][:].compressed().tobytes().decode("utf-8")
311311
)
312312

313-
if years is not None:
314-
start_date = []
315-
end_date = []
313+
multiyear = False
314+
if years:
316315
if isinstance(years, int):
317-
years = [years]
318-
for year in years:
319-
start_date.append(datetime.datetime(year, 1, 1, tzinfo=pytz.UTC))
320-
end_date.append(datetime.datetime(year + 1, 1, 1, tzinfo=pytz.UTC))
321-
else:
322-
start_date = [start_date]
323-
end_date = [end_date]
324-
325-
data = {"metadata": {}}
326-
multiyear_data = {}
327-
for start, end in zip(start_date, end_date):
328-
# Check the cache for each individual year
329-
hash_params = f"{station_number}-{parameters}-{start}-{end}"
330-
year_data, _, _ = handle_caching(
316+
start_date = datetime.datetime(years, 1, 1, tzinfo=pytz.UTC)
317+
end_date = datetime.datetime(years + 1, 1, 1, tzinfo=pytz.UTC)
318+
elif isinstance(years, list):
319+
if len(years) == 1:
320+
start_date = datetime.datetime(years[0], 1, 1, tzinfo=pytz.UTC)
321+
end_date = datetime.datetime(years[0] + 1, 1, 1, tzinfo=pytz.UTC)
322+
else:
323+
multiyear = True
324+
if not multiyear:
325+
# Check the cache first
326+
hash_params = f"{station_number}-{parameters}-{start_date}-{end_date}"
327+
data, _, _ = handle_caching(
331328
hash_params,
332329
cache_dir,
333330
cache_content={"data": None, "metadata": None, "write_json": None},
334331
)
335-
if year_data is None:
336-
new_data = get_netcdf_variables(
332+
333+
if data is None:
334+
data = get_netcdf_variables(
337335
nc,
338-
start_date=start,
339-
end_date=end,
336+
start_date=start_date,
337+
end_date=end_date,
340338
parameters=parameters,
341339
all_2D_variables=all_2D_variables,
342340
silent=silent,
343341
)
344-
year_data = new_data["data"]
345-
# If waveFrequency is in the metadata, move it to the top level of metadata
346-
if "wave" in new_data["metadata"]:
347-
if "waveFrequency" in new_data["metadata"]["wave"]:
348-
new_data["metadata"]["waveFrequency"] = new_data["metadata"][
349-
"wave"
350-
]["waveFrequency"]
351-
new_data["metadata"].pop("wave")
352-
# Cache the individual year's data
353342
handle_caching(
354343
hash_params,
355344
cache_dir,
356-
cache_content={
357-
"data": year_data,
358-
"metadata": new_data["metadata"],
359-
"write_json": None,
360-
},
345+
cache_content={"data": data, "metadata": None, "write_json": None},
361346
)
362-
year = start.year
363-
multiyear_data[year] = year_data
364-
365-
for data_key in year_data.keys():
366-
if data_key.endswith("2D"):
367-
data[data_key] = {}
368-
for data_key2D in year_data[data_key].keys():
369-
data_list = []
370-
for year in multiyear_data.keys():
371-
data2D = multiyear_data[year][data_key][data_key2D]
372-
data_list.append(data2D)
373-
data[data_key][data_key2D] = pd.concat(data_list)
374-
else:
375-
data_list = [
376-
multiyear_data[year][data_key] for year in multiyear_data.keys()
377-
]
378-
data[data_key] = pd.concat(data_list)
347+
348+
else:
349+
data = {"data": {}, "metadata": {}}
350+
multiyear_data = {}
351+
for year in years:
352+
start_date = datetime.datetime(year, 1, 1, tzinfo=pytz.UTC)
353+
end_date = datetime.datetime(year + 1, 1, 1, tzinfo=pytz.UTC)
354+
355+
# Check the cache for each individual year
356+
hash_params = f"{station_number}-{parameters}-{start_date}-{end_date}"
357+
year_data, _, _ = handle_caching(
358+
hash_params,
359+
cache_dir,
360+
cache_content={"data": None, "metadata": None, "write_json": None},
361+
)
362+
if year_data is None:
363+
year_data = get_netcdf_variables(
364+
nc,
365+
start_date=start_date,
366+
end_date=end_date,
367+
parameters=parameters,
368+
all_2D_variables=all_2D_variables,
369+
silent=silent,
370+
)
371+
# Cache the individual year's data
372+
handle_caching(
373+
hash_params,
374+
cache_dir,
375+
cache_content={
376+
"data": year_data,
377+
"metadata": None,
378+
"write_json": None,
379+
},
380+
)
381+
multiyear_data[year] = year_data["data"]
382+
383+
for data_key in year_data["data"].keys():
384+
if data_key.endswith("2D"):
385+
data["data"][data_key] = {}
386+
for data_key2D in year_data["data"][data_key].keys():
387+
data_list = []
388+
for year in years:
389+
data2D = multiyear_data[year][data_key][data_key2D]
390+
data_list.append(data2D)
391+
data["data"][data_key][data_key2D] = pd.concat(data_list)
392+
else:
393+
data_list = [multiyear_data[year][data_key] for year in years]
394+
data["data"][data_key] = pd.concat(data_list)
379395

380396
if buoy_name:
381397
try:

0 commit comments

Comments
 (0)