def preprocess_eval_input(features):
    'Pre-process the eval data.\n\n        This is needed because:\n        - The label needs to be extended to be used in the loss fn\n        - We need the same inputs for training and eval so adding fake inputs\n          for VALID_PT_MASK in eval data.\n\n        Args:\n          features: Dictionary of features for evaluation.\n\n        Returns:\n          Processed evaluation features.\n        '
    labels = tf.cast(tf.zeros_like(features[movielens.USER_COLUMN]), tf.bool)
    fake_valid_pt_mask = tf.cast(tf.zeros_like(features[movielens.USER_COLUMN]), tf.bool)
    features[rconst.VALID_POINT_MASK] = fake_valid_pt_mask
    features[rconst.TRAIN_LABEL_KEY] = labels
    return features
Pre-process the eval data.

This is needed because:
- The label needs to be extended to be used in the loss fn
- We need the same inputs for training and eval so adding fake inputs
  for VALID_PT_MASK in eval data.

Args:
  features: Dictionary of features for evaluation.

Returns:
  Processed evaluation features.
def preprocess_eval_input(features):
    'Pre-process the eval data.\n\n        This is needed because:\n        - The label needs to be extended to be used in the loss fn\n        - We need the same inputs for training and eval so adding fake inputs\n          for VALID_PT_MASK in eval data.\n\n        Args:\n          features: Dictionary of features for evaluation.\n\n        Returns:\n          Processed evaluation features.\n        '
    labels = tf.cast(tf.zeros_like(features[movielens.USER_COLUMN]), tf.bool)
    fake_valid_pt_mask = tf.cast(tf.zeros_like(features[movielens.USER_COLUMN]), tf.bool)
    features[rconst.VALID_POINT_MASK] = fake_valid_pt_mask
    features[rconst.TRAIN_LABEL_KEY] = labels
    return features