code: def sample(self, mu):
          
          # in numpy.random.gamma, `shape` is the parameter sometimes denoted by
          # `k` that corresponds to `nu` in S. Wood (2006) Table 2.1
          shape = 1. / self.scale
          # in numpy.random.gamma, `scale` is the parameter sometimes denoted by
          # `theta` that corresponds to mu / nu in S. Wood (2006) Table 2.1
          scale = mu / shape
          return np.random.gamma(shape=shape, scale=scale, size=None)
docs: Return random samples from this Gamma distribution.
  
          Parameters
          ----------
          mu : array-like of shape n_samples or shape (n_simulations, n_samples)
              expected values
  
          Returns
          -------
          random_samples : np.array of same shape as mu