docs: def _build_mask(self):
          """Build mask applied to O^{-1}, O for the matrix approx constraint"""
          self.mask = torch.ones(self.d, self.d).byte()
          for ci in self.c_data.values():
              si, ei = ci["start_index"], ci["end_index"]
              for cj in self.c_data.values():
                  sj, ej = cj["start_index"], cj["end_index"]
  
                  # Check if ci and cj are part of the same maximal clique
                  # If so, mask out their corresponding blocks in O^{-1}
                  if len(ci["max_cliques"].intersection(cj["max_cliques"])) > 0:
                      self.mask[si:ei, sj:ej] = 0
                      self.mask[sj:ej, si:ei] = 0