code: def hashable_rows(data, digits=None):
      
      # if there is no data return immediately
      if len(data) == 0:
          return np.array([])
  
      # get array as integer to precision we care about
      as_int = float_to_int(data, digits=digits)
  
      # if it is flat integers already, return
      if len(as_int.shape) == 1:
          return as_int
  
      # if array is 2D and smallish, we can try bitbanging
      # this is significantly faster than the custom dtype
      if len(as_int.shape) == 2 and as_int.shape[1] <= 4:
          # time for some righteous bitbanging
          # can we pack the whole row into a single 64 bit integer
          precision = int(np.floor(64 / as_int.shape[1]))
          # if the max value is less than precision we can do this
          if np.abs(as_int).max() < 2**(precision - 1):
              # the resulting package
              hashable = np.zeros(len(as_int), dtype=np.int64)
              # loop through each column and bitwise xor to combine
              # make sure as_int is int64 otherwise bit offset won't work
              for offset, column in enumerate(as_int.astype(np.int64).T):
                  # will modify hashable in place
                  np.bitwise_xor(hashable,
                                 column << (offset * precision),
                                 out=hashable)
              return hashable
  
      # reshape array into magical data type that is weird but hashable
      dtype = np.dtype((np.void, as_int.dtype.itemsize * as_int.shape[1]))
      # make sure result is contiguous and flat
      hashable = np.ascontiguousarray(as_int).view(dtype).reshape(-1)
      return hashable
docs: We turn our array into integers based on the precision
      given by digits and then put them in a hashable format.
  
      Parameters
      ---------
      data : (n, m) array
        Input data
      digits : int or None
        How many digits to add to hash if data is floating point
        If None, tol.merge will be used
  
      Returns
      ---------
      hashable : (n,) array
        Custom data type which can be sorted
        or used as hash keys