<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def com_google_fonts_check_family_vertical_metrics(ttFonts):
 """Each font in a family must have the same vertical metrics values."""

  failed = []
  vmetrics = {
    "sTypoAscender": {},
    "sTypoDescender": {},
    "sTypoLineGap": {},
    "usWinAscent": {},
    "usWinDescent": {},
    "ascent": {},
    "descent": {}
  }

  for ttfont in ttFonts:
      full_font_name = ttfont['name'].getName(4, 3, 1, 1033).toUnicode()
      vmetrics['sTypoAscender'][full_font_name] = ttfont['OS/2'].sTypoAscender
      vmetrics['sTypoDescender'][full_font_name] = ttfont['OS/2'].sTypoDescender
      vmetrics['sTypoLineGap'][full_font_name] = ttfont['OS/2'].sTypoLineGap
      vmetrics['usWinAscent'][full_font_name] = ttfont['OS/2'].usWinAscent
      vmetrics['usWinDescent'][full_font_name] = ttfont['OS/2'].usWinDescent
      vmetrics['ascent'][full_font_name] = ttfont['hhea'].ascent
      vmetrics['descent'][full_font_name] = ttfont['hhea'].descent

  for k, v in vmetrics.items():
      metric_vals = set(vmetrics[k].values())
      if len(metric_vals) != 1:
          failed.append(k)

  if failed:
      for k in failed:
        s = ["{}: {}".format(k, v) for k, v in vmetrics[k].items()]
        yield FAIL, ("{} is not the same across the family:\n:"
                     "{}".format(k, "\n".join(s)))
  else:
      yield PASS, "Vertical metrics are the same across the family"