def _GetSupplementalColumns(row):
    'Gets a dict of supplemental columns.\n\n  If any columns are invalid, a warning is logged and they just aren\'t included,\n  but no exception is raised.\n\n  Individual rows may specify up to _MAX_NUM_COLUMNS extra data, revision,\n  and annotation columns. These columns must follow formatting rules for\n  their type. Invalid columns are dropped with an error log, but the valid\n  data will still be graphed.\n\n  Args:\n    row: A dict, possibly with the key "supplemental_columns", the value of\n        which should be a dict.\n\n  Returns:\n    A dict of valid supplemental columns.\n  '
    columns = {}
    for (name, value) in row.get('supplemental_columns', {}).iteritems():
        if (len(columns) == _MAX_NUM_COLUMNS):
            logging.warn('Too many columns, some being dropped.')
            break
        value = _CheckSupplementalColumn(name, value)
        if value:
            columns[name] = value
    return columns
Gets a dict of supplemental columns.

If any columns are invalid, a warning is logged and they just aren't included,
but no exception is raised.

Individual rows may specify up to _MAX_NUM_COLUMNS extra data, revision,
and annotation columns. These columns must follow formatting rules for
their type. Invalid columns are dropped with an error log, but the valid
data will still be graphed.

Args:
  row: A dict, possibly with the key "supplemental_columns", the value of
      which should be a dict.

Returns:
  A dict of valid supplemental columns.
def _GetSupplementalColumns(row):
    'Gets a dict of supplemental columns.\n\n  If any columns are invalid, a warning is logged and they just aren\'t included,\n  but no exception is raised.\n\n  Individual rows may specify up to _MAX_NUM_COLUMNS extra data, revision,\n  and annotation columns. These columns must follow formatting rules for\n  their type. Invalid columns are dropped with an error log, but the valid\n  data will still be graphed.\n\n  Args:\n    row: A dict, possibly with the key "supplemental_columns", the value of\n        which should be a dict.\n\n  Returns:\n    A dict of valid supplemental columns.\n  '
    columns = {}
    for (name, value) in row.get('supplemental_columns', {}).iteritems():
        if (len(columns) == _MAX_NUM_COLUMNS):
            logging.warn('Too many columns, some being dropped.')
            break
        value = _CheckSupplementalColumn(name, value)
        if value:
            columns[name] = value
    return columns