class_docstr: Tests for SkLearnMutualInformationStatsFn.
code: def test_mi_regression_with_float_label_and_numeric_features(self):
      label_array = pa.array(
          [
              [0.1],
              [0.2],
              [0.8],
              [0.7],
              [0.2],
              [0.3],
              [0.9],
              [0.4],
              [0.1],
              [0.0],
              [0.4],
              [0.6],
              [0.4],
              [0.8],
          ]
      )
      # Random floats that do not map onto the label
      terrible_feat_array = pa.array(
          [
              [0.4],
              [0.1],
              [0.4],
              [0.4],
              [0.8],
              [0.7],
              [0.2],
              [0.1],
              [0.0],
              [0.4],
              [0.8],
              [0.2],
              [0.5],
              [0.1],
          ]
      )
      batch = pa.RecordBatch.from_arrays(
          [label_array, label_array, terrible_feat_array],
          ["label_key", "perfect_feature", "terrible_feature"],
      )
  
      schema = text_format.Parse(
          """
          feature {
            name: "perfect_feature"
            type: FLOAT
            shape {
              dim {
                size: 1
              }
            }
          }
          feature {
            name: "terrible_feature"
            type: FLOAT
            shape {
              dim {
                size: 1
              }
            }
          }
          feature {
            name: "label_key"
            type: FLOAT
            shape {
              dim {
                size: 1
              }
            }
          }
          """,
          schema_pb2.Schema(),
      )
  
      expected = text_format.Parse(
          """
          features {
            path {
              step: "perfect_feature"
            }
            custom_stats {
              name: "sklearn_adjusted_mutual_information"
              num: 1.0096965
            }
            custom_stats {
              name: "sklearn_mutual_information"
              num: 1.1622766
            }
            custom_stats {
              name: "sklearn_normalized_adjusted_mutual_information"
              num: 0.9496162
            }
          }
          features {
            path {
              step: "terrible_feature"
            }
            custom_stats {
              name: "sklearn_adjusted_mutual_information"
              num: 0.0211485
            }
            custom_stats {
              name: "sklearn_mutual_information"
              num: 0.0211485
            }
            custom_stats {
              name: "sklearn_normalized_adjusted_mutual_information"
              num: 0.0161305
            }
          }""",
          statistics_pb2.DatasetFeatureStatistics(),
      )
      self._assert_mi_output_equal(
          batch, expected, schema, types.FeaturePath(["label_key"])
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl.testing import absltest
  import numpy
  import pyarrow
  from tensorflow_data_validation import types
  from tensorflow_data_validation.statistics.generators import sklearn_mutual_information
  from google.protobuf import text_format
  from tensorflow.python.util.protobuf import compare
  from tensorflow_metadata.proto.v0 import schema_pb2
  from tensorflow_metadata.proto.v0 import statistics_pb2
label_desc: Use image node_id 2 for calling the SkLearnMutualInformationTest obj's underlying member method code with example usage: obj.test_mi_regression_with_float_label_and_numeric_features() without return types