code: def _handle_drop_index(self, index_name: str, if_exists: bool):
      index_obj = self.catalog().get_index_catalog_entry_by_name(
          index_name
      )
      if not index_obj:
          err_msg = f"Index {index_name} does not exist, therefore cannot be dropped."
          if if_exists:
              logger.warning(err_msg)
              return Batch(pd.DataFrame([err_msg]))
          else:
              raise RuntimeError(err_msg)
      else:
          index = VectorStoreFactory.init_vector_store(
              index_obj.type,
              index_obj.name,
              **handle_vector_store_params(
                  index_obj.type, index_obj.save_file_path, self.catalog
              ),
          )
          assert (
              index is not None
          ), f"Failed to initialize the vector store handler for {index_obj.type}"
  
          if index:
              index.delete()
  
          self.catalog().drop_index_catalog_entry(index_name)
  
          return Batch(
              pd.DataFrame(
                  {f"Index {index_name} successfully dropped"},
                  index=[0],
              )
          )
  
file_path: evadb/evadb/executor/drop_object_executor.py
imports: import pandas
  from evadb.database import EvaDBDatabase
  from evadb.executor.abstract_executor import AbstractExecutor
  from evadb.executor.executor_utils import ExecutorError, handle_vector_store_params
  from evadb.models.storage.batch import Batch
  from evadb.parser.types import ObjectType
  from evadb.plan_nodes.drop_object_plan import DropObjectPlan
  from evadb.storage.storage_engine import StorageEngine
  from evadb.third_party.vector_stores.utils import VectorStoreFactory
  from evadb.utils.logging_manager import logger
label_desc: Use image node_id 5 for calling the DropObjectExecutor obj's underlying member method code with example usage: obj._handle_drop_index(index_name, if_exists) and returns: Batch, Batch