code: def add_event_window_multi(
      event_df_dict,
      time_col,
      label_col,
      time_delta="1D",
      pre_num=1,
      post_num=1,
      pre_post_num_dict=None,
  ):
      """For a given dictionary of events data frames with a time_col and label_col
      it adds shifted events prior and after the given events
      For example if the event data frame includes the row '2019-12-25, Christmas' as a row
      the function will produce dataframes with the events '2019-12-24, Christmas' and '2019-12-26, Christmas' if
      pre_num and post_num are 1 or more.
  
      Parameters
      ----------
      event_df_dict: `dict` [`str`, `pandas.DataFrame`]
          A dictionary of events data frames
          with each having two columns: ``time_col`` and ``label_col``.
      time_col: `str`
          The column with the timestamp of the events.
          This can be daily but does not have to be.
      label_col : `str`
          The column with labels for the events.
      time_delta : `str`, default "1D"
          The amount of the shift for each unit specified by a string
          e.g. '1D' stands for one day delta
      pre_num : `int`, default 1
          The number of events to be added prior to the given event for each event in df.
      post_num: `int`, default 1
          The number of events to be added after to the given event for each event in df.
      pre_post_num_dict : `dict` [`str`, (`int`, `int`)] or None, default None
          Optionally override ``pre_num`` and ``post_num`` for each key in ``event_df_dict``.
          For example, if ``event_df_dict`` has keys "US" and "India", this parameter
          can be set to ``pre_post_num_dict = {"US": [1, 3], "India": [1, 2]}``,
          denoting that the "US" ``pre_num`` is 1 and ``post_num`` is 3, and "India" ``pre_num`` is 1
          and ``post_num`` is 2. Keys not specified by ``pre_post_num_dict`` use the default given by
          ``pre_num`` and ``post_num``.
  
      Returns
      -------
      df : `dict` [`str`, `pandas.DataFrame`]
          A dictionary of dataframes for each needed shift. For example if pre_num=2 and post_num=3.
          2 + 3 = 5 data frames will be stored in the return dictionary.
      """
      if pre_post_num_dict is None:
          pre_post_num_dict = {}
  
      shifted_df_dict = {}
  
      for event_df_key, event_df in event_df_dict.items():
          if event_df_key in pre_post_num_dict.keys():
              pre_num0 = pre_post_num_dict[event_df_key][0]
              post_num0 = pre_post_num_dict[event_df_key][1]
          else:
              pre_num0 = pre_num
              post_num0 = post_num
  
          df_dict0 = add_event_window(
              df=event_df,
              time_col=time_col,
              label_col=label_col,
              time_delta=time_delta,
              pre_num=pre_num0,
              post_num=post_num0,
              events_name=event_df_key,
          )
  
          shifted_df_dict.update(df_dict0)
  
      return shifted_df_dict
  
imports: import math
  from datetime import datetime
  from datetime import timedelta
  import numpy
  import pandas
  import pytz
  from holidays_ext import get_holidays
  from pandas.tseries.frequencies import to_offset
  from scipy.special import expit
  from greykite.common import constants
  from greykite.common.python_utils import split_offset_str
label_desc: Use image node_id 25 for calling a global function with example usage: add_event_window_multi(event_df_dict, time_col, label_col, time_delta, pre_num, post_num, pre_post_num_dict) and returns: shifted_df_dict