code: def test_subset_active_exponential_decay_function_batch(self):
      a = torch.tensor(
          [[1.0, 0.0], [2.0, 0.0], [3.0, 0.0], [4.0, 0.0]]
      ).view(2, 2, 2)
      b = torch.tensor([[5.0, 6.0], [7.0, 8.0]]).view(2, 2, 1)
      lengthscale = 1
      power = 1
      offset = 1
  
      kernel = ExponentialDecayKernel(
          batch_shape=torch.Size([2]), active_dims=[0]
      )
      kernel.initialize(
          lengthscale=lengthscale, power=power, offset=offset
      )
      kernel.eval()
  
      actual = torch.zeros(2, 2, 2)
  
      diff = torch.tensor([[7.0, 8.0], [8.0, 9.0]])
      actual[0, :, :] = offset + torch.tensor([1.0]).div(
          diff.pow(power)
      )
  
      diff = torch.tensor([[11.0, 12.0], [12.0, 13.0]])
      actual[1, :, :] = offset + torch.tensor([1.0]).div(
          diff.pow(power)
      )
  
      res = kernel(a, b).to_dense()
      self.assertLess(torch.linalg.norm(res - actual), 1e-5)
  
imports: import torch
  from botorch.models.kernels.exponential_decay import ExponentialDecayKernel
  from botorch.utils.testing import BotorchTestCase
  from gpytorch.priors.torch_priors import GammaPrior, NormalPrior
  from gpytorch.test.base_kernel_test_case import BaseKernelTestCase
label_desc: Use image node_id 4 for calling the TestExponentialDecayKernel obj's underlying member method code with example usage: obj.test_subset_active_exponential_decay_function_batch() without return types