class_docstr: An abstract pipeline loader for the estimates datasets that loads
  data from a blaze expression.
  
  Parameters
  ----------
  expr : Expr
      The expression representing the data to load.
  columns : dict[str -> str]
      A dict mapping BoundColumn names to the associated names in `expr`.
  resources : dict, optional
      Mapping from the loadable terms of ``expr`` to actual data resources.
  odo_kwargs : dict, optional
      Extra keyword arguments to pass to odo when executing the expression.
  checkpoints : Expr, optional
      The expression representing checkpointed data to be used for faster
      forward-filling of data from `expr`.
  
  Notes
  -----
  The expression should have a tabular dshape of::
  
     Dim * {{
         {SID_FIELD_NAME}: int64,
         {TS_FIELD_NAME}: datetime,
         {FISCAL_YEAR_FIELD_NAME}: float64,
         {FISCAL_QUARTER_FIELD_NAME}: float64,
         {EVENT_DATE_FIELD_NAME}: datetime,
     }}
  
  And other dataset-specific fields, where each row of the table is a
  record including the sid to identify the company, the timestamp where we
  learned about the announcement, and the date of the event.
  
  If the '{TS_FIELD_NAME}' field is not included it is assumed that we
  start the backtest with knowledge of all announcements.
code: def __init__(
      self,
      expr,
      columns,
      resources=None,
      odo_kwargs=None,
      checkpoints=None,
  ):
      dshape = expr.dshape
      if not istabular(dshape):
          raise ValueError(
              "expression dshape must be tabular, got: %s" % dshape,
          )
  
      required_cols = list(required_estimates_fields(columns))
      self._expr = bind_expression_to_resources(
          expr[required_cols],
          resources,
      )
      self._columns = columns
      self._odo_kwargs = odo_kwargs if odo_kwargs is not None else {}
      self._checkpoints = checkpoints
  
imports: from interface import implements
  from datashape import istabular
  from .core import bind_expression_to_resources
  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.pipeline.loaders.blaze.utils import load_raw_data
  from zipline.pipeline.loaders.earnings_estimates import NextEarningsEstimatesLoader, PreviousEarningsEstimatesLoader, required_estimates_fields, metadata_columns, PreviousSplitAdjustedEarningsEstimatesLoader, NextSplitAdjustedEarningsEstimatesLoader
label_desc: Use image node_id 1 to create a new BlazeEstimatesLoader object from inherited base classes:  with example: obj = BlazeEstimatesLoader(expr, columns, resources, odo_kwargs, checkpoints)