code: def data_merge_calendar(
      self, df: pd.DataFrame, calendars_list: List[pd.Timestamp]
  ) -> pd.DataFrame:
      # calendars
      calendars_df = pd.DataFrame(
          data=calendars_list, columns=[self.date_field_name]
      )
      calendars_df[self.date_field_name] = calendars_df[
          self.date_field_name
      ].astype("datetime64[ns]")
      cal_df = calendars_df[
          (
              calendars_df[self.date_field_name]
              >= df[self.date_field_name].min()
          )
          & (
              calendars_df[self.date_field_name]
              <= df[self.date_field_name].max()
          )
      ]
      # align index
      cal_df.set_index(self.date_field_name, inplace=True)
      df.set_index(self.date_field_name, inplace=True)
      r_df = df.reindex(cal_df.index)
      return r_df
  
imports: import abc
  import shutil
  import traceback
  from pathlib import Path
  from typing import Iterable, List, Union
  from functools import partial
  from concurrent.futures import ThreadPoolExecutor, as_completed, ProcessPoolExecutor
  import fire
  import numpy
  import pandas
  from tqdm import tqdm
  from loguru import logger
  from qlib.utils import fname_to_code, code_to_fname
label_desc: Use image node_id 12 for calling the DumpDataBase obj's underlying member method code with example usage: obj.data_merge_calendar(df, calendars_list) and returns: r_df