code: def _generate_O(self, L):
          
          L_aug = self._get_augmented_label_matrix(L)
          self.d = L_aug.shape[1]
          self.O = torch.from_numpy(L_aug.T @ L_aug / self.n).float()
docs: Form the overlaps matrix, which is just all the different observed
          combinations of values of pairs of sources
  
          Note that we only include the k non-abstain values of each source,
          otherwise the model not minimal --> leads to singular matrix