code: def determine_array_type_full(X):
      """
      Returns a tuple of the array type, and a boolean if it is sparse
  
      Parameters
      ----------
      X : array-like
          Input array to test
  
      Returns
      -------
      (string, bool) Returns a tuple of the array type string and a boolean if it
          is a sparse array.
      """
      if X is None:
          return None, None
  
      # Get the generic type
      gen_type = get_supported_input_type(X)
  
      if gen_type is None:
          return None, None
  
      return _input_type_to_str[gen_type], gen_type in _SPARSE_TYPES
  
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 4 for calling a global function with example usage: determine_array_type_full(X) and returns: _input_type_to_str,  unknown, None,  None, None,  None