code: def constraint_for_parameter_name(self, param_name):
      base_module = self
      base_name = param_name
  
      while "." in base_name:
          components = base_name.split(".")
          submodule_name = components[0]
          submodule = getattr(base_module, submodule_name)
  
          base_module = submodule
          base_name = ".".join(components[1:])
  
      try:
          constraint_name = base_name + "_constraint"
          return base_module._constraints.get(constraint_name)
      except (
          AttributeError
      ):  # submodule may not always be a gpytorch module
          return None
  
imports: import copy
  import inspect
  import itertools
  import operator
  from collections import OrderedDict
  from typing import Union
  import torch
  from linear_operator.operators import LinearOperator
  from torch import nn, Tensor
  from torch.distributions import Distribution
  from .constraints import Interval
label_desc: Use image node_id 21 for calling the Module obj's underlying member method code with example usage: obj.constraint_for_parameter_name(param_name) and returns: base_module, None