code: def _check_sources(self, batch: Dict[str, object]) -> None:
          
          unused_sources = [source for source in batch.keys() if source not in self._model.input_names]
          missing_sources = [source for source in self._model.input_names if source not in batch.keys()]
          # check stream sources
          if unused_sources:
              if self._on_unused_sources == 'warn' and not self._extra_sources_warned:
                  logging.warning('Some sources provided by the stream do not match model placeholders. Set '
                                  '`main_loop.on_unused_sources` to `ignore` in order to suppress this warning. '
                                  'Extra sources: %s', unused_sources)
                  self._extra_sources_warned = True
              elif self._on_unused_sources == 'error':
                  raise ValueError('Some sources provided by the stream do not match model placeholders. Set'
                                   '`main_loop.on_unused_sources` to `warn` in order to suppress this error.\n'
                                   'Extra sources: {}'.format(unused_sources))
  
          if missing_sources:
              raise ValueError('Stream does not provide all required sources. Missing sources: {}'
                               .format(missing_sources))
docs: Check for unused and missing sources.
  
          :param batch: batch to be checked
          :raise ValueError: if a source is missing or unused and ``self._on_unused_sources`` is set to ``error``