docstr: Method gives access to the correct format of cuml Array attribute to
  the users and proxies attributes to the underlying trained model.
  
  If the attribute being requested is not directly on the local object,
  this function will see if the local object contains the attribute
  prefixed with an _. In the case the attribute does not exist on this
  local instance, the request will be proxied to self.internal_model and
  will be fetched either locally or remotely depending on whether
  self.internal_model is a local object instance or a future.
docstr_tok: ["Method","gives","access","to","the","correct","format","of","cuml","Array","attribute","to","the","users","and","proxies","attributes","to","the","underlying","trained","model",".","If","the","attribute","being","requested","is","not","directly","on","the","local","object",",","this","function","will","see","if","the","local","object","contains","the","attribute","prefixed","with","an","_",".","In","the","case","the","attribute","does","not","exist","on","this","local","instance",",","the","request","will","be","proxied","to","self.internal_model","and","will","be","fetched","either","locally","or","remotely","depending","on","whether","self.internal_model","is","a","local","object","instance","or","a","future","."]
code: def __getattr__(self, attr):
      """
      Method gives access to the correct format of cuml Array attribute to
      the users and proxies attributes to the underlying trained model.
  
      If the attribute being requested is not directly on the local object,
      this function will see if the local object contains the attribute
      prefixed with an _. In the case the attribute does not exist on this
      local instance, the request will be proxied to self.internal_model and
      will be fetched either locally or remotely depending on whether
      self.internal_model is a local object instance or a future.
      """
      real_name = "_" + attr
  
      ret_attr = None
  
      # First check locally for _ prefixed attr
      if real_name in self.__dict__:
          ret_attr = self.__dict__[real_name]
  
      # Otherwise, if the actual attribute name exists on the
      # object, just return it.
      elif attr in self.__dict__:
          ret_attr = self.__dict__[attr]
  
      # If we didn't have an attribute on the local model, we might
      # have it on the distributed model.
      internal_model = self._get_internal_model()
      if ret_attr is None and internal_model is not None:
          if isinstance(internal_model, Base):
              # If model is not distributed, just return the
              # requested attribute
              ret_attr = getattr(internal_model, attr)
          else:
              # Otherwise, fetch the attribute from the distributed
              # model and return it
              ret_attr = BaseEstimator._get_model_attr(
                  internal_model, attr
              ).compute()
      else:
          raise AttributeError(
              "Attribute %s not found in %s" % (attr, type(self))
          )
  
      if isinstance(ret_attr, CumlArray):
          # Dask wrappers aren't meant to be pickled, so we can
          # store the raw type on the instance
          return ret_attr.to_output(self.output_type)
      else:
          return ret_attr
  
imports: from distributed.client import Future
  from functools import wraps
  from dask_cudf.core import Series
  from cuml.internals.safe_imports import gpu_only_import_from
  from cuml.internals.base import Base
  from cuml.internals import BaseMetaClass
  from cuml.dask.common import parts_to_ranks
  from cuml.dask.common.input_utils import DistributedDataHandler
  from raft_dask.common.comms import Comms
  from cuml.dask.common.utils import wait_and_raise_from_futures
  from cuml.internals.array import CumlArray
  from cuml.dask.common.utils import get_client
  from collections.abc import Iterable
  from toolz import first
  from cuml.internals.safe_imports import cpu_only_import
  import dask
  import cudf.comm.serialize
  from cuml.internals.safe_imports import gpu_only_import
label_desc: Use image node_id 9 for calling the BaseEstimator obj's underlying member method code with example usage: obj.__getattr__(attr) and returns: ret_attr, ret_attr