code: def validate_column_specs(events, columns):
      """
      Verify that the columns of ``events`` can be used by a
      EarningsEstimatesLoader to serve the BoundColumns described by
      `columns`.
      """
      required = required_estimates_fields(columns)
      received = set(events.columns)
      missing = required - received
      if missing:
          raise ValueError(
              "EarningsEstimatesLoader missing required columns {missing}.\n"
              "Got Columns: {received}\n"
              "Expected Columns: {required}".format(
                  missing=sorted(missing),
                  received=sorted(received),
                  required=sorted(required),
              )
          )
  
imports: from abc import abstractmethod, abstractproperty
  from interface import implements
  import numpy
  import pandas
  from six import viewvalues
  from toolz import groupby
  from zipline.lib.adjusted_array import AdjustedArray
  from zipline.lib.adjustment import Datetime641DArrayOverwrite, Datetime64Overwrite, Float641DArrayOverwrite, Float64Multiply, Float64Overwrite
  from zipline.pipeline.common import EVENT_DATE_FIELD_NAME, FISCAL_QUARTER_FIELD_NAME, FISCAL_YEAR_FIELD_NAME, SID_FIELD_NAME, TS_FIELD_NAME
  from zipline.pipeline.loaders.base import PipelineLoader
  from zipline.utils.numpy_utils import datetime64ns_dtype, float64_dtype
  from zipline.pipeline.loaders.utils import ffill_across_cols, last_in_date_group
label_desc: Use image node_id 4 for calling a global function with example usage: validate_column_specs(events, columns) without return types