code: def test_get_shape_from_npy(self) -> None:
      num_rows = 10
      with self._create_dataset_npys(num_rows=num_rows) as (
          dense_path,
          sparse_path,
          labels_path,
      ):
          dense_shape = BinaryCriteoUtils.get_shape_from_npy(dense_path)
          sparse_shape = BinaryCriteoUtils.get_shape_from_npy(
              sparse_path
          )
          labels_shape = BinaryCriteoUtils.get_shape_from_npy(
              labels_path
          )
          self.assertEqual(dense_shape, (num_rows, INT_FEATURE_COUNT))
          self.assertEqual(sparse_shape, (num_rows, CAT_FEATURE_COUNT))
          self.assertEqual(labels_shape, (num_rows, 1))
  
imports: import contextlib
  import math
  import os
  import random
  import tempfile
  from typing import Any, Dict, List, Optional
  import numpy
  from torch.utils.data import DataLoader
  from torchrec.datasets.criteo import BinaryCriteoUtils, CAT_FEATURE_COUNT, criteo_kaggle, criteo_terabyte, InMemoryBinaryCriteoIterDataPipe, INT_FEATURE_COUNT
  from torchrec.datasets.test_utils.criteo_test_utils import CriteoTest
  from torchrec.datasets.utils import Batch
label_desc: Use image node_id 2 for calling the TestBinaryCriteoUtils obj's underlying member method code with example usage: obj.test_get_shape_from_npy() without return types