Source code for pycif.plugins.models.lmdz_ico.io.inputs.ensemble

from __future__ import annotations

from typing import Any


[docs] def ensemble_trid( self, trid: tuple[str, str], datastore: dict[tuple[str, str], Any], ) -> tuple[str, str]: """Replace 'spec' in the tracer id 'trid' (component, spec) by the suitable species name when in ensemble mode or do nothing when not in ensemble mode Args: self: Model trid (str, str): Tracer id (component, species) datastore (dict (str, str) -> Any): Datastore Returns: (str, str): New tracer id """ comp, spec = trid ref_trid = trid # Update ref_trid if in ensemble mode if hasattr(self, "perturbed_species"): if spec in self.perturbed_species: ref_trcr = self.perturbed_species[spec] ref_trid = (comp, ref_trcr) # If spec not explicitly defined in datastore, fetch general component # information if available if trid not in datastore: # If trid is a perturbed species, needs to reformat name to fit # LMDZ naming convention for perturbed species for comp_name, tracer_name in datastore.keys(): if trid == (comp_name, tracer_name.replace("__sample#", "_")): # Tracer 'trid' is a perturbated species, reformatting is id trid = (comp_name, tracer_name) break else: # Branch here when exiting the for loop without breaking, i.e. if # trid is not a perturbated species # If trid comes from an unperturbed input in ensemble mode, the # info is fetched from the reference species if ref_trid in datastore: trid = ref_trid elif (comp, "") in datastore: trid = (comp, "") return trid