code: def get_attribute(obj, attr: str):
      """Like `getattr` but works with hierarchical attribute specification.
      E.g. if obj=Zoo(), and attr="tiger.age", get_attribute(obj, attr),
      would return the Zoo's tiger's age.
      """
      attr_names = attr.split(".")
      while attr_names:
          obj = getattr(obj, attr_names.pop(0))
      return obj
  
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 6 for calling a global function with example usage: get_attribute(obj, attr) and returns: obj