code: def is_array_like(X):
      if (
          hasattr(X, "__cuda_array_interface__")
          or (
              hasattr(X, "__array_interface__")
              and not (
                  isinstance(X, global_settings.xpy.generic)
                  or isinstance(X, type)
              )
          )
          or isinstance(
              X,
              (
                  SparseCumlArray,
                  CudfSeries,
                  PandasSeries,
                  CudfDataFrame,
                  PandasDataFrame,
              ),
          )
      ):
          return True
  
      try:
          if cupyx_isspmatrix(X):
              return True
      except UnavailableError:
          pass
      try:
          if scipy_isspmatrix(X):
              return True
      except UnavailableError:
          pass
      try:
          if numba_cuda.devicearray.is_cuda_ndarray(X):
              return True
      except UnavailableError:
          pass
      return False
  
file_path: cuml/python/cuml/internals/input_utils.py
imports: from collections import namedtuple
  from cuml.internals.array import CumlArray
  from cuml.internals.array_sparse import SparseCumlArray
  from cuml.internals.global_settings import GlobalSettings
  from cuml.internals.mem_type import MemoryType
  from cuml.internals.safe_imports import cpu_only_import, cpu_only_import_from, gpu_only_import, gpu_only_import_from, safe_import, safe_import_from, null_decorator, return_false, UnavailableError
label_desc: Use image node_id 5 for calling a global function with example usage: is_array_like(X) and returns: False, True, True, True, True