code: def test_normalize_unnormalize(self):
      for dtype in (torch.float, torch.double):
          X = torch.tensor(
              [0.0, 0.25, 0.5], device=self.device, dtype=dtype
          ).view(-1, 1)
          expected_X_normalized = torch.tensor(
              [0.0, 0.5, 1.0], device=self.device, dtype=dtype
          ).view(-1, 1)
          bounds = torch.tensor(
              [0.0, 0.5], device=self.device, dtype=dtype
          ).view(-1, 1)
          X_normalized = normalize(X, bounds=bounds)
          self.assertTrue(
              torch.equal(expected_X_normalized, X_normalized)
          )
          self.assertTrue(
              torch.equal(X, unnormalize(X_normalized, bounds=bounds))
          )
          X2 = torch.tensor(
              [[0.25, 0.125, 0.0], [0.25, 0.0, 0.5]],
              device=self.device,
              dtype=dtype,
          ).transpose(1, 0)
          expected_X2_normalized = torch.tensor(
              [[1.0, 0.5, 0.0], [0.5, 0.0, 1.0]],
              device=self.device,
              dtype=dtype,
          ).transpose(1, 0)
          bounds2 = torch.tensor(
              [[0.0, 0.0], [0.25, 0.5]], device=self.device, dtype=dtype
          )
          X2_normalized = normalize(X2, bounds=bounds2)
          self.assertTrue(
              torch.equal(X2_normalized, expected_X2_normalized)
          )
          self.assertTrue(
              torch.equal(
                  X2, unnormalize(X2_normalized, bounds=bounds2)
              )
          )
  
imports: from typing import Any
  import torch
  from botorch.models import GenericDeterministicModel, HigherOrderGP, ModelList, PairwiseGP, SaasFullyBayesianSingleTaskGP, SingleTaskGP
  from botorch.models.fully_bayesian_multitask import SaasFullyBayesianMultiTaskGP
  from botorch.models.gp_regression_fidelity import SingleTaskMultiFidelityGP
  from botorch.models.gp_regression_mixed import MixedSingleTaskGP
  from botorch.models.model import Model
  from botorch.models.multitask import MultiTaskGP
  from botorch.utils.testing import BotorchTestCase, MockModel, MockPosterior
  from botorch.utils.transforms import _verify_output_shape, concatenate_pending_points, is_ensemble, is_fully_bayesian, match_batch_shape, normalize, normalize_indices, standardize, t_batch_mode_transform, unnormalize
  from torch import Tensor
label_desc: Use image node_id 1 for calling the TestNormalizeAndUnnormalize obj's underlying member method code with example usage: obj.test_normalize_unnormalize() without return types