class_docstr: Frank copula.
  
  Dependence is symmetric.
  
  .. math::
  
      C_\theta(\mathbf{u}) = -\frac{1}{\theta} \log \left[ 1-
      \frac{ \prod_j (1-\exp(- \theta u_j)) }{ (1 - \exp(-\theta)-1)^{d -
      1} } \right]
  
  with :math:`\theta\in \mathbb{R}\backslash\{0\}, \mathbf{u} \in [0, 1]^d`.
class_docstr_tok: ["Frank","copula",".","Dependence","is","symmetric",".","..","math",":",":","C_\\theta","(","\\mathbf","{","u","}",")","=","-\\frac","{","1","}","{","\\theta","}","\\log","\\left","[","1-","\\frac","{","\\prod_j","(","1-\\exp","(","-","\\theta","u_j",")",")","}","{","(","1","-","\\exp","(","-\\theta",")","-1",")","^","{","d","-","1","}","}","\\right","]","with",":","math",":","`","\\theta\\in","\\mathbb","{","R","}","\\backslash\\","{","0\\","}",",","\\mathbf","{","u","}","\\in","[","0",",","1","]","^d","`","."]
code: def logpdf(self, u, args=()):
      u = self._handle_u(u)
      (th,) = self._handle_args(args)
      if u.shape[-1] == 2:
          # bivariate case
          u1, u2 = u[..., 0], u[..., 1]
          b = 1 - np.exp(-th)
          pdf = np.log(th * b) - th * (u1 + u2)
          pdf -= 2 * np.log(
              b - (1 - np.exp(-th * u1)) * (1 - np.exp(-th * u2))
          )
          return pdf
      else:
          # for now use generic from base Copula class, log(self.pdf(...))
          # we skip Archimedean logpdf, that uses numdiff
          return super().logpdf(u, args)
  
imports: import sys
  import numpy
  from scipy import stats, integrate, optimize
  from .None import transforms
  from .copulas import Copula
  from statsmodels.tools.rng_qrng import check_random_state
label_desc: Use image node_id 5 for calling the FrankCopula obj's underlying member method code with example usage: obj.logpdf(u, args) and returns: pdf, super