class_docstr: Calculates the values of a set of features for given instance ids.
code: def _necessary_columns(self, dataframe_name, feature_names):
      # We have to keep all index and foreign columns because we don't know what forward
      # relationships will come from this node.
      df = self.entityset[dataframe_name]
      index_columns = {
          col
          for col in df.columns
          if {"index", "foreign_key", "time_index"}
          & df.ww.semantic_tags[col]
      }
      features = (
          self.feature_set.features_by_name[name]
          for name in feature_names
      )
  
      feature_columns = {
          f.column_name
          for f in features
          if isinstance(f, IdentityFeature)
      }
      return list(index_columns | feature_columns)
  
imports: from datetime import datetime
  from functools import partial
  import numpy
  import pandas
  import pandas.api.types
  from featuretools.entityset.relationship import RelationshipPath
  from featuretools.exceptions import UnknownFeature
  from featuretools.feature_base import AggregationFeature, DirectFeature, GroupByTransformFeature, IdentityFeature, TransformFeature
  from featuretools.utils import Trie
  from featuretools.utils.gen_utils import Library, get_relationship_column_id, import_or_none, is_instance
label_desc: Use image node_id 13 for calling the FeatureSetCalculator obj's underlying member method code with example usage: obj._necessary_columns(dataframe_name, feature_names) and returns: list