code: def _cellMask(self, index):
          
          row = index.row()
          col = index.column()
          if (row < 0 or row >= self.rowCount() or col < 0 or col >= self.columnCount()):
              return None
  
          # The check above should have returned None if the sliced array is None
          assert self._slicedArray is not None, "Sanity check failed."
  
          nFields = len(self._fieldNames)
          mask = self._slicedArray.mask
          if is_an_array(mask):
              if self._separateFieldOrientation == Qt.Horizontal:
                  maskValue = mask[row, col // nFields][self._fieldNames[col % nFields]]
              elif self._separateFieldOrientation == Qt.Vertical:
                  maskValue = mask[row // nFields, col][self._fieldNames[row % nFields]]
              else:
                  maskValue = mask[row, col]
          else:
              maskValue = mask
  
          # Here maskValue can still be a list in case of structured arrays. It can even still be
          # a numpy array in case of a structured array with sub arrays as fields
          if is_an_array(maskValue):
              allMasked = np.all(maskValue)
          else:
              try:
                  allMasked = all(maskValue)
              except TypeError as ex:
                  allMasked = bool(maskValue)
  
          return allMasked
docs: Returns the data mask of the cell at the index (without any string conversion)