[docs]@dataclasses.dataclassclassDerivedForcingsConfig:"""Configuration for computing derived forcings. Parameters: insolation: Optional configuration for computing derived insolation. """insolation:InsolationConfig|None=None
[docs]defbuild(self,dataset_info:DatasetInfo)->"ForcingDeriver":"""Build a ForcingDeriver insstance with the current configuration. Args: dataset_info: Dataset information associated with the Stepper. """ifself.insolationisnotNone:timestep=dataset_info.timestephorizontal_coordinates=dataset_info.horizontal_coordinatesinsolation_deriver=self.insolation.build(timestep,horizontal_coordinates)else:insolation_deriver=Noneforcing_deriver=ForcingDeriver(insolation_deriver)returnforcing_deriver
[docs]defupdate_requirements(self,requirements:DataRequirements)->DataRequirements:"""Add or remove names from the requirements associated with derived forcings. Args: requirements: The requirements to update. """ifself.insolationisnotNone:requirements=self.insolation.update_requirements(requirements)returnrequirements
[docs]defvalidate_replacement(self,replacement:"DerivedForcingsConfig")->None:"""Check that a replacement configuration is compatible with the current. Args: replacement: The configuration replacing the current configuration. Raises: ValueError If the ``insolation_name`` of the replacement configuration is incompatible with the current. """ifself.insolationisnotNoneandreplacement.insolationisnotNone:original_insolation_name=self.insolation.insolation_nameiforiginal_insolation_name!=replacement.insolation.insolation_name:raiseValueError(f"Replacement insolation_name should match the original "f"insolation_name ({original_insolation_name!r}). Got "f"{replacement.insolation.insolation_name!r}.")
classForcingDeriver:"""A class orchestrating computation of derived forcings. Parameters: insolation: Optional insolation for computing derived insolation. """def__init__(self,insolation:Insolation|None):self.insolation=insolationdef__call__(self,forcing:BatchData)->BatchData:"""Compute the derived forcings. Args: forcing: Data to compute the derived forcings from. Returns: Data updated to include derived forcing variables. """forcing_dict=forcing.dataifself.insolationisnotNone:forcing_dict=self.insolation.compute(forcing.time,forcing_dict)returnBatchData(data=forcing_dict,time=forcing.time,labels=forcing.labels,horizontal_dims=forcing.horizontal_dims,epoch=forcing.epoch,n_ensemble=forcing.n_ensemble,)