code: def _factorize_array(values, na_sentinel=-1, size_hint=None,
                       na_value=None):
      
      (hash_klass, _), values = _get_data_algo(values, _hashtables)
  
      table = hash_klass(size_hint or len(values))
      uniques, labels = table.factorize(values, na_sentinel=na_sentinel,
                                        na_value=na_value)
  
      labels = ensure_platform_int(labels)
      return labels, uniques
docs: Factorize an array-like to labels and uniques.
  
      This doesn't do any coercion of types or unboxing before factorization.
  
      Parameters
      ----------
      values : ndarray
      na_sentinel : int, default -1
      size_hint : int, optional
          Passsed through to the hashtable's 'get_labels' method
      na_value : object, optional
          A value in `values` to consider missing. Note: only use this
          parameter when you know that you don't have any values pandas would
          consider missing in the array (NaN for float data, iNaT for
          datetimes, etc.).
  
      Returns
      -------
      labels, uniques : ndarray