UpdateSummary UpdateIntDomain()

in tensorflow_data_validation/anomalies/int_domain_util.cc [143:200]


UpdateSummary UpdateIntDomain(const FeatureStatsView& feature_stats,
                              tensorflow::metadata::v0::IntDomain* int_domain) {
  UpdateSummary update_summary;
  const IntIntervalResult result = GetIntInterval(feature_stats);
  if (result) {
    const variant<IntInterval, ExampleStringNotInt> actual_result = *result;
    if (absl::holds_alternative<ExampleStringNotInt>(actual_result)) {
      if (feature_stats.GetFeatureType() == metadata::v0::BYTES) {
        update_summary.descriptions.push_back(
            {tensorflow::metadata::v0::AnomalyInfo::INT_TYPE_NOT_INT_STRING,
             kInvalidValues,
             absl::StrCat(
                 "String values that were not ints were found, such as \"",
                 *absl::get_if<ExampleStringNotInt>(&actual_result), "\".")});
        update_summary.clear_field = true;
      } else if (feature_stats.GetFeatureType() == metadata::v0::INT) {
        if (int_domain->has_max() || int_domain->has_min()) {
          update_summary.descriptions.push_back(
              {tensorflow::metadata::v0::AnomalyInfo::DOMAIN_INVALID_FOR_TYPE,
               kInvalidValues,
               absl::StrCat(
                   "Integer had values that were not valid Int64, such as \"",
                   *absl::get_if<ExampleStringNotInt>(&actual_result), "\".")});
          update_summary.clear_field = true;
        }
      } else {
        update_summary.descriptions.push_back(
            {tensorflow::metadata::v0::AnomalyInfo::DOMAIN_INVALID_FOR_TYPE,
             kInvalidValues,
             absl::StrCat("IntDomain incompatible with feature type ",
                          feature_stats.GetFeatureType())});
        update_summary.clear_field = true;
      }
      return update_summary;
    }
    if (absl::holds_alternative<IntInterval>(actual_result)) {
      const IntInterval interval =
          *absl::get_if<IntInterval>(&actual_result);
      if (int_domain->has_min() && int_domain->min() > interval.min) {
        update_summary.descriptions.push_back(
            {tensorflow::metadata::v0::AnomalyInfo::INT_TYPE_SMALL_INT,
             kOutOfRangeValues,
             absl::StrCat("Unexpectedly small value: ", interval.min, ".")});
        int_domain->set_min(interval.min);
      }
      if (int_domain->has_max() && int_domain->max() < interval.max) {
        update_summary.descriptions.push_back(
            {tensorflow::metadata::v0::AnomalyInfo::INT_TYPE_BIG_INT,
             kOutOfRangeValues,
             absl::StrCat("Unexpectedly large value: ", interval.max, ".")});
        int_domain->set_max(interval.max);
      }

      return update_summary;
    }
  }
  return update_summary;
}