code: def _get_module(module: Module, name: str) -> Module:
      """Recursively get a sub-module from a module.
  
      Args:
          module: A `torch.nn.Module`.
          name: The name of the submodule to return, in the form of a period-delinated
              string: `sub_module.subsub_module.[...].leaf_module`.
  
      Returns:
          The requested sub-module.
  
      Example:
          >>> gp = SingleTaskGP(train_X, train_Y)
          >>> noise_prior = _get_module(gp, "likelihood.noise_covar.noise_prior")
      """
      current = module
      if name != "":
          for a in name.split("."):
              current = getattr(current, a)
      return current
  
imports: from __future__ import annotations
  from copy import deepcopy
  from typing import Dict, Optional, Set, Tuple
  import torch
  from botorch.exceptions import UnsupportedError
  from botorch.models.gp_regression import HeteroskedasticSingleTaskGP
  from botorch.models.gp_regression_fidelity import SingleTaskMultiFidelityGP
  from botorch.models.gp_regression_mixed import MixedSingleTaskGP
  from botorch.models.gpytorch import BatchedMultiOutputGPyTorchModel
  from botorch.models.model_list_gp_regression import ModelListGP
  from botorch.models.transforms.input import InputTransform
  from botorch.models.transforms.outcome import OutcomeTransform
  from gpytorch.likelihoods.gaussian_likelihood import FixedNoiseGaussianLikelihood
  from torch import Tensor
  from torch.nn import Module
label_desc: Use image node_id 1 for calling a global function with example usage: _get_module(module, name) and returns: current