class_docstr: Multivariate copula distribution
  
  Parameters
  ----------
  copula : :class:`Copula` instance
      An instance of :class:`Copula`, e.g. :class:`GaussianCopula`,
      :class:`FrankCopula`, etc.
  marginals : list of distribution instances
      Marginal distributions.
  copargs : tuple
      Parameters for copula
  
  Notes
  -----
  Status: experimental, argument handling may still change
class_docstr_tok: ["Multivariate","copula","distribution","Parameters","--","--","--","--","--","copula",":",":","class",":","`","Copula","`","instance","An","instance","of",":","class",":","`","Copula","`",",","e.g",".",":","class",":","`","GaussianCopula","`",",",":","class",":","`","FrankCopula","`",",","etc",".","marginals",":","list","of","distribution","instances","Marginal","distributions",".","copargs",":","tuple","Parameters","for","copula","Notes","--","--","-","Status",":","experimental",",","argument","handling","may","still","change"]
docstr: Log-pdf of copula distribution.
  
  Parameters
  ----------
  y : array_like
      Values of random variable at which to evaluate cdf.
      If 2-dimensional, then components of multivariate random variable
      need to be in columns
  cop_args : tuple
      Copula parameters. If None, then the copula parameters will be
      taken from the ``cop_args`` attribute creating when initiializing
      the instance.
  marg_args : list of tuples
      Parameters for the marginal distributions. It can be None if none
      of the marginal distributions have parameters, otherwise it needs
      to be a list of tuples with the same length has the number of
      marginal distributions. The list can contain empty tuples for
      marginal distributions that do not take parameter arguments.
  
  Returns
  -------
  log-pdf values
docstr_tok: ["Log-pdf","of","copula","distribution",".","Parameters","--","--","--","--","--","y",":","array_like","Values","of","random","variable","at","which","to","evaluate","cdf",".","If","2-dimensional",",","then","components","of","multivariate","random","variable","need","to","be","in","columns","cop_args",":","tuple","Copula","parameters",".","If","None",",","then","the","copula","parameters","will","be","taken","from","the","``","cop_args","``","attribute","creating","when","initiializing","the","instance",".","marg_args",":","list","of","tuples","Parameters","for","the","marginal","distributions",".","It","can","be","None","if","none","of","the","marginal","distributions","have","parameters",",","otherwise","it","needs","to","be","a","list","of","tuples","with","the","same","length","has","the","number","of","marginal","distributions",".","The","list","can","contain","empty","tuples","for","marginal","distributions","that","do","not","take","parameter","arguments",".","Returns","--","--","--","-","log-pdf","values"]
code: def logpdf(self, y, cop_args=None, marg_args=None):
      """Log-pdf of copula distribution.
  
      Parameters
      ----------
      y : array_like
          Values of random variable at which to evaluate cdf.
          If 2-dimensional, then components of multivariate random variable
          need to be in columns
      cop_args : tuple
          Copula parameters. If None, then the copula parameters will be
          taken from the ``cop_args`` attribute creating when initiializing
          the instance.
      marg_args : list of tuples
          Parameters for the marginal distributions. It can be None if none
          of the marginal distributions have parameters, otherwise it needs
          to be a list of tuples with the same length has the number of
          marginal distributions. The list can contain empty tuples for
          marginal distributions that do not take parameter arguments.
  
      Returns
      -------
      log-pdf values
  
      """
      y = np.asarray(y)
      if cop_args is None:
          cop_args = self.cop_args
      if marg_args is None:
          marg_args = tuple([()] * y.shape[-1])
  
      lpdf = 0.0
      cdf_marg = []
      for i in range(self.k_vars):
          lpdf += self.marginals[i].logpdf(y[..., i], *marg_args[i])
          cdf_marg.append(
              self.marginals[i].cdf(y[..., i], *marg_args[i])
          )
  
      u = np.column_stack(cdf_marg)
      if y.ndim == 1:
          u = u.squeeze()
  
      lpdf += self.copula.logpdf(u, cop_args)
      return lpdf
  
imports: from abc import ABC, abstractmethod
  import numpy
  from scipy import stats
  from statsmodels.graphics import utils
label_desc: Use image node_id 5 for calling the CopulaDistribution obj's underlying member method code with example usage: obj.logpdf(y, cop_args, marg_args) and returns: lpdf