code: def _compute_vline_scores(self):
          
          M, N, L = self.M, self.N, self.L
          vline_score = {}
          for x in range(M):
              laststart = [0 if (x, 0, 1, k) in self else None for k in range(L)]
              for y in range(N):
                  block = [0] * (y + 1)
                  for k in range(L):
                      if (x, y, 1, k) not in self:
                          laststart[k] = None
                      elif laststart[k] is None:
                          laststart[k] = y
                          block[y] += 1
                      elif y and (x, y, 1, k) not in self[x, y - 1, 1, k]:
                          laststart[k] = y
                      else:
                          for y1 in range(laststart[k], y + 1):
                              block[y1] += 1
                  for y1 in range(y + 1):
                      vline_score[x, y1, y] = block[y1]
          self._vline_score = vline_score
docs: Does the hard work to prepare ``vline_score``.