docs: def add_column(
          table_name, column_name, column, cache=False, cache_scope=_CS_FOREVER):
      """
      Add a new column to a table from a Series or callable.
  
      Parameters
      ----------
      table_name : str
          Table with which the column will be associated.
      column_name : str
          Name for the column.
      column : pandas.Series or callable
          Series should have an index matching the table to which it
          is being added. If a callable, the function's argument
          names and keyword argument values will be matched to
          registered variables when the function needs to be
          evaluated by Orca. The function should return a Series.
      cache : bool, optional
          Whether to cache the results of a provided callable. Does not
          apply if `column` is a Series.
      cache_scope : {'step', 'iteration', 'forever'}, optional
          Scope for which to cache data. Default is to cache forever
          (or until manually cleared). 'iteration' caches data for each
          complete iteration of the pipeline, 'step' caches data for
          a single step of the pipeline.
  
      """
      if isinstance(column, Callable):
          column = \
              _ColumnFuncWrapper(
                  table_name, column_name, column,
                  cache=cache, cache_scope=cache_scope)
      else:
          column = _SeriesWrapper(table_name, column_name, column)
  
      # clear any cached data from a previously registered column
      column.clear_cached()
  
      logger.debug('registering column {!r} on table {!r}'.format(
          column_name, table_name))
      _COLUMNS[(table_name, column_name)] = column
  
      return column