Source code for pycif.plugins.models.template.ini_mapper

import datetime
import numpy as np
from logging import info

from ....utils.classes.setup import Setup
from ....utils.classes.domains import Domain

from ....utils.check.errclass import PluginError


[docs] def ini_mapper(model, general_mapper={}, backup_comps={}, transforms_order=[], ref_transform="", transform_name="", all_transforms=None, **kwargs): """Build the data-flow mapper for the template model. Constructs a minimal mapper controlled by ``input_arguments`` flags: * ``empty_mapper=True`` — returns an empty mapper (no inputs/outputs). * ``only_outputs=True`` — returns a mapper with concentration outputs only. * Otherwise — returns a mapper with both flux inputs and concentration outputs. Args: model: template plugin instance. general_mapper (dict): unused. backup_comps (dict): unused. transforms_order (list): unused. ref_transform (str): unused. transform_name (str): unused. all_transforms: unused. **kwargs: unused. Returns: dict: mapper with ``inputs``, ``outputs``, and optionally ``outputs2inputs``. """ if model.empty_mapper: mapper = {"inputs": {}, "outputs": {}} if model.only_outputs: output_intervals = { ddi: np.append( model.tstep_dates[ddi][:-1, np.newaxis], model.tstep_dates[ddi][1:, np.newaxis], axis=1) for ddi in model.tstep_dates} mapper = { "inputs": {}, "outputs": { ("concs", spec): { "force_loadout": True, "input_dates": output_intervals, "domain": model.domain, "sampled": True, "sparse_data": False, } for spec in model.chemistry.acspecies.attributes }} # Update the transform so it can start the pipeline getattr(all_transforms, transform_name).start_pipe = True if model.include_fluxes: input_intervals = { ddi: np.append( model.input_dates[ddi][:, np.newaxis], model.input_dates[ddi][:, np.newaxis] + datetime.timedelta(hours=1), axis=1) for ddi in model.input_dates} mapper["inputs"] = { ("flux", spec): { "input_dates": input_intervals, "force_dump": True, "sparse_data": False, "sampled": False } for spec in model.chemistry.emis_species.attributes } # Update the transform so it can start the pipeline getattr(all_transforms, transform_name).start_pipe = True info("The model was initialized with the following mapper:") info(mapper) return mapper