code: def make_diffuse_comp_info(self, source_name, source_ver, diffuse_dict,
                                 components=None, comp_key=None):
          
          model_type = diffuse_dict['model_type']
          sourcekey = '%s_%s' % (source_name, source_ver)
          if comp_key is None:
              template_name = self.make_template_name(model_type, sourcekey)
              srcmdl_name = self.make_xml_name(sourcekey)
          else:
              template_name = self.make_template_name(
                  model_type, "%s_%s" % (sourcekey, comp_key))
              srcmdl_name = self.make_xml_name("%s_%s" % (sourcekey, comp_key))
  
          template_name = self._name_factory.fullpath(localpath=template_name)
          srcmdl_name = self._name_factory.fullpath(localpath=srcmdl_name)
  
          kwargs = dict(source_name=source_name,
                        source_ver=source_ver,
                        model_type=model_type,
                        srcmdl_name=srcmdl_name,
                        components=components,
                        comp_key=comp_key)
          kwargs.update(diffuse_dict)
          if model_type == 'IsoSource':
              kwargs['Spectral_Filename'] = template_name
              return IsoComponentInfo(**kwargs)
          elif model_type == 'MapCubeSource':
              kwargs['Spatial_Filename'] = template_name
              return MapCubeComponentInfo(**kwargs)
          elif model_type == 'SpatialMap':
              kwargs['Spatial_Filename'] = template_name
              return SpatialMapComponentInfo(**kwargs)
          else:
              raise ValueError("Unexpected model type %s" % model_type)
docs: Make a dictionary mapping the merged component names to list of template files
  
          Parameters
          ----------
  
          source_name : str
             Name of the source
          source_ver : str
             Key identifying the version of the source
          diffuse_dict : dict
             Information about this component
          comp_key : str
             Used when we need to keep track of sub-components, i.e.,
             for moving and selection dependent sources.
  
          Returns `model_component.ModelComponentInfo` or
          `model_component.IsoComponentInfo`