class_docstr: Class to manage the multi-threaded data ingestion process.
  
  This class will manage the data ingestion process which is multi-threaded.
  
  Attributes:
      feature_group_name (str): name of the Feature Group.
      sagemaker_fs_runtime_client_config (Config): instance of the Config class
          for boto calls.
      sagemaker_session (Session): session instance to perform boto calls.
      data_frame (DataFrame): pandas DataFrame to be ingested to the given feature group.
      max_workers (int): number of threads to create.
      max_processes (int): number of processes to create. Each process spawns
          ``max_workers`` threads.
      profile_name (str): the profile credential should be used for ``PutRecord``
          (default: None).
class_docstr_tok: ["Class","to","manage","the","multi-threaded","data","ingestion","process",".","This","class","will","manage","the","data","ingestion","process","which","is","multi-threaded",".","Attributes",":","feature_group_name","(","str",")",":","name","of","the","Feature","Group",".","sagemaker_fs_runtime_client_config","(","Config",")",":","instance","of","the","Config","class","for","boto","calls",".","sagemaker_session","(","Session",")",":","session","instance","to","perform","boto","calls",".","data_frame","(","DataFrame",")",":","pandas","DataFrame","to","be","ingested","to","the","given","feature","group",".","max_workers","(","int",")",":","number","of","threads","to","create",".","max_processes","(","int",")",":","number","of","processes","to","create",".","Each","process","spawns","``","max_workers","``","threads",".","profile_name","(","str",")",":","the","profile","credential","should","be","used","for","``","PutRecord","``","(","default",":","None",")","."]
docstr: Ingest a single batch of DataFrame rows into FeatureStore.
  
  Args:
      data_frame (DataFrame): source DataFrame to be ingested.
      feature_group_name (str): name of the Feature Group.
      client_config (Config): Configuration for the sagemaker feature store runtime
          client to perform boto calls.
      start_index (int): starting position to ingest in this batch.
      end_index (int): ending position to ingest in this batch.
      profile_name (str): the profile credential should be used for ``PutRecord``
          (default: None).
  
  Returns:
      List of row indices that failed to be ingested.
docstr_tok: ["Ingest","a","single","batch","of","DataFrame","rows","into","FeatureStore",".","Args",":","data_frame","(","DataFrame",")",":","source","DataFrame","to","be","ingested",".","feature_group_name","(","str",")",":","name","of","the","Feature","Group",".","client_config","(","Config",")",":","Configuration","for","the","sagemaker","feature","store","runtime","client","to","perform","boto","calls",".","start_index","(","int",")",":","starting","position","to","ingest","in","this","batch",".","end_index","(","int",")",":","ending","position","to","ingest","in","this","batch",".","profile_name","(","str",")",":","the","profile","credential","should","be","used","for","``","PutRecord","``","(","default",":","None",")",".","Returns",":","List","of","row","indices","that","failed","to","be","ingested","."]
code: def _ingest_single_batch(
      data_frame: DataFrame,
      feature_group_name: str,
      client_config: Config,
      start_index: int,
      end_index: int,
      profile_name: str = None,
  ) -> List[int]:
      """Ingest a single batch of DataFrame rows into FeatureStore.
  
      Args:
          data_frame (DataFrame): source DataFrame to be ingested.
          feature_group_name (str): name of the Feature Group.
          client_config (Config): Configuration for the sagemaker feature store runtime
              client to perform boto calls.
          start_index (int): starting position to ingest in this batch.
          end_index (int): ending position to ingest in this batch.
          profile_name (str): the profile credential should be used for ``PutRecord``
              (default: None).
  
      Returns:
          List of row indices that failed to be ingested.
      """
      retry_config = client_config.retries
      if (
          "max_attempts" not in retry_config
          and "total_max_attempts" not in retry_config
      ):
          client_config = copy.deepcopy(client_config)
          client_config.retries = {
              "max_attempts": 10,
              "mode": "standard",
          }
      sagemaker_fs_runtime_client = boto3.Session(
          profile_name=profile_name
      ).client(
          service_name="sagemaker-featurestore-runtime",
          config=client_config,
      )
  
      logger.info(
          "Started ingesting index %d to %d", start_index, end_index
      )
      failed_rows = list()
      for row in data_frame[start_index:end_index].itertuples():
          IngestionManagerPandas._ingest_row(
              data_frame=data_frame,
              row=row,
              feature_group_name=feature_group_name,
              sagemaker_fs_runtime_client=sagemaker_fs_runtime_client,
              failed_rows=failed_rows,
          )
      return failed_rows
  
imports: from __future__ import absolute_import
  import copy
  import logging
  import math
  import os
  import tempfile
  from concurrent.futures import as_completed
  from concurrent.futures import ThreadPoolExecutor
  from typing import Optional, Sequence, List, Dict, Any, Union
  from urllib.parse import urlparse
  from multiprocessing.pool import AsyncResult
  import signal
  import attr
  import pandas
  from pandas import DataFrame
  import boto3
  from botocore.config import Config
  from pathos.multiprocessing import ProcessingPool
  from sagemaker.config import FEATURE_GROUP_ROLE_ARN_PATH, FEATURE_GROUP_OFFLINE_STORE_KMS_KEY_ID_PATH, FEATURE_GROUP_ONLINE_STORE_KMS_KEY_ID_PATH
  from sagemaker.session import Session
  from sagemaker.feature_store.feature_definition import FeatureDefinition, FeatureTypeEnum
  from sagemaker.feature_store.inputs import OnlineStoreConfig, OnlineStoreSecurityConfig, S3StorageConfig, OfflineStoreConfig, DataCatalogConfig, FeatureValue, FeatureParameter, TableFormatEnum, DeletionModeEnum, TtlDuration, OnlineStoreConfigUpdate, OnlineStoreStorageTypeEnum
  from sagemaker.utils import resolve_value_from_config, format_tags, Tags
label_desc: Use image node_id 1 for calling the IngestionManagerPandas obj's underlying member method code with example usage: obj._ingest_single_batch(data_frame, feature_group_name, client_config, start_index, end_index, profile_name) and returns: failed_rows