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: Draw `n` in the half-open interval ``[0, 1)``.
  
  Sample the joint distribution.
  
  Parameters
  ----------
  nobs : int, optional
      Number of samples to generate in the parameter space.
      Default is 1.
  cop_args : tuple
      Copula parameters. If None, then the copula parameters will be
      taken from the ``cop_args`` attribute created 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.
  random_state : {None, int, numpy.random.Generator}, optional
      If `seed` is None then the legacy singleton NumPy generator.
      This will change after 0.13 to use a fresh NumPy ``Generator``,
      so you should explicitly pass a seeded ``Generator`` if you
      need reproducible results.
      If `seed` is an int, a new ``Generator`` instance is used,
      seeded with `seed`.
      If `seed` is already a ``Generator`` instance then that instance is
      used.
  
  Returns
  -------
  sample : array_like (n, d)
      Sample from the joint distribution.
  
  Notes
  -----
  The random samples are generated by creating a sample with uniform
  margins from the copula, and using ``ppf`` to convert uniform margins
  to the one specified by the marginal distribution.
  
  See Also
  --------
  statsmodels.tools.rng_qrng.check_random_state
docstr_tok: ["Draw","`","n","`","in","the","half-open","interval","``","[","0",",","1",")","``",".","Sample","the","joint","distribution",".","Parameters","--","--","--","--","--","nobs",":","int",",","optional","Number","of","samples","to","generate","in","the","parameter","space",".","Default","is","1.","cop_args",":","tuple","Copula","parameters",".","If","None",",","then","the","copula","parameters","will","be","taken","from","the","``","cop_args","``","attribute","created","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",".","random_state",":","{","None",",","int",",","numpy.random.Generator","}",",","optional","If","`","seed","`","is","None","then","the","legacy","singleton","NumPy","generator",".","This","will","change","after","0.13","to","use","a","fresh","NumPy","``","Generator","``",",","so","you","should","explicitly","pass","a","seeded","``","Generator","``","if","you","need","reproducible","results",".","If","`","seed","`","is","an","int",",","a","new","``","Generator","``","instance","is","used",",","seeded","with","`","seed","`",".","If","`","seed","`","is","already","a","``","Generator","``","instance","then","that","instance","is","used",".","Returns","--","--","--","-","sample",":","array_like","(","n",",","d",")","Sample","from","the","joint","distribution",".","Notes","--","--","-","The","random","samples","are","generated","by","creating","a","sample","with","uniform","margins","from","the","copula",",","and","using","``","ppf","``","to","convert","uniform","margins","to","the","one","specified","by","the","marginal","distribution",".","See","Also","--","--","--","--","statsmodels.tools.rng_qrng.check_random_state"]
code: def rvs(
      self, nobs=1, cop_args=None, marg_args=None, random_state=None
  ):
      """Draw `n` in the half-open interval ``[0, 1)``.
  
      Sample the joint distribution.
  
      Parameters
      ----------
      nobs : int, optional
          Number of samples to generate in the parameter space.
          Default is 1.
      cop_args : tuple
          Copula parameters. If None, then the copula parameters will be
          taken from the ``cop_args`` attribute created 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.
      random_state : {None, int, numpy.random.Generator}, optional
          If `seed` is None then the legacy singleton NumPy generator.
          This will change after 0.13 to use a fresh NumPy ``Generator``,
          so you should explicitly pass a seeded ``Generator`` if you
          need reproducible results.
          If `seed` is an int, a new ``Generator`` instance is used,
          seeded with `seed`.
          If `seed` is already a ``Generator`` instance then that instance is
          used.
  
      Returns
      -------
      sample : array_like (n, d)
          Sample from the joint distribution.
  
      Notes
      -----
      The random samples are generated by creating a sample with uniform
      margins from the copula, and using ``ppf`` to convert uniform margins
      to the one specified by the marginal distribution.
  
      See Also
      --------
      statsmodels.tools.rng_qrng.check_random_state
      """
      if cop_args is None:
          cop_args = self.cop_args
      if marg_args is None:
          marg_args = [()] * self.k_vars
  
      sample = self.copula.rvs(
          nobs=nobs, args=cop_args, random_state=random_state
      )
  
      for i, dist in enumerate(self.marginals):
          sample[:, i] = dist.ppf(
              0.5 + (1 - 1e-10) * (sample[:, i] - 0.5), *marg_args[i]
          )
      return sample
  
imports: from abc import ABC, abstractmethod
  import numpy
  from scipy import stats
  from statsmodels.graphics import utils
label_desc: Use image node_id 2 for calling the CopulaDistribution obj's underlying member method code with example usage: obj.rvs(nobs, cop_args, marg_args, random_state) and returns: sample