docs: def check_dupl_sources(self):  # used in print_csm_info
          """
          Extracts duplicated sources, i.e. sources with the same source_id in
          different source groups. Raise an exception if there are sources with
          the same ID which are not duplicated.
  
          :returns: a list of list of sources, ordered by source_id
          """
          dd = collections.defaultdict(list)
          for src_group in self.src_groups:
              for src in src_group:
                  try:
                      srcid = src.source_id
                  except AttributeError:  # src is a Node object
                      srcid = src['id']
                  dd[srcid].append(src)
          dupl = []
          for srcid, srcs in sorted(dd.items()):
              if len(srcs) > 1:
                  _assert_equal_sources(srcs)
                  dupl.append(srcs)
          return dupl