class_docstr: Computes Mutual Information(MI) between each feature and the label.
  
  The non-streaming sk-learn implementation of MI is used to
  estimate Adjusted Mutual Information(AMI) and MI between all valid features
  and the label. AMI prevents overestimation of MI for high entropy features.
  It is defined as MI(feature, labels) - MI(feature, np.random.shuffle(labels)).
  
  SkLearnMutualInformation will "gracefully fail" on all features
  that are multivalent since they are not supported by sk-learn. The compute
  method will not report statistics for these invalid features.
docstr: Removes feature columns that contain unsupported values.
  
  All feature columns that are multivalent are dropped since they are
  not supported by sk-learn.
  
  All columns of STRUCT type are also dropped.
  
  Args:
    examples: Arrow RecordBatch containing a batch of examples.
    schema: The schema for the data.
  
  Returns:
    Arrow RecordBatch.
docstr_tok: ["Removes","feature","columns","that","contain","unsupported","values",".","All","feature","columns","that","are","multivalent","are","dropped","since","they","are","not","supported","by","sk-learn",".","All","columns","of","STRUCT","type","are","also","dropped",".","Args",":","examples",":","Arrow","RecordBatch","containing","a","batch","of","examples",".","schema",":","The","schema","for","the","data",".","Returns",":","Arrow","RecordBatch","."]
code: def _remove_unsupported_feature_columns(
      self, examples: pa.RecordBatch, schema: schema_pb2.Schema
  ) -> pa.RecordBatch:
      """Removes feature columns that contain unsupported values.
  
      All feature columns that are multivalent are dropped since they are
      not supported by sk-learn.
  
      All columns of STRUCT type are also dropped.
  
      Args:
        examples: Arrow RecordBatch containing a batch of examples.
        schema: The schema for the data.
  
      Returns:
        Arrow RecordBatch.
      """
      columns = set(examples.schema.names)
  
      multivalent_features = schema_util.get_multivalent_features(
          schema
      )
      unsupported_columns = set()
      for f in multivalent_features:
          # Drop the column if they were in the examples.
          if f.steps()[0] in columns:
              unsupported_columns.add(f.steps()[0])
      for column_name, column in zip(
          examples.schema.names, examples.columns
      ):
          # only support 1-nested non-struct arrays.
          column_type = column.type
          if (
              arrow_util.get_nest_level(column_type) != 1
              or stats_util.get_feature_type_from_arrow_type(
                  types.FeaturePath([column_name]), column_type
              )
              == statistics_pb2.FeatureNameStatistics.STRUCT
          ):
              unsupported_columns.add(column_name)
          # Drop columns that were not in the schema.
          if (
              types.FeaturePath([column_name])
              not in self._schema_features
          ):
              unsupported_columns.add(column_name)
  
      supported_columns = []
      supported_column_names = []
      for column_name, column in zip(
          examples.schema.names, examples.columns
      ):
          if column_name not in unsupported_columns:
              supported_columns.append(column)
              supported_column_names.append(column_name)
  
      return pa.RecordBatch.from_arrays(
          supported_columns, supported_column_names
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import sys
  from typing import Dict, List, Optional, Sequence, Set, Text, Union
  import numpy
  import pandas
  import pyarrow
  from tensorflow_data_validation import types
  from tensorflow_data_validation.arrow import arrow_util
  from tensorflow_data_validation.statistics.generators import partitioned_stats_generator
  from tensorflow_data_validation.utils import schema_util
  from tensorflow_data_validation.utils import stats_util
  from tfx_bsl.arrow import array_util
  from tensorflow_metadata.proto.v0 import schema_pb2
  from tensorflow_metadata.proto.v0 import statistics_pb2
label_desc: Use image node_id 5 for calling the SkLearnMutualInformation obj's underlying member method code with example usage: obj._remove_unsupported_feature_columns(examples, schema) and returns: pa