docs: def sample(self, means, covs, idxs, epsilons=None):
          """
          Sample the epsilons and apply the corrections to the means.
          This method is called only if there are nonzero covs.
  
          :param means:
             array of E' loss ratios
          :param covs:
             array of E' floats
          :param idxs:
             array of E booleans with E >= E'
          :param epsilons:
             array of E floats (or None)
          :returns:
             array of E' loss ratios
          """
          if epsilons is None:
              return means
          self.set_distribution(epsilons)
          res = self.distribution.sample(means, covs, means * covs, idxs)
          return res