class_docstr: LKJCovariancePrior combines an LKJ prior over the correlation matrix
  and a user-specified prior over marginal standard deviations to return a
  prior over the full covariance matrix.
  
  Usage: LKJCovariancePrior(n, eta, sd_prior), where
      n is a positive integer, the size of the covariance matrix,
      eta is a positive shape parameter for the LKJPrior over correlations, and
      sd_prior is a scalar Prior over nonnegative numbers, which is used for
      each of the n marginal standard deviations on the covariance matrix.
code: def __init__(self, n, eta, sd_prior, validate_args=False):
      if not isinstance(sd_prior, Prior):
          raise ValueError("sd_prior must be an instance of Prior")
      if not isinstance(n, int):
          raise ValueError("n must be an integer")
      # bug-fix event shapes if necessary
      if sd_prior.event_shape not in {
          torch.Size([1]),
          torch.Size([n]),
          torch.Size([]),
      }:
          if sd_prior.event_shape == torch.Size([]):
              sd_prior._event_shape = torch.Size([1])
          raise ValueError("sd_prior must have event_shape 1 or n")
      correlation_prior = LKJPrior(
          n=n, eta=eta, validate_args=validate_args
      )
      if sd_prior.batch_shape != correlation_prior.batch_shape:
          raise ValueError("sd_prior must have same batch_shape as eta")
      TModule.__init__(self)
      self.correlation_prior = correlation_prior
      self.sd_prior = sd_prior
  
imports: import torch
  from linear_operator.utils.cholesky import psd_safe_cholesky
  from torch.distributions import constraints, LKJCholesky
  from torch.nn import Module
  from ..None import settings
  from .prior import Prior
label_desc: Use image node_id 1 to create a new LKJCovariancePrior object from inherited base classes: LKJPrior with example: obj = LKJCovariancePrior(n, eta, sd_prior, validate_args)