Returns a bool indicating whether a new adversarial example is better
    than the pre-existing one for the same clean example.
    :param orig_criteria: dict mapping names of criteria to their value
      for each example in the whole dataset
    :param orig_idx: The position of the pre-existing example within the
      whole dataset.
    :param new_criteria: dict, like orig_criteria, but with values only
      on the latest batch of adversarial examples
    :param new_idx: The position of the new adversarial example within
      the batch

def new_wins(self, orig_criteria, orig_idx, new_criteria, new_idx):
    """
    Returns a bool indicating whether a new adversarial example is better
    than the pre-existing one for the same clean example.
    :param orig_criteria: dict mapping names of criteria to their value
      for each example in the whole dataset
    :param orig_idx: The position of the pre-existing example within the
      whole dataset.
    :param new_criteria: dict, like orig_criteria, but with values only
      on the latest batch of adversarial examples
    :param new_idx: The position of the new adversarial example within
      the batch
    """
    raise NotImplementedError(str(type(self))
                              + " needs to implement new_wins.")