docstr: Validate the user-provided feature metadata.
  
  :param feature_names: list of features in the dataset.
  :type feature_names: List[str]
docstr_tok: ["Validate","the","user-provided","feature","metadata",".",":","param","feature_names",":","list","of","features","in","the","dataset",".",":","type","feature_names",":","List","[","str","]"]
code: def validate_feature_metadata_with_user_features(
      self, feature_names: List[str]
  ):
      """Validate the user-provided feature metadata.
  
      :param feature_names: list of features in the dataset.
      :type feature_names: List[str]
      """
      identity_feature = (
          [self.identity_feature_name]
          if self.identity_feature_name
          else None
      )
      FeatureMetadata._validate_columns(
          _DROPPED_FEATURE_PURPOSE, self.dropped_features, feature_names
      )
      FeatureMetadata._validate_columns(
          _CATEGORICAL_FEATURE_PURPOSE,
          self.categorical_features,
          feature_names,
      )
      FeatureMetadata._validate_columns(
          _IDENTITY_FEATURE_PURPOSE, identity_feature, feature_names
      )
      FeatureMetadata._validate_columns(
          _DATETIME_FEATURE_PURPOSE,
          self.datetime_features,
          feature_names,
      )
      FeatureMetadata._validate_columns(
          _TIME_SERIES_ID_FEATURE_PURPOSE,
          self.time_series_id_features,
          feature_names,
      )
  
file_path: responsible-ai-toolbox/responsibleai/responsibleai/feature_metadata.py
imports: from typing import Any, Dict, List, Optional
  from raiutils.exceptions import UserConfigValidationException
label_desc: Use image node_id 2 for calling the FeatureMetadata obj's underlying member method code with example usage: obj.validate_feature_metadata_with_user_features(feature_names) without return types