class_docstr: Tests PartitionedStatisticsAnalyzer.
code: def test_statistic_analyzer_with_invalid_feature(self):
      statistics = [
          text_format.Parse(
              """
        features {
          path {
            step: 'valid_feature'
          }
          custom_stats {
                name: 'MI'
                num: 0.5
              }
          custom_stats {
                name: 'Cov'
                num: 0.3
              }
        }
        features {
          path {
            step: 'invalid_feature'
          }
          custom_stats {
            name: 'MI'
            num: 0.5
          }
          custom_stats {
            name: 'Cov'
            num: 0.3
          }
        }""",
              statistics_pb2.DatasetFeatureStatistics(),
          ),
          text_format.Parse(
              """
        features {
          path {
            step: 'valid_feature'
          }
          custom_stats {
                name: 'MI'
                num: 1.5
              }
          custom_stats {
                name: 'Cov'
                num: 0.7
              }
        }""",
              statistics_pb2.DatasetFeatureStatistics(),
          ),
      ]
      expected = text_format.Parse(
          """
        features {
          path {
            step: 'valid_feature'
          }
          custom_stats {
                name: 'max_Cov'
                num: 0.7
              }
          custom_stats {
                name: 'max_MI'
                num: 1.5
              }
          custom_stats {
                name: 'mean_Cov'
                num: 0.5
              }
          custom_stats {
                name: 'mean_MI'
                num: 1
              }
          custom_stats {
                name: 'median_Cov'
                num: 0.5
              }
          custom_stats {
                name: 'median_MI'
                num: 1
              }
          custom_stats {
                name: 'min_Cov'
                num: 0.3
              }
          custom_stats {
                name: 'min_MI'
                num: 0.5
              }
          custom_stats {
                name: 'num_partitions_Cov'
                num: 2
              }
          custom_stats {
                name: 'num_partitions_MI'
                num: 2
              }
          custom_stats {
                name: 'std_dev_Cov'
                num: 0.2
              }
          custom_stats {
                name: 'std_dev_MI'
                num: 0.5
              }
        }""",
          statistics_pb2.DatasetFeatureStatistics(),
      )
      self._assert_combiner_output_equal(
          statistics,
          partitioned_stats_generator.PartitionedStatisticsAnalyzer(
              min_partitions_stat_presence=2
          ),
          expected,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from absl.testing import absltest
  from absl.testing import parameterized
  import apache_beam
  from apache_beam.testing import util
  import numpy
  import pyarrow
  from tensorflow_data_validation import constants
  from tensorflow_data_validation import types
  from tensorflow_data_validation.statistics.generators import partitioned_stats_generator
  from tensorflow_data_validation.statistics.generators import sklearn_mutual_information
  from tensorflow_data_validation.utils import test_util
  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 PartitionedStatisticsAnalyzer obj's underlying member method code with example usage: obj.test_statistic_analyzer_with_invalid_feature() without return types