code: def test_NormalizeIndices(self) -> None:
      indices = [0, 2]
      nlzd_indices = normalize_indices(indices, 3)
      self.assertEqual(nlzd_indices, indices)
      nlzd_indices = normalize_indices(indices, 4)
      self.assertEqual(nlzd_indices, indices)
      indices = [0, -1]
      nlzd_indices = normalize_indices(indices, 3)
      self.assertEqual(nlzd_indices, [0, 2])
      with self.assertRaises(ValueError):
          nlzd_indices = normalize_indices([3], 3)
      with self.assertRaises(ValueError):
          nlzd_indices = normalize_indices([-4], 3)
  
file_path: Ax/ax/models/tests/test_torch_model_utils.py
imports: import numpy
  import torch
  from ax.exceptions.model import ModelError
  from ax.models.torch.utils import _generate_sobol_points, is_noiseless, normalize_indices, subset_model, tensor_callable_to_array_callable
  from ax.utils.common.testutils import TestCase
  from botorch.models import HeteroskedasticSingleTaskGP, ModelListGP, SingleTaskGP
  from torch import Tensor
label_desc: Use image node_id 2 for calling the TorchUtilsTest obj's underlying member method code with example usage: obj.test_NormalizeIndices() without return types