def _validate_schema_reserved_feature_names()

in tensorflow_gnn/graph/schema_validation.py [0:0]


def _validate_schema_reserved_feature_names(schema: schema_pb2.GraphSchema):
  """Check that reserved feature names aren't being used as explicit features."""
  node_set_dicts = [("nodes", name, node_set.features)
                    for name, node_set in schema.node_sets.items()]
  edge_set_dicts = [("edges", name, edge_set.features)
                    for name, edge_set in schema.edge_sets.items()]
  for set_type, set_name, feature_dict in node_set_dicts + edge_set_dicts:
    if const.SIZE_NAME in feature_dict:
      raise ValidationError(
          "Feature '{}' from {} set '{}' is reserved".format(
              const.SIZE_NAME, set_type, set_name))
  for set_type, set_name, feature_dict in edge_set_dicts:
    for name in const.SOURCE_NAME, const.TARGET_NAME:
      # Invalidate reserved feature names.
      if name in feature_dict:
        raise ValidationError(
            "Feature '{}' from {} set '{}' is reserved".format(
                name, set_type, set_name))

  # TODO(blais): Make this compulsory after we remove the hardcoded
  # feature names from the sampler.
  for set_type, set_name, feature_name, feature in su.iter_features(schema):
    if const.RESERVED_REGEX.match(feature_name):
      logging.error("Invalid %s feature name '%s' on set '%s': reserved names "
                    "are not allowed", set_type, feature_name, set_name)