code: def sample_niw(mu,lmbda,kappa,nu):
      '''
      Returns a sample from the normal/inverse-wishart distribution, conjugate
      prior for (simultaneously) unknown mean and unknown covariance in a
      Gaussian likelihood model. Returns covariance.
      '''
      # code is based on Matlab's method
      # reference: p. 87 in Gelman's Bayesian Data Analysis
      assert nu > lmbda.shape[0] and kappa > 0
  
      # first sample Sigma ~ IW(lmbda,nu)
      lmbda = sample_invwishart(lmbda,nu)
      # then sample mu | Lambda ~ N(mu, Lambda/kappa)
      mu = np.random.multivariate_normal(mu,lmbda / kappa)
  
      return mu, lmbdf sample_niw(mu,lmbda,kappa,nu):
      '''
      Returns a sample from the normal/inverse-wishart distribution, conjugate
      prior for (simultaneously) unknown mean and unknown covariance in a
      Gaussian likelihood model. Returns covariance.
      '''
      # code is based on Matlab's method
      # reference: p. 87 in Gelman's Bayesian Data Analysis
      assert nu > lmbda.shape[0] and kappa > 0
  
      # first sample Sigma ~ IW(lmbda,nu)
      lmbda = sample_invwishart(lmbda,nu)
      # then sample mu | Lambda ~ N(mu, Lambda/kappa)
      mu = np.random.multivariate_normal(mu,lmbda / kappa)
  
      return mu, lmbda
docs: Returns a sample from the normal/inverse-wishart distribution, conjugate
      prior for (simultaneously) unknown mean and unknown covariance in a
      Gaussian likelihood model. Returns covariance.