docs: def eval(self, restore_model_path: Optional[str]=None) -> None:
          """ Evaluates the model on a test set."""
  
          saver = tf.train.Saver()
          with tf.Session(config=allow_growth_config) as sess:
              if restore_model_path:
                  logger.info("restoring model from %s", restore_model_path)
                  saver.restore(sess, restore_model_path)
              else:
                  assert self.saved_model_path, "{}".format(self.saved_model_path)
                  logger.info("restoring model from %s", self.saved_model_path)
                  saver.restore(sess, self.saved_model_path)
  
              test_x, test_x_lens, test_y = self.corpus_reader.test_batch()
  
              feed_dict = {self.batch_x: test_x,
                           self.batch_x_lens: test_x_lens,
                           self.batch_y: test_y}
  
              test_ler, dense_decoded, dense_ref = sess.run(
                  [self.ler, self.dense_decoded, self.dense_ref],
                  feed_dict=feed_dict)
              hyps, refs = self.corpus_reader.human_readable_hyp_ref(
                  dense_decoded, dense_ref)
              # Log hypotheses
              hyps_dir = os.path.join(self.exp_dir, "test")
              if not os.path.isdir(hyps_dir):
                  os.mkdir(hyps_dir)
              with open(os.path.join(hyps_dir, "hyps"), "w",
                        encoding=ENCODING) as hyps_f:
                  for hyp in hyps:
                      print(" ".join(hyp), file=hyps_f)
              with open(os.path.join(hyps_dir, "refs"), "w",
                        encoding=ENCODING) as refs_f:
                  for ref in refs:
                      print(" ".join(ref), file=refs_f)
  
              test_per = utils.batch_per(hyps, refs)
              assert test_per == test_ler
              with open(os.path.join(hyps_dir, "test_per"), "w",
                        encoding=ENCODING) as per_f:
                  print("LER: %f" % (test_ler), file=per_f)