docs: def decompose_C(self):
          """eigen-decompose self.C and update self.dC, self.C, self.B.
  
          Known bugs: this might give a runtime error with
          CMA_diagonal / separable option on.
  
          """
          if self.opts['CMA_diagonal']:
              _print_warning("this might fail with CMA_diagonal option on",
                         iteration=self.countiter)
              print(self.opts['CMA_diagonal'])
  
          #  print(' %.19e' % self.C[0][0])
          self.C = (self.C + self.C.T) / 2
          self.dC = np.diag(self.C).copy()
          self.D, self.B = self.opts['CMA_eigenmethod'](self.C)
   #       self.B = np.round(self.B, 10)
   #       for i in rglen(self.D):
   #           d = self.D[i]
   #           oom = np.round(np.log10(d))
   #           self.D[i] = 10**oom * np.round(d / 10**oom, 10)
          # print(' %.19e' % self.C[0][0])
          # print(' %.19e' % self.D[0])
          if any(self.D <= 0):
              _print_warning("ERROR", iteration=self.countiter)
              raise ValueError("covariance matrix was not positive definite," +
              " this must be considered as a bug")
          self.D = self.D**0.5
          assert all(isfinite(self.D))
          idx = np.argsort(self.D)
          self.D = self.D[idx]
          self.B = self.B[:, idx]  # self.B[i] is a row, columns self.B[:,i] are eigenvectors
          self.count_eigen += 1