
    M/Ph8                         d Z ddlZddlZddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ d Zd	 Zd
 Zd Z G d de          Z G d de          Z G d de          Z G d de          ZdS )zM
Created on Fri Jan 29 19:19:45 2021

Author: Josef Perktold
License: BSD-3

    N)stats	integrateoptimize   )
transforms)Copula)check_random_statec                     t          j        t           j                  j        dz  }d }t          j        |           }t          j        |||          d         |z  }|S )Nd   c                 Z    t          j        | t          j        |           dz
  z            S Nr   )npsqueezeexp)ts    l/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/distributions/copula/archimedean.py	integrandz_debye.<locals>.integrand   s#    z!rvayy1}-...    r   )r   finfofloat64epsr   r   quad)alphaEPSILONr   _alphadebye_values        r   _debyer      s\    hrz""&,G/ / /ZF.GV<<Q?&HKr   c                     t          j        |           } |  dz  | dz  dz  z   | dz  dz  z
  | dz  dz  z   | dz  dz  z
  | d	z  d
z  z   | dz  dz  dz  z
  }|S )z^Debye function minus 1, Taylor series approximation around zero

    function is not used
          $   i     i:    i  
   i g     l    x"=r   asarray)xdm1s     r   _debyem1_expansionr+      sy    
 	
1A2a4!Q$r'>AqDI%1V3ad8mCb5?US[78CJr   c                 l    | dk    rt          |           }nt          |           }dd|dz
  z  | z  z   }|S )a  Kendall's tau for Frank Copula

    This uses Taylor series expansion for theta <= 1.

    Parameters
    ----------
    theta : float
        Parameter of the Frank copula. (not vectorized)

    Returns
    -------
    tau : float, tau for given theta
    r   r   )_tau_frank_expansionr   )thetataur   s      r   	tau_frankr0   )   sD     zz"5))Umm!{Q'%//Jr   c                     t          j        |           } | dz  | dz  dz  z
  | dz  dz  z   | dz  dz  z
  | dz  dz  z   | d	z  d
z  dz  z
  }|S )N	      i     i     i@) i   r&   l    ^vr'   )r)   r/   s     r   r-   r-   A   sg    

1A Q3Ac>AqDJ&Ag51YFb53;}$%CJr   c                   N     e Zd ZdZd fd	Zd Zd ZddZddZdd	Z	d
 Z
 xZS )ArchimedeanCopulaaN  Base class for Archimedean copulas

    Parameters
    ----------
    transform : instance of transformation class
        Archimedean generator with required methods including first and second
        derivatives
    args : tuple
        Optional copula parameters. Copula parameters can be either provided
        when creating the instance or as arguments when calling methods.
    k_dim : int
        Dimension, number of components in the multivariate random variable.
        Currently only bivariate copulas are verified. Support for more than
        2 dimension is incomplete.
     r    c                 v    t                                          |           || _        || _        d| _        d S )N)k_dimr   )super__init__args	transformk_args)selfr?   r>   r;   	__class__s       r   r=   zArchimedeanCopula.__init__[   s7    u%%%	"r   c                     t          |t          j                  rt          |          }t          |t                    s|f}t	          |          dk    s|dk    r| j        }|S )Nr   N)
isinstancer   ndarraytuplelenr>   )rA   r>   s     r   _handle_argszArchimedeanCopula._handle_argsa   s_     dBJ'' 	;;D$&& 	7Dt99>>TW__9Dr   c                     t          j        |          }|j        d         | j        k    rdd l}|                    dt                     |S )Nr   zRu has different dimension than k_dim. This will raise exception in future versions)r   r(   shaper;   warningswarnFutureWarning)rA   urM   s      r   	_handle_uzArchimedeanCopula._handle_uo   sQ    JqMM72;$*$$OOOMM I') ) ) r   c                 @   |                      |          }|                     |          }d}| j        j        }| j        j        } | ||g|R                      |          g|R  }t          |t          j                  r|nd}t          j	        |dd|          }|S )z#Evaluate cdf of Archimedean copula.rK   Ng              ?)out)
rI   rQ   r?   evaluateinversesumrE   r   rF   clip)rA   rP   r>   axisphiphi_invcdfvrT   s           r   cdfzArchimedeanCopula.cdfy   s      &&NN1n%.(wss1}t}}}((..6666 rz22<ddwtR---r   c                                           |          }                     |          }d} j        j        }|j        d         dk    r j        j        }nO|j        d         dk    r j        j        }n1|j        d         dk    r j        j        }n|j        d          fd}  j        j        |g|R  	                    |          }t          j         ||g|R  |          }| ||g|R  z  }t          j        |          S )z#Evaluate pdf of Archimedean copula.rK   r    r3   r   c                  *     j         j        g| R  S rD   r?   derivk_inverser>   krA   s    r   psi_dz$ArchimedeanCopula.pdf.<locals>.psi_d        4t~4Q>>>>>r   )rQ   rI   r?   derivrL   deriv2_inversederiv3_inversederiv4_inverserU   rW   r   prodabs)	rA   rP   r>   rY   phi_d1rd   psipdfvrc   s	   `       @r   pdfzArchimedeanCopula.pdf   s4   NN1  &&%72;!N1EEWR[AN1EEWR[AN1EE A? ? ? ? ? ? &dn%a/$///33D99wvva'$'''..s"T"""# vd||r   c           
                                |          }                     |          }d} j        j        }|j        d         dk    r j        j        }nO|j        d         dk    r j        j        }n1|j        d         dk    r j        j        }n|j        d          fd}  j        j        |g|R  	                    |          }t          j	        t          j        t          j         ||g|R                      |          }|t          j        t          j         ||g|R                      z  }|S )z4Evaluate log pdf of multivariate Archimedean copula.rK   r    r3   r   c                  *     j         j        g| R  S rD   r`   rb   s    r   rd   z'ArchimedeanCopula.logpdf.<locals>.psi_d   re   r   )rQ   rI   r?   rf   rL   rg   rh   ri   rU   rW   r   logrk   )	rA   rP   r>   rY   rl   rd   rm   logpdfvrc   s	   `       @r   logpdfzArchimedeanCopula.logpdf   sU    NN1  &&%72;!N1EEWR[AN1EEWR[AN1EE A? ? ? ? ? ? &dn%a/$///33D99 &vva'7$'7'7'7 8 8994@@26"&s!2T!2!2!233444r   c                 ,    |                      |          S rD   )theta_from_taurA   r/   s     r   _arg_from_tauzArchimedeanCopula._arg_from_tau   s    ""3'''r   )r9   r    r9   )__name__
__module____qualname____doc__r=   rI   rQ   r]   ro   rt   rx   __classcell__rB   s   @r   r8   r8   J   s                         8   <( ( ( ( ( ( (r   r8   c                   Z     e Zd ZdZd fd	ZddZd fd	Zd fd		Zdd
ZddZ	d Z
 xZS )ClaytonCopulaa  Clayton copula.

    Dependence is greater in the negative tail than in the positive.

    .. math::

        C_\theta(u,v) = \left[ \max\left\{ u^{-\theta} + v^{-\theta} -1 ;
        0 \right\} \right]^{-1/\theta}

    with :math:`\theta\in[-1,\infty)\backslash\{0\}`.

    Nr    c                     ||f}nd}t                                          t          j                    ||           ||dk    s|dk    rt	          d          || _        d S )Nr9   r>   r;   rK   r   zTheta must be > -1 and !=0)r<   r=   r   TransfClayton
ValueErrorr.   rA   r.   r;   r>   rB   s       r   r=   zClaytonCopula.__init__   sp    8DDD133$eLLL{{eqjj !=>>>


r   r   r9   c                    t          |          }|                     |          \  }|                    || j        f          }t	          j        d|z                                |df|          }| j        dk    r!dt          j        |          |z  z
  d|z  z  }n1| j	        
                    t          j        |           |z  |          }|S )NrS   r   sizerandom_stater          )r	   rI   randomr;   r   gammarvsr   rr   r?   rV   	rA   nobsr>   r   rngthr)   vrvs	            r   r   zClaytonCopula.rvs   s     ..%%JJdj)**KR  $$4)#$FF:??bfQii!m#r2BB''"&))a<<B	r   c                 j   |                      |          }|                     |          \  }|j        d         dk    rT|dz   t          j        |d          |dz    z  z  }t          j        || z  d          dz
  }d|z  dz    |z  }|||z  z  S t                                          ||          S )NrK   r    r   rY   )rQ   rI   rL   r   rj   rW   r<   ro   )rA   rP   r>   r   abcrB   s          r   ro   zClaytonCopula.pdf   s    NN1%%72;!a2712...BF);;AqRCxb)))A-Ab&1*"AqAv:77;;q$'''r   c                 J    t                                          ||          S N)r>   r<   rt   rA   rP   r>   rB   s      r   rt   zClaytonCopula.logpdf       ww~~ad~+++r   c                     |                      |          }|                     |          \  }|j        d         }t          j        || z  d          |z
  dz   d|z  z  S )NrK   r   r   r   )rQ   rI   rL   r   rW   )rA   rP   r>   r   ds        r   r]   zClaytonCopula.cdf   sa    NN1%%GBKqbSz+++a/!3CCr   c                 $    || j         }||dz   z  S Nr    r.   rA   r.   s     r   r/   zClaytonCopula.tau   s    =JE	""r   c                     d|z  d|z
  z  S )Nr    r   r9   rw   s     r   rv   zClaytonCopula.theta_from_tau  s    3w!c'""r   r   r   r9   Nry   rD   )rz   r{   r|   r}   r=   r   ro   rt   r]   r/   rv   r~   r   s   @r   r   r      s         
 
 
 
 
 
	 	 	 		( 	( 	( 	( 	( 	(, , , , , ,D D D D# # # ## # # # # # #r   r   c                   j     e Zd ZdZd fd	ZddZd fd	Zdd	Zd fd
	ZddZ	ddZ
ddZd Z xZS )FrankCopulaa2  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`.

    Nr    c                     ||f}nd}t                                          t          j                    ||           ||dk    rt	          d          || _        d S )Nr9   r   r   zTheta must be !=0)r<   r=   r   TransfFrankr   r.   r   s       r   r=   zFrankCopula.__init__  sh    8DDD/11EJJJzz !4555


r   r   r9   c           	         t          |          }|                     |          \  }|                    || j        f          }t          j                            dt          j        |           z
  |df|          }d|z  t          j	        dt          j        t          j	        |           |z             t          j        |           dz
  z  z             z  S )NrS   r   r   r   )
r	   rI   r   r;   r   logserr   r   r   rr   )rA   r   r>   r   r   r   r)   r   s           r   r   zFrankCopula.rvs%  s     ..%%JJdj)**LR"&"++-#')#  ? ? Rx"&bfq		zA~->&?&?$&FB3KK"$4'6 "6 7 7 7 	7r   c                    |                      |          }|                     |          \  }|j        d         dk    r"t                                          ||          S t          j        | t          j        |d          z            dz
  }t          j        |           dz
  }| |z  d|z   z  }t          j        t          j        | |z            dz
  d          |z   }|dz  }||z  S )NrK   r    r   r   )	rQ   rI   rL   r<   ro   r   r   rW   rj   )
rA   rP   r>   r   g_g1numauxdenrB   s
            r   ro   zFrankCopula.pdf2  s    NN1%%72;!77;;q"%%%VRC"&,,,,--1VRC[[1_cBh!b&!gbfbS1Woo)333b8QhSyr   c                 N   |                      |          }|                     |          \  }|j        d         }t          j        dt          j        | |z            z
  d          }dt          j        |           z
  |dz
  z  }d|z  t          j        d||z  z
            z  S )NrK   r   r   r   )rQ   rI   rL   r   rj   r   rr   )rA   rP   r>   r   dimr   r   s          r   r]   zFrankCopula.cdf@  s    NN1%%gbkga"&2***444262#;;C!G,by26!cCi-0000r   c                    |                      |          }|                     |          \  }|j        d         dk    r|d         |d         }}dt          j        |           z
  }t          j        ||z            |||z   z  z
  }|dt          j        |dt          j        | |z            z
  dt          j        | |z            z
  z  z
            z  z  }|S t                                          ||          S )NrK   r    .r   .r   r   )rQ   rI   rL   r   r   rr   r<   rt   )	rA   rP   r>   r   u1u2r   ro   rB   s	           r   rt   zFrankCopula.logpdfJ  s    NN1%%72;!vY&	BBFB3KKA&a..2b>1C1rva1rvdRi'8'8#8 26B$)#4#44#6 6 7 7 7 7CJ 77>>!T***r   c                    |                      |          }|                     |          \  }|j        d         dk    rt|d         |d         }}t          j        | |z            }|t          j        |           t          j        | |z            z  t          j        | |z            z   z  }|S t          d          )zFConditional cdf of second component given the value of first.
        rK   r    r   r   #u needs to be bivariate (2 columns))rQ   rI   rL   r   r   expm1NotImplementedError)rA   rP   r>   r   r   r   cdfcs          r   cdfcond_2g1zFrankCopula.cdfcond_2g1Z  s     NN1%%72;!vY&	B6B$)$$DBHbSMMBHrTBY$7$77"(R4"9:M:MMMDK%&KLLLr   c           	      B   t          j        |          }|                     |          \  }|j        d         dk    rUt          j        dt          j        |           d|z  dz
  t          j        | |z            z  dz   z  z              |z  }|S t          d          )zFConditional pdf of second component given the value of first.
        rK   r   r   )r   r(   rI   rL   rr   r   r   r   )rA   qr   r>   r   ppfcs         r   ppfcond_2g1zFrankCopula.ppfcond_2g1h  s     Z^^%%8B<1VA2!eai262#(+;+;;a?!A A B B BDFGD K%&KLLLr   c                 2    || j         }t          |          S rD   )r.   r0   r   s     r   r/   zFrankCopula.tauv  s    =JEr   c                     t          j        t          j        j                  }t          j        t          j        j                  } fd}dk     rdnd}t          j        ||||f          }|j        d         }|S )Nc                 6                         |           z
  S )Nr   )r/   )r   rA   r/   s    r   _theta_from_tauz3FrankCopula.theta_from_tau.<locals>._theta_from_tau  s    88%8((3..r   g)\(?g      ?r    )boundsr   )	r   rr   sys
float_infominmaxr   least_squaresr)   )rA   r/   MIN_FLOAT_LOGMAX_FLOAT_LOGr   startresultr.   s   ``      r   rv   zFrankCopula.theta_from_tau}  s    s~122s~122	/ 	/ 	/ 	/ 	/ 	/ Tzzq'=H* + + +r   r   r   ry   rD   )rz   r{   r|   r}   r=   r   ro   r]   rt   r   r   r/   rv   r~   r   s   @r   r   r   
  s         
 
 
 
 
 
7 7 7 7     1 1 1 1+ + + + + + M M M MM M M M             r   r   c                   Z     e Zd ZdZd fd	ZddZd fd	Zdd	Zd fd
	ZddZ	d Z
 xZS )GumbelCopulaa  Gumbel copula.

    Dependence is greater in the positive tail than in the negative.

    .. math::

        C_\theta(u,v) = \exp\!\left[ -\left( (-\log(u))^\theta +
        (-\log(v))^\theta \right)^{1/\theta} \right]

    with :math:`\theta\in[1,\infty)`.

    Nr    c                     ||f}nd}t                                          t          j                    ||           ||dk    rt	          d          || _        d S )Nr9   r   r   zTheta must be > 1)r<   r=   r   TransfGumbelr   r.   r   s       r   r=   zGumbelCopula.__init__  sh    8DDD022UKKKzz !4555


r   r   r9   c           
         t          |          }|                     |          \  }|                    || j        f          }t          j                            d|z  ddt          j        t          j	        d|z  z            |z  |df|          }| j        dk    r2t          j
        t          j        |           |z  d|z  z             }n1| j                            t          j        |           |z  |          }|S )NrS   r   r    r   r   )r	   rI   r   r;   r   levy_stabler   r   cospir   rr   r?   rV   r   s	            r   r   zGumbelCopula.rvs  s     ..%%JJdj)**!!GRF25AF#$$* " 
 
 :??26!99*q.b2g6677BB''"&))a<<B	r   c                    |                      |          }|                     |          \  }|j        d         dk    rt          j        |           }||z  }t          j        |d          }|d|z  z  }t          j        |           }||z   dz
  }	|d|z  dz
  z  }
t          j        |d          |dz
  z  }t          j        |d          dz  }||	z  |
z  |z  |z  S t                      	                    ||          S )NrK   r    r   rS   r   )
rQ   rI   rL   r   rr   rW   r   rj   r<   ro   )rA   rP   r>   r   xyxy_thetasum_xy_thetasum_xy_theta_thetar   r   r   r   erB   s                r   ro   zGumbelCopula.pdf  s   NN1%%72;!&))BRxH6(444L!-#(!;**++A"R'#-ArA.A$$$c2A###.Aq519q=1$$77;;q$'''r   c                     |                      |          }|                     |          \  }t          j        t          j        |           |z  d          }t          j        |d|z  z             }|S )NrK   r   rS   )rQ   rI   r   rW   rr   r   )rA   rP   r>   r   hr]   s         r   r]   zGumbelCopula.cdf  sj    NN1%%FRVAYYJ2%B///faC"Ho%&&
r   c                 J    t                                          ||          S r   r   r   s      r   rt   zGumbelCopula.logpdf  r   r   c                 $    || j         }|dz
  |z  S r   r   r   s     r   r/   zGumbelCopula.tau  s    =JE	U""r   c                     dd|z
  z  S r   r9   rw   s     r   rv   zGumbelCopula.theta_from_tau  s    AG}r   r   r   ry   rD   )rz   r{   r|   r}   r=   r   ro   r]   rt   r/   rv   r~   r   s   @r   r   r     s         
 
 
 
 
 
    ( ( ( ( ( ((   , , , , , ,# # # #      r   r   )r}   r   numpyr   scipyr   r   r    r   copulasr   statsmodels.tools.rng_qrngr	   r   r+   r0   r-   r8   r   r   r   r9   r   r   <module>r      s    


     , , , , , , , , , ,             9 9 9 9 9 9  	 	 	  0  x( x( x( x( x( x( x( x(vB# B# B# B# B#% B# B# B#J@ @ @ @ @# @ @ @FQ Q Q Q Q$ Q Q Q Q Qr   