code: def _get_values(
      values,
      skipna,
      fill_value=None,
      fill_value_typ=None,
      isfinite=False,
      copy=True,
      mask=None,
  ):
      """utility to get the values view, mask, dtype
      if necessary copy and mask using the specified fill_value
      copy = True will force the copy
      """
  
      if is_datetime64tz_dtype(values):
          # com.values_from_object returns M8[ns] dtype instead of tz-aware,
          #  so this case must be handled separately from the rest
          dtype = values.dtype
          values = getattr(values, "_values", values)
      else:
          values = com.values_from_object(values)
          dtype = values.dtype
  
      if mask is None:
          if isfinite:
              mask = _isfinite(values)
          else:
              mask = isna(values)
  
      if is_datetime_or_timedelta_dtype(
          values
      ) or is_datetime64tz_dtype(values):
          # changing timedelta64/datetime64 to int64 needs to happen after
          #  finding `mask` above
          values = getattr(values, "asi8", values)
          values = values.view(np.int64)
  
      dtype_ok = _na_ok_dtype(dtype)
  
      # get our fill value (in case we need to provide an alternative
      # dtype for it)
      fill_value = _get_fill_value(
          dtype, fill_value=fill_value, fill_value_typ=fill_value_typ
      )
  
      if skipna:
          if copy:
              values = values.copy()
          if dtype_ok:
              np.putmask(values, mask, fill_value)
  
          # promote if needed
          else:
              values, changed = maybe_upcast_putmask(
                  values, mask, fill_value
              )
  
      elif copy:
          values = values.copy()
  
      # return a platform independent precision dtype
      dtype_max = dtype
      if is_integer_dtype(dtype) or is_bool_dtype(dtype):
          dtype_max = np.int64
      elif is_float_dtype(dtype):
          dtype_max = np.float64
  
      return values, mask, dtype, dtype_max, fill_value
  
imports: from distutils.version import LooseVersion
  import functools
  import itertools
  import operator
  import warnings
  import numpy
  from pandas._libs import iNaT, lib, tslibs
  import pandas.compat
  from pandas.core.dtypes.cast import _int64_max, maybe_upcast_putmask
  from pandas.core.dtypes.common import _get_dtype, is_any_int_dtype, is_bool_dtype, is_complex, is_complex_dtype, is_datetime64_dtype, is_datetime64tz_dtype, is_datetime_or_timedelta_dtype, is_float, is_float_dtype, is_integer, is_integer_dtype, is_numeric_dtype, is_object_dtype, is_scalar, is_timedelta64_dtype, pandas_dtype
  from pandas.core.dtypes.dtypes import DatetimeTZDtype
  from pandas.core.dtypes.missing import isna, na_value_for_dtype, notna
  import pandas.core.common
  from pandas.core.config import get_option
label_desc: Use image node_id 5 for calling a global function with example usage: _get_values(values, skipna, fill_value, fill_value_typ, isfinite, copy, mask) and returns: values,  mask,  dtype,  dtype_max,  fill_value