docs: def transition(self, data, year, linked_tables=None):
          """
          Add or remove rows from a table based on population targets.
  
          Parameters
          ----------
          data : pandas.DataFrame
              Rows will be removed from or added to this table.
          year : int
              Year number that will be passed to `transitioner`.
          linked_tables : dict of tuple, optional
              Dictionary of (table, 'column name') pairs. The column name
              should match the index of `data`. Indexes in `data` that
              are copied or removed will also be copied and removed in
              linked tables. They dictionary keys are used in the
              returned `updated_links`.
  
          Returns
          -------
          updated : pandas.DataFrame
              Table with rows removed or added.
          added : pandas.Series
              Indexes of new rows in `updated`.
          updated_links : dict of pandas.DataFrame
  
          """
          logger.debug('start: transition')
          linked_tables = linked_tables or {}
          updated_links = {}
  
          with log_start_finish('add/remove rows', logger):
              updated, added, copied, removed = self.transitioner(data, year)
  
          for table_name, (table, col) in linked_tables.items():
              logger.debug('updating linked table {}'.format(table_name))
              updated_links[table_name] = \
                  _update_linked_table(table, col, added, copied, removed)
  
          logger.debug('finish: transition')
          return updated, added, updated_links