code: def _fix_bad_stock_split(self, df, interval, tz_exchange):
      # Repair idea is to look for BIG daily price changes that closely match the
      # most recent stock split ratio. This indicates Yahoo failed to apply a new
      # stock split to old price data.
      #
      # There is a slight complication, because Yahoo does another stupid thing.
      # Sometimes the old data is adjusted twice. So cannot simply assume
      # which direction to reverse adjustment - have to analyse prices and detect.
      # Not difficult.
  
      if df.empty:
          return df
  
      logger = utils.get_yf_logger()
  
      interday = interval in ["1d", "1wk", "1mo", "3mo"]
      if not interday:
          return df
  
      # Find the most recent stock split
      df = df.sort_index(ascending=False)
      split_f = df["Stock Splits"].to_numpy() != 0
      if not split_f.any():
          logger.debug("price-repair-split: No splits in data")
          return df
      most_recent_split_day = df.index[split_f].max()
      split = df.loc[most_recent_split_day, "Stock Splits"]
      if most_recent_split_day == df.index[0]:
          logger.info(
              "price-repair-split: Need 1+ day of price data after split to determine true price. Won't repair"
          )
          return df
  
      logger.debug(
          f"price-repair-split: Most recent split = {split:.4f} @ {most_recent_split_day.date()}"
      )
  
      return self._fix_prices_sudden_change(
          df, interval, tz_exchange, split, correct_volume=True
      )
  
imports: from __future__ import print_function
  import datetime
  from io import StringIO
  import json
  import logging
  import time
  import warnings
  from typing import Optional
  from urllib.parse import quote
  import dateutil
  import numpy
  import pandas
  import requests
  from .None import shared, utils, cache
  from .data import YfData
  from .scrapers.analysis import Analysis
  from .scrapers.fundamentals import Fundamentals
  from .scrapers.holders import Holders
  from .scrapers.quote import Quote, FastInfo
  from .const import _BASE_URL_, _ROOT_URL_
label_desc: Use image node_id 9 for calling the TickerBase obj's underlying member method code with example usage: obj._fix_bad_stock_split(df, interval, tz_exchange) and returns: self, df, df, df, df