code: def __getattr__(self, attr):
      if self is self._wrapped:
          raise YellowbrickTypeError(
              "wrapper cannot wrap itself or recursion will occur"
          )
  
      # proxy to the wrapped object
      try:
          return getattr(self._wrapped, attr)
      except AttributeError as e:
          raise YellowbrickAttributeError(
              f"neither visualizer '{self.__class__.__name__}' nor wrapped estimator '{type(self._wrapped).__name__}' have attribute '{attr}'"
          ) from e
  
imports: from yellowbrick.exceptions import YellowbrickAttributeError, YellowbrickTypeError
label_desc: Use image node_id 2 for calling the Wrapper obj's underlying member method code with example usage: obj.__getattr__(attr) and returns: getattr