Source code for nwm_region_mgr.formreg.process_config

"""Process configuration to conduct formulation regionalization.

process_config.py

Functions:
    - run_formreg_for_vpu: Run the formulation regionalization process for a given VPU.

"""

import logging
from pathlib import Path

from nwm_region_mgr.formreg import select_formulation as sf
from nwm_region_mgr.formreg import summary_score as ss
from nwm_region_mgr.utils import BaseConfigProcessor

logger = logging.getLogger(__name__)


[docs] class FormulationRegionalizationProcessor(BaseConfigProcessor): """Formulation regionalization processor.""" def run_formreg_for_vpu(self, vpu: str, formulation_file: str) -> None: """Run the formulation regionalization process for a given VPU. Args: vpu (str): The VPU for which to run the formulation regionalization. formulation_file (str): Path to the formulation file for the VPU. """ # set the VPU for processing self.set_vpu(vpu) if not formulation_file: msg = f"No formulation file provided for VPU {vpu}." logger.error(msg) raise ValueError(msg) if Path(formulation_file).exists(): logger.info( f"Formulation file already exists for VPU {vpu}, skipping formulation regionalization." ) return logger.info( f"--------- Processing formulation regionalization for VPU: {vpu} ---------" ) # compute the summary score for the VPU with self.timing_block("compute_summary_score"): df_score = ss.compute_summary_score(self.config, vpu) # select the best formulation based on the summary score and optionally costs with self.timing_block("select_formulation"): sf.select_formulation(self.config, vpu, df_score, self.get_vpu_gdf()) logger.info(f"Formulation regionalization for VPU {vpu} completed.")