code: def _SchemedMerge(self, scheme, a, b):
      
      migrated = self._Migrate(b, self.feed_merger.b_schedule, False)
      for attr, merger in scheme.items():
        a_attr = getattr(a, attr, None)
        b_attr = getattr(b, attr, None)
        try:
          merged_attr = merger(a_attr, b_attr)
        except MergeError as merge_error:
          raise MergeError("Attribute '%s' could not be merged: %s." % (
              attr, merge_error))
        setattr(migrated, attr, merged_attr)
      return migrated
docs: Tries to merge two entities according to a merge scheme.
  
      A scheme is specified by a map where the keys are entity attributes and the
      values are merge functions like Merger._MergeIdentical or
      Merger._MergeOptional. The entity is first migrated to the merged schedule.
      Then the attributes are individually merged as specified by the scheme.
  
      Args:
        scheme: The merge scheme, a map from entity attributes to merge
                functions.
        a: The entity from the old schedule.
        b: The entity from the new schedule.
  
      Returns:
        The migrated and merged entity.
  
      Raises:
        MergeError: One of the attributes was not able to be merged.