docstr: :param exog_transform: The pre-processing transform for exogenous data. Note: resampling is handled separately.
  :param exog_aggregation_policy: The policy to use for aggregating values in exogenous data,
      to ensure it is sampled at the same timestamps as the endogenous data.
  :param exog_missing_value_policy: The policy to use for imputing missing values in exogenous data,
      to ensure it is sampled at the same timestamps as the endogenous data.
docstr_tok: [":","param","exog_transform",":","The","pre-processing","transform","for","exogenous","data",".","Note",":","resampling","is","handled","separately",".",":","param","exog_aggregation_policy",":","The","policy","to","use","for","aggregating","values","in","exogenous","data",",","to","ensure","it","is","sampled","at","the","same","timestamps","as","the","endogenous","data",".",":","param","exog_missing_value_policy",":","The","policy","to","use","for","imputing","missing","values","in","exogenous","data",",","to","ensure","it","is","sampled","at","the","same","timestamps","as","the","endogenous","data","."]
code: def __init__(
      self,
      exog_transform: TransformBase = None,
      exog_aggregation_policy: Union[AggregationPolicy, str] = "Mean",
      exog_missing_value_policy: Union[
          MissingValuePolicy, str
      ] = "ZFill",
      **kwargs,
  ):
      """
      :param exog_transform: The pre-processing transform for exogenous data. Note: resampling is handled separately.
      :param exog_aggregation_policy: The policy to use for aggregating values in exogenous data,
          to ensure it is sampled at the same timestamps as the endogenous data.
      :param exog_missing_value_policy: The policy to use for imputing missing values in exogenous data,
          to ensure it is sampled at the same timestamps as the endogenous data.
      """
      super().__init__(**kwargs)
      if exog_transform is None:
          self.exog_transform = copy.deepcopy(
              self._default_exog_transform
          )
      elif isinstance(exog_transform, dict):
          self.exog_transform = TransformFactory.create(
              **exog_transform
          )
      else:
          self.exog_transform = exog_transform
      self.exog_aggregation_policy = exog_aggregation_policy
      self.exog_missing_value_policy = exog_missing_value_policy
  
imports: from abc import abstractmethod
  import copy
  import logging
  from typing import List, Optional, Tuple, Union
  import numpy
  import pandas
  from scipy.stats import norm
  from merlion.models.base import Config, ModelBase
  from merlion.plot import Figure
  from merlion.transform.base import TransformBase
  from merlion.transform.factory import TransformFactory
  from merlion.transform.normalize import MeanVarNormalize
  from merlion.utils.time_series import to_pd_datetime, to_timestamp, TimeSeries, AggregationPolicy, MissingValuePolicy
label_desc: Use image node_id 1 to create a new ForecasterExogConfig object from inherited base classes: ForecasterConfig with example: obj = ForecasterExogConfig(exog_transform, exog_aggregation_policy, exog_missing_value_policy)