code: def test_invalid_train_perc(self) -> None:
      datapipe = _DummyDataReader(123)
      with self.assertRaisesRegex(ValueError, "train_perc"):
          train_datapipe, val_datapipe = idx_split_train_val(
              datapipe, 0.0
          )
      with self.assertRaisesRegex(ValueError, "train_perc"):
          train_datapipe, val_datapipe = idx_split_train_val(
              datapipe, 1.0
          )
      with self.assertRaisesRegex(ValueError, "train_perc"):
          train_datapipe, val_datapipe = idx_split_train_val(
              datapipe, 10.2
          )
      with self.assertRaisesRegex(ValueError, "train_perc"):
          train_datapipe, val_datapipe = idx_split_train_val(
              datapipe, -50.15
          )
  
imports: import random
  import unittest
  from typing import Any, Iterator, List, Tuple
  from unittest.mock import Mock, patch
  from torch.utils.data import IterDataPipe
  from torchrec.datasets.utils import idx_split_train_val, ParallelReadConcat, rand_split_train_val
label_desc: Use image node_id 3 for calling the TestIdxSplitTrainVal obj's underlying member method code with example usage: obj.test_invalid_train_perc() without return types