code: def test_hash_per_feature_ids_per_feature(self) -> None:
      dataset = RandomRecDataset(
          keys=["feat1", "feat2"],
          batch_size=16,
          hash_sizes=[100, 200],
          ids_per_features=[100, 200],
          min_ids_per_features=[100, 200],
          num_dense=5,
      )
  
      example = next(iter(dataset))
      dense = example.dense_features
      self.assertEqual(dense.shape, (16, 5))
  
      labels = example.labels
      self.assertEqual(labels.shape, (16,))
  
      sparse = example.sparse_features
      self.assertEqual(sparse.stride(), 16)
  
      feat1 = sparse["feat1"].to_dense()
      self.assertEqual(len(feat1), 16)
      for batch in feat1:
          self.assertEqual(len(batch), 100)
  
      feat2 = sparse["feat2"].to_dense()
      self.assertEqual(len(feat2), 16)
      for batch in feat2:
          self.assertEqual(len(batch), 200)
  
file_path: torchrec/torchrec/datasets/tests/test_random.py
imports: import itertools
  import unittest
  from torchrec.datasets.random import RandomRecDataset
label_desc: Use image node_id 1 for calling the RandomDataLoader obj's underlying member method code with example usage: obj.test_hash_per_feature_ids_per_feature() without return types