docs: def compartments(M, normalize=True):
      """A/B compartment analysis
  
      Perform a PCA-based A/B compartment analysis on a normalized, single
      chromosome contact map. The results are two vectors whose values (negative
      or positive) should presumably correlate with the presence of 'active'
      vs. 'inert' chromatin.
  
      Parameters
      ----------
      M : array_like
          The input, normalized contact map. Must be a single chromosome.
      normalize : bool
          Whether to normalize the matrix beforehand.
      Returns
      -------
  
      PC1 : numpy.ndarray
          A vector representing the first component.
      PC2 : numpy.ndarray
          A vector representing the second component.
      """
  
      if not type(M) is np.ndarray:
          M = np.array(M)
  
      if M.shape[0] != M.shape[1]:
          raise ValueError("Matrix is not square.")
  
      if normalize:
          N = normalize_dense(M)
      else:
          N = np.copy(M)
  
      from sklearn.decomposition import PCA
  
      pca = PCA(n_components=2)
      PC1, PC2 = pca.fit_transform(N).T
      return PC1, PC2