code: def add_table(
          table_name, table, cache=False, cache_scope=_CS_FOREVER,
          copy_col=True):
      
      if isinstance(table, Callable):
          table = TableFuncWrapper(table_name, table, cache=cache,
                                   cache_scope=cache_scope, copy_col=copy_col)
      else:
          table = DataFrameWrapper(table_name, table, copy_col=copy_col)
  
      # clear any cached data from a previously registered table
      table.clear_cached()
  
      logger.debug('registering table {!r}'.format(table_name))
      _TABLES[table_name] = table
  
      return table
docs: Register a table with Orca.
  
      Parameters
      ----------
      table_name : str
          Should be globally unique to this table.
      table : pandas.DataFrame or function
          If a function, the function should return a DataFrame.
          The function's argument names and keyword argument values
          will be matched to registered variables when the function
          needs to be evaluated by Orca.
      cache : bool, optional
          Whether to cache the results of a provided callable. Does not
          apply if `table` is a DataFrame.
      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.
      copy_col : bool, optional
          Whether to return copies when evaluating columns.
  
      Returns
      -------
      wrapped : `DataFrameWrapper` or `TableFuncWrapper`