class_docstr: Python descriptor object to control getting/setting `CumlArray` attributes
  on `Base` objects. See the Estimator Guide for an in depth guide.
code: def _to_output(self, instance, to_output_type, to_output_dtype=None):
      existing = self._get_meta(instance, throw_on_missing=True)
  
      # Handle input_type==None which means we have a non-array object stored
      if existing.input_type is None:
          # Dont save in the cache. Just return the value
          return existing.values[existing.input_type]
  
      # Return a cached value if it exists
      if to_output_type in existing.values:
          return existing.values[to_output_type]
  
      # If the input type was anything but CumlArray, need to create one now
      if "cuml" not in existing.values:
          existing.values["cuml"] = input_to_cuml_array(
              existing.get_input_value(), order="K"
          ).array
  
      cuml_arr: CumlArray = existing.values["cuml"]
  
      # Do the conversion
      output = cuml_arr.to_output(
          output_type=to_output_type, output_dtype=to_output_dtype
      )
  
      # Cache the value
      existing.values[to_output_type] = output
  
      return output
  
file_path: cuml/python/cuml/common/array_descriptor.py
imports: from dataclasses import dataclass, field
  from cuml.internals.array import CumlArray
  import cuml
  from cuml.internals.input_utils import input_to_cuml_array, determine_array_type
label_desc: Use image node_id 4 for calling the CumlArrayDescriptor obj's underlying member method code with example usage: obj._to_output(instance, to_output_type, to_output_dtype) and returns: output, existing, existing