Skip to content

Commit b842e7a

Browse files
authored
Merge pull request #39 from Zhanwei-Liu/main
fix: handle long water delay and split Excel outputs with >1M rows
2 parents aefd897 + dd0fc14 commit b842e7a

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

prepshot/_model/hydro.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ def inflow_rule(
247247
t = h - delay
248248
else:
249249
t = hour[-1] + h - delay
250+
while t < hour[0]:
251+
# when water delay time delay exceeded 24 hours
252+
t += int(24/dt)
250253
up_stream_outflow += model.outflow[ups, t, m, y]
251254
return up_stream_outflow + model.params['inflow'][s, y, m, h]
252255

prepshot/output_data.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ def save_to_excel(
161161
output_filename : str
162162
The name of the output file.
163163
"""
164+
max_rows = 1_000_000
164165
# pylint: disable=abstract-class-instantiated
165166
with pd.ExcelWriter(
166167
f'{output_filename}.xlsx', engine='xlsxwriter'
@@ -170,7 +171,21 @@ def save_to_excel(
170171
df = pd.DataFrame([ds[key].values.max()], columns=[key])
171172
else:
172173
df = ds[key].to_dataframe()
173-
df.to_excel(writer, sheet_name=key, merge_cells=False)
174+
n_rows = len(df)
175+
if n_rows <= max_rows:
176+
df.to_excel(writer, sheet_name=key, merge_cells=False)
177+
else:
178+
logging.info(
179+
"%s has %d rows, split into %d sheets", key, n_rows, int(np.ceil(n_rows/max_rows))
180+
)
181+
n_sheets = int(np.ceil(n_rows/max_rows))
182+
for i in range(n_sheets):
183+
start_row = i * max_rows
184+
end_row = min((i+1) * max_rows, n_rows)
185+
df_part = df.iloc[start_row:end_row]
186+
df_part.to_excel(
187+
writer, sheet_name=f'{key}_{i+1}', merge_cells=False
188+
)
174189

175190

176191
def save_result(model : object) -> None:

0 commit comments

Comments
 (0)