code: def testEvictFetch(self):
      cache_ids = [0, 2, 4, 8]
      ids = torch.tensor(
          [[100, 0], [101, 2], [102, 4], [103, 8]], dtype=torch.long
      )
      tensor = torch.rand((10, 4))
      origin_tensor = tensor.clone()
      ps = PS("table", [tensor], "memory://", 1024)
      ps.evict(ids)
      tensor[:, :] = 0
      ps.fetch(ids, 0).wait()
      self.assertTrue(
          torch.allclose(tensor[cache_ids], origin_tensor[cache_ids])
      )
  
file_path: torchrec/contrib/dynamic_embedding/tests/test_ps.py
imports: import unittest
  import torch
  from torchrec_dynamic_embedding.ps import PS
  from utils import register_memory_io
label_desc: Use image node_id 1 for calling the TestPS obj's underlying member method code with example usage: obj.testEvictFetch() without return types