Source code for el1xr_opt.Modules.oM_LoadCase
# Script for creating load cases in oM
import os
import datetime
from typing import Optional, Dict, Union
[docs]
def load_case(
directory: Optional[str] = None,
case: Optional[str] = None,
date: Optional[Union[str, datetime.datetime]] = None,
solver: str = "highs",
rawresults: bool = False,
plots: bool = False,
indlog: bool = False,
) -> Dict[str, Union[str, datetime.datetime, bool]]:
"""
Create and validate a load case configuration.
Args:
dir (str, optional): Directory where the case is located.
Defaults to "../site-packages/el1xr_opt".
case (str, optional): Name of the case to load. Defaults to "Grid1".
date (datetime or str, optional): Date information.
If string, it should follow "%Y-%m-%d %H:%M".
Defaults to current datetime (rounded to minute).
solver (str, optional): Solver to be used. Defaults to "highs".
rawresults (bool, optional): Whether to save raw results. Defaults to False.
plots (bool, optional): Whether to generate plots. Defaults to False.
indlog (bool, optional): Whether to enable individual logging. Defaults to False.
Returns:
dict: A dictionary containing the case configuration.
"""
# Set defaults
dir_name = directory or os.path.abspath(
os.path.join(os.path.dirname(__file__), "../")
)
case_name = case or "Grid1"
# Handle date input
if date is None:
date_info = datetime.datetime.now().replace(second=0, microsecond=0)
elif isinstance(date, str):
try:
date_info = datetime.datetime.strptime(date, "%Y-%m-%d %H:%M")
except ValueError:
raise ValueError("Date string must follow format '%Y-%m-%d %H:%M'")
elif isinstance(date, datetime.datetime):
date_info = date
else:
raise TypeError("date must be None, str, or datetime.datetime")
# Validate case path
case_path = os.path.join(dir_name, case_name)
if not os.path.exists(case_path):
raise FileNotFoundError(f"The specified case directory does not exist: {case_path}")
# Build configuration dictionary
case_data = {
"dir": dir_name,
"case": case_name,
"solver": solver,
"date": date_info,
"rawresults": rawresults,
"plots": plots,
"indlog": indlog,
}
return case_data