code: def add_vix(self, data):
      with ThreadPoolExecutor() as executor:
          future = executor.submit(self.download_and_clean_data)
          cleaned_vix = future.result()
  
      vix = cleaned_vix[["timestamp", "close"]]
  
      merge_column = "date" if "date" in data.columns else "timestamp"
  
      vix = vix.rename(
          columns={"timestamp": merge_column, "close": "VIXY"}
      )  # Change column name dynamically
  
      data = data.copy()
      data = data.merge(
          vix, on=merge_column
      )  # Use the dynamic column name for merging
      data = data.sort_values([merge_column, "tic"]).reset_index(
          drop=True
      )
  
      return data
  
imports: from __future__ import annotations
  from concurrent.futures import ProcessPoolExecutor
  from concurrent.futures import ThreadPoolExecutor
  import alpaca_trade_api
  import exchange_calendars
  import numpy
  import pandas
  import pytz
  from stockstats import StockDataFrame
label_desc: Use image node_id 8 for calling the AlpacaProcessor obj's underlying member method code with example usage: obj.add_vix(data) and returns: data