<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_source(self, src, build_index=True, merge_sources=True, **kwargs):
 """ Load a single source. Parameters src : `~fermipy.roi_model.Source` Source object that will be added to the ROI. merge_sources : bool When a source matches an existing source in the model update that source with the properties of the new source. build_index : bool Re-make the source index after loading this source. """

        src = copy.deepcopy(src)
        name = src.name.replace(' ', '').lower()

        min_sep = kwargs.get('min_separation', None)

        if min_sep is not None:

            sep = src.skydir.separation(self._src_skydir).deg
            if len(sep) > 0 and np.min(sep) < min_sep:
                return

        match_srcs = self.match_source(src)

        if len(match_srcs) == 1:

            # self.logger.debug('Found matching source for %s : %s',
            #                  src.name, match_srcs[0].name)

            if merge_sources:
                match_srcs[0].update_from_source(src)
            else:
                match_srcs[0].add_name(src.name)

            self._add_source_alias(src.name.replace(' ', '').lower(),
                                   match_srcs[0])
            return
        elif len(match_srcs) > 2:
            raise Exception('Multiple sources with name %s' % name)

        self._add_source_alias(src.name, src)

        for name in src.names:
            self._add_source_alias(name.replace(' ', '').lower(), src)

        if isinstance(src, Source):
            self._srcs.append(src)
        else:
            self._diffuse_srcs.append(src)

        if build_index:
            self._build_src_index()