Source code for wntr.library.model_library

from os.path import abspath, dirname, basename, join, isdir
import glob
from wntr.network import WaterNetworkModel

libdir = dirname(abspath(str(__file__)))

[docs] class ModelLibrary: """ Model library class to manage water network models. Parameters ---------- directories : list of str Directories containing INP files. """
[docs] def __init__(self, directories=None): if directories is None: directories = [join(libdir, "networks")] self._directories = [] for directory in directories: self.add_directory(directory)
def _build_model_library(self): """ Scan directories for INP files. Files with the same name will override previous files (based on the order of directories) """ self._model_library = {} for directory in self._directories: for file in glob.glob(join(directory, '*.inp')): model_name = basename(file).split('.')[0] self._model_library[model_name] = join(directory, file) @property def model_name_list(self): """ Return a list of model names in the library. Returns ------- list of str """ return list(self._model_library.keys()) @property def directories(self): return self._directories
[docs] def add_directory(self, directory): assert isinstance(directory, str) if not isdir(directory): raise ValueError(f"Provided path '{directory}' is not a valid directory.") self._directories.append(abspath(directory)) self._build_model_library()
[docs] def get_filepath(self, name): """ Get the file path of a model by its name. Parameters ---------- name : str Name of the model. Returns ------- str File path of the model's INP file. """ if name not in self._model_library: raise KeyError(f"Model '{name}' not found in the library.") return self._model_library[name]
[docs] def get_model(self, name): """ Get a WaterNetworkModel by its name. Parameters ---------- name : str Name of the model. Returns ------- WaterNetworkModel """ if name not in self._model_library: raise KeyError(f"Model '{name}' not found in the library.") return WaterNetworkModel(self._model_library[name])