code: def Q(self):
          
          N = self.N
          tig_to_idx = self.tig_to_idx
          signs = self.signs
          Q = np.ones((N, N, BB), dtype=int) * -1  # Use -1 as the sentinel
          for (at, bt), k in self.contacts_oriented.items():
              if not (at in tig_to_idx and bt in tig_to_idx):
                  continue
              ai = tig_to_idx[at]
              bi = tig_to_idx[bt]
              ao = signs[ai]
              bo = signs[bi]
              Q[ai, bi] = k[(ao, bo)]
          return Q
docs: Contact frequency matrix when contigs are already oriented. This is s a
          similar matrix as M, but rather than having the number of links in the
          cell, it points to an array that has the actual distances.