code: def save_test_submission(self, input_dict, dir_path):
      assert "h,r->t" in input_dict
      assert "t_pred_top10" in input_dict["h,r->t"]
  
      t_pred_top10 = input_dict["h,r->t"]["t_pred_top10"]
  
      assert (
          t_pred_top10.shape == (1359303, 10)
          and (0 <= t_pred_top10).all()
          and (t_pred_top10 < 1001).all()
      )
  
      if isinstance(t_pred_top10, torch.Tensor):
          t_pred_top10 = t_pred_top10.cpu().numpy()
  
      for i in range(len(t_pred_top10)):
          assert len(pd.unique(t_pred_top10[i])) == len(
              t_pred_top10[i]
          ), "Found duplicated tail prediction for some triplets!"
  
      t_pred_top10 = t_pred_top10.astype(np.int16)
  
      makedirs(dir_path)
      filename = osp.join(dir_path, "t_pred_wikikg90m")
      np.savez_compressed(filename, t_pred_top10=t_pred_top10)
  
imports: from typing import Optional, Union, Dict
  import os
  import shutil
  import os.path
  import torch
  import numpy
  import pandas
  from ogb.utils.url import decide_download, download_url, extract_zip, makedirs
label_desc: Use image node_id 3 for calling the WikiKG90MEvaluator obj's underlying member method code with example usage: obj.save_test_submission(input_dict, dir_path) without return types