code: def get_data_iters_and_vocabs(args: argparse.Namespace,
                                model_folder: Optional[str]) -> Tuple['data_io.BaseParallelSampleIter',
                                                                      List[vocab.Vocab], vocab.Vocab, model.ModelConfig]:
      
  
      model_config = model.SockeyeModel.load_config(os.path.join(args.model, C.CONFIG_NAME))
  
      if args.max_seq_len is None:
          max_seq_len_source = model_config.config_data.max_seq_len_source
          max_seq_len_target = model_config.config_data.max_seq_len_target
      else:
          max_seq_len_source, max_seq_len_target = args.max_seq_len
  
      batch_num_devices = 1 if args.use_cpu else sum(-di if di < 0 else 1 for di in args.device_ids)
  
      # Load the existing vocabs created when starting the training run.
      source_vocabs = vocab.load_source_vocabs(model_folder)
      target_vocab = vocab.load_target_vocab(model_folder)
  
      sources = [args.source] + args.source_factors
      sources = [str(os.path.abspath(source)) for source in sources]
  
      score_iter = data_io.get_scoring_data_iters(
          sources=sources,
          target=os.path.abspath(args.target),
          source_vocabs=source_vocabs,
          target_vocab=target_vocab,
          batch_size=args.batch_size,
          batch_num_devices=batch_num_devices,
          max_seq_len_source=max_seq_len_source,
          max_seq_len_target=max_seq_len_target)
  
      return score_iter, source_vocabs, target_vocab, model_config
docs: Loads the data iterators and vocabularies.
  
      :param args: Arguments as returned by argparse.
      :param model_folder: Output folder.
      :return: The scoring data iterator as well as the source and target vocabularies.