parameters: (bench, change_points_as_lists)
return_statement: return [_GraphLink(bench.test, rev) for rev in unconfirmed_revs]
docstring: Makes a list of URLs to view graphs for "unconfirmed" alerts.
  
    Here, "unconfirmed" alerts refers to alerts that are in the TestBench
    object (i.e. they were found before and "confirmed") but were not found
    by the experimental find-anomalies function -- they were not "confirmed"
    again by the experimental function, so I'm calling them "unconfirmed".
  
    Below, bench.confirmed_anomaly_revs is a list of lists of revisions *around*
    a confirmed alert. For example, if an alert was found before at revision
    200 and 300, this list might look like: [[199, 200, 201], [299, 300, 301]].
  
    Thus, the set of alerts that were "confirmed alerts" before, but not found
    by the experimental function is the central revision for each one of these
    groups where the experimental function didn't find any corresponding alerts.
  
    Ideally for a good experimental function, we're hoping that these
    "unconfirmed" alerts are all cases where sheriffs triaged the alert wrong and
    it was actually invalid.
  
    Args:
      bench: One TestBench entity.
      change_points_as_lists: List of lists (which are JSONified ChangePoints).
  
    Returns:
      A list of URLs, each of which is for a graph for one unconfirmed alert.
docstring_summary: Makes a list of URLs to view graphs for "unconfirmed" alerts.
docstring_tokens: Makes a list of URLs to view graphs for unconfirmed alerts .
function: def _UnconfirmedAlertLinks(bench, change_points_as_lists):
    """Makes a list of URLs to view graphs for "unconfirmed" alerts.
  
    Here, "unconfirmed" alerts refers to alerts that are in the TestBench
    object (i.e. they were found before and "confirmed") but were not found
    by the experimental find-anomalies function -- they were not "confirmed"
    again by the experimental function, so I'm calling them "unconfirmed".
  
    Below, bench.confirmed_anomaly_revs is a list of lists of revisions *around*
    a confirmed alert. For example, if an alert was found before at revision
    200 and 300, this list might look like: [[199, 200, 201], [299, 300, 301]].
  
    Thus, the set of alerts that were "confirmed alerts" before, but not found
    by the experimental function is the central revision for each one of these
    groups where the experimental function didn't find any corresponding alerts.
  
    Ideally for a good experimental function, we're hoping that these
    "unconfirmed" alerts are all cases where sheriffs triaged the alert wrong and
    it was actually invalid.
  
    Args:
      bench: One TestBench entity.
      change_points_as_lists: List of lists (which are JSONified ChangePoints).
  
    Returns:
      A list of URLs, each of which is for a graph for one unconfirmed alert.
    """
    anomaly_revs = {c[0] for c in change_points_as_lists}
    unconfirmed_revs = []
    for confirmed_rev_group in bench.confirmed_anomaly_revs:
      if not anomaly_revs.intersection(confirmed_rev_group):
        # The alert for the this confirmed rev group is "unconfirmed" by the
        # experimental function. It should be added to the list.
        mid_index = len(confirmed_rev_group) / 2
        unconfirmed_revs.append(confirmed_rev_group[mid_index])
    return [_GraphLink(bench.test, rev) for rev in unconfirmed_revs]
function_tokens: def _UnconfirmedAlertLinks ( bench , change_points_as_lists ) : anomaly_revs = { c [ 0 ] for c in change_points_as_lists } unconfirmed_revs = [ ] for confirmed_rev_group in bench . confirmed_anomaly_revs : if not anomaly_revs . intersection ( confirmed_rev_group ) : # The alert for the this confirmed rev group is "unconfirmed" by the # experimental function. It should be added to the list. mid_index = len ( confirmed_rev_group ) / 2 unconfirmed_revs . append ( confirmed_rev_group [ mid_index ] ) return [ _GraphLink ( bench . test , rev ) for rev in unconfirmed_revs ]