docstr: Expects all the vectors to be of the same size.
  
  The vectors need to be whitespace delimited strings. Missing values are not handled.
docstr_tok: ["Expects","all","the","vectors","to","be","of","the","same","size",".","The","vectors","need","to","be","whitespace","delimited","strings",".","Missing","values","are","not","handled","."]
code: def add_feature_data(
      feature_config,
      input_df,
      proc_df,
      metadata,
      preprocessing_parameters: PreprocessingConfigDict,
      backend,
      skip_save_processed_input,
  ):
      """Expects all the vectors to be of the same size.
  
      The vectors need to be whitespace delimited strings. Missing values are not handled.
      """
      if len(input_df[feature_config[COLUMN]]) == 0:
          raise ValueError(
              "There are no vectors in the dataset provided"
          )
  
      # Convert the string of features into a numpy array
      try:
          proc_df[
              feature_config[PROC_COLUMN]
          ] = backend.df_engine.map_objects(
              input_df[feature_config[COLUMN]],
              lambda x: np.array(x.split(), dtype=np.float32),
          )
      except ValueError:
          logger.error(
              "Unable to read the vector data. Make sure that all the vectors"
              " are of the same size and do not have missing/null values."
          )
          raise
  
      # Determine vector size
      vector_size = backend.df_engine.compute(
          proc_df[feature_config[PROC_COLUMN]].map(len).max()
      )
      vector_size_param = preprocessing_parameters.get("vector_size")
      if vector_size_param is not None:
          # TODO(travis): do we even need a user param for vector size if we're going to auto-infer it in all
          # cases? Is this only useful as a sanity check for the user to make sure their data conforms to
          # expectations?
          if vector_size != vector_size_param:
              raise ValueError(
                  "The user provided value for vector size ({}) does not "
                  "match the value observed in the data: {}".format(
                      preprocessing_parameters, vector_size
                  )
              )
      else:
          logger.debug(f"Detected vector size: {vector_size}")
  
      metadata[feature_config[NAME]]["vector_size"] = vector_size
      return proc_df
  
imports: import logging
  from typing import Dict, List, Union
  import numpy
  import torch
  from ludwig.constants import COLUMN, HIDDEN, LOGITS, NAME, PREDICTIONS, PROC_COLUMN, VECTOR
  from ludwig.features.base_feature import InputFeature, OutputFeature, PredictModule
  from ludwig.schema.features.vector_feature import VectorInputFeatureConfig, VectorOutputFeatureConfig
  from ludwig.types import FeatureMetadataDict, FeaturePostProcessingOutputDict, ModelConfigDict, PreprocessingConfigDict, TrainingSetMetadataDict
  from ludwig.utils import output_feature_utils
  from ludwig.utils.types import TorchscriptPreprocessingInput
label_desc: Use image node_id 4 for calling the VectorFeatureMixin obj's underlying member method code with example usage: obj.add_feature_data(feature_config, input_df, proc_df, metadata, preprocessing_parameters, backend, skip_save_processed_input) and returns: proc_df