U
    Ãmœd$  ã                   @   s¾   d Z ddlZddlmZ ddlmZmZ G dd„ dƒZG dd„ deƒZ	e	ƒ Z
G d	d
„ d
eƒZeƒ ZG dd„ deƒZeƒ ZG dd„ deƒZeƒ ZG dd„ deƒZeƒ ZG dd„ deƒZeƒ ZdS )z‹ Pickand's dependence functions as generators for EV-copulas


Created on Wed Jan 27 14:33:40 2021

Author: Josef Perktold
License: BSD-3

é    N)Ústats)Ú_approx_fprime_cs_scalarÚapprox_hessc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚPickandDependencec                 O   s   | j ||ŽS ©N)Úevaluate)ÚselfÚargsÚkwargs© r   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/distributions/copula/depfunc_ev.pyÚ__call__   s    zPickandDependence.__call__c                 G   s   t ‚d S r   )ÚNotImplementedError©r   Útr	   r   r   r   r      s    zPickandDependence.evaluatec                 G   s   t  |¡}t|| jƒS )zkFirst derivative of the dependence function

        implemented through numerical differentiation
        )ÚnpZ
atleast_1dr   r   r   r   r   r   Úderiv   s    
zPickandDependence.derivc                    sD   t  |¡dkr&t|gˆjˆ d�d }nt  ‡ ‡fdd„|D ƒ¡}|S )zlSecond derivative of the dependence function

        implemented through numerical differentiation
        é   ©r	   r   c                    s"   g | ]}t |gˆjˆ d �d ‘qS )r   )r   r   )r   r   )Ú.0Úti©r	   r   r   r   Ú
<listcomp>)   s   ÿz,PickandDependence.deriv2.<locals>.<listcomp>)r   Úsizer   r   Úarray)r   r   r	   Úd2r   r   r   Úderiv2!   s    ÿzPickandDependence.deriv2N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s   r   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚAsymLogisticz�asymmetric logistic model of Tawn 1988

    special case: a1=a2=1 : Gumbel

    restrictions:
     - theta in (0,1]
     - a1, a2 in [0,1]
    é   c                 C   s<   |dko|dk}|dko|dk}|dko.|dk}|o:|o:|S ©Nr   r   r   ©r   Úa1Úa2ÚthetaÚcondthZconda1Zconda2r   r   r   Ú_check_args9   s    zAsymLogistic._check_argsc                 C   sP   d| d|  }|d| | 7 }||| d|  |d|  d|   | 7 }|S )Nr   ç      ð?r   ©r   r   r$   r%   r&   Útransfr   r   r   r   ?   s    ,zAsymLogistic.evaluatec                 C   sp   |}||| d| d   ||d|  d| d    || d|  |d|  d|   |d   | | }|S ©Nr   r   )r   r   r$   r%   r&   ÚbÚd1r   r   r   r   J   s    2*ÿÿÿzAsymLogistic.derivc                 C   sx   |}d| || d|   |d|  d|   || d|  |d|  d|   |d   |d| d  |d   }|S )Nr   é   r   )r   r   r$   r%   r&   r-   r   r   r   r   r   Q   s    **ÿþzAsymLogistic.deriv2N©	r   r   r   Ú__doc__Úk_argsr(   r   r   r   r   r   r   r   r    .   s   r    c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚAsymNegLogisticzÀasymmetric negative logistic model of Joe 1990

    special case:  a1=a2=1 : symmetric negative logistic of Galambos 1978

    restrictions:
     - theta in (0,inf)
     - a1, a2 in (0,1]
    r!   c                 C   s4   |dk}|dko|dk}|dko&|dk}|o2|o2|S r"   r   r#   r   r   r   r(   g   s    zAsymNegLogistic._check_argsc                 C   s<   || }}d|d|  d|  || d|   |   }|S )Nr   g      ð¿r   r*   r   r   r   r   m   s    
ÿÿzAsymNegLogistic.evaluatec                 C   sh   || }}d| }|d }|| d| |  || ||   |d|  | || |  | d   }|S )Néÿÿÿÿr   r   )r   r   r$   r%   r&   Úm1Úm2r.   r   r   r   r   v   s    
" ÿzAsymNegLogistic.derivc                 C   s¤   |}|| }}|d|  d|  }|| d|  }|d|  d|  }|| d|  }	|d | | ||	 |   }
|d| d  |d  || d  }|
| }|S )Nr   r4   r/   r   )r   r   r$   r%   r&   r-   Za1tpZa2tpZa1tnZa2tnÚt1Út2r   r   r   r   r   ‚   s    
$zAsymNegLogistic.deriv2Nr0   r   r   r   r   r3   \   s   	r3   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	AsymMixedzóasymmetric mixed model of Tawn 1988

    special case:  k=0, theta in [0,1] : symmetric mixed model of
        Tiago de Oliveira 1980

    restrictions:
     - theta > 0
     - theta + 3*k > 0
     - theta + k <= 1
     - theta + 2*k <= 1
    r/   c                 C   s<   |dk}|d|  dko2|| dko2|d|  dk}||@ S )Nr   r!   r   r/   r   )r   r&   Úkr'   Úcond1r   r   r   r(   ¡   s    ,zAsymMixed._check_argsc                 C   s,   d|| |  || |  ||d   }|S )Nr   r!   r   )r   r   r&   r:   r+   r   r   r   r   ¦   s    (zAsymMixed.evaluatec                 C   s*   ||  d| |  d| |d   }|S )Nr/   r!   r   )r   r   r&   r:   Zd_dtr   r   r   r   ª   s    &zAsymMixed.derivc                 C   s   d| d| |  }|S )Nr/   é   r   )r   r   r&   r:   Zd2_dt2r   r   r   r   ®   s    zAsymMixed.deriv2Nr0   r   r   r   r   r9   “   s   r9   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚAsymBiLogisticzØbilogistic model of Coles and Tawn 1994, Joe, Smith and Weissman 1992

    restrictions:
     - (beta, delta) in (0,1)^2 or
     - (beta, delta) in (-inf,0)^2

    not vectorized because of numerical integration
    r/   c                 C   s8   |dko|dko|dko|dk}|dk o.|dk }||B S r"   r   )r   ÚbetaÚdeltar;   Úcond2r   r   r   r(   Â   s     zAsymBiLogistic._check_argsc                    s0   ‡ ‡‡fdd„}ddl m} ||ddƒd }|S )Nc                    sH   dˆ  t  | ˆ  ¡ dˆ  }dˆ t  d|  ˆ ¡ ˆ }t  ||¡S r,   )r   ÚpowerÚmaximum)ÚwÚterm1Úterm2©r>   r?   r   r   r   Ú
_integrantË   s    z+AsymBiLogistic.evaluate.<locals>._integrantr   )Úquadr   )Zscipy.integraterH   )r   r   r>   r?   rG   rH   r+   r   rF   r   r   Ç   s    zAsymBiLogistic.evaluateN©r   r   r   r1   r2   r(   r   r   r   r   r   r=   ·   s   r=   c                   @   s>   e Zd ZdZdZdd„ Zdd„ Zddd	„Zd
d„ Zdd„ Z	dS )ÚHRz—model of Huesler Reiss 1989

    special case:  a1=a2=1 : symmetric negative logistic of Galambos 1978

    restrictions:
     - lambda in (0,inf)
    r   c                 C   s   |dk}|S )Nr   r   )r   ÚlamdaZcondr   r   r   r(   â   s    zHR._check_argsc                 C   sR   t  d| | ¡d | }ddlm} d| | || ¡ || || ¡  }|S )Nr)   ç      à?r   )Únormr   )r   ÚlogÚscipy.statsrM   Ú_cdf)r   r   rK   ÚtermrM   r+   r   r   r   r   æ   s    ÿzHR.evaluate©r   r/   c                 C   s²  t |ttjfƒs.d|kr&d|kr&d}ntdƒ‚dt dtj ¡ }|}t d| | ¡d | }dd| |d  |  }d| |d| | d   }|| }	tj	 
|	¡}
t |	d  d ¡| }| |	 }|| }tj	 
|¡}t |d  d ¡| }| | }|dk�r,|| | |d |   | |
 }|dk�r€|d || |d |   |d  | d|  |  || d|  |  }|dk�rŽ|S |dk�rœ|S |dk�r®||fS d S )	Nr   r/   r4   zorder should be 1, 2, or (1,2)r)   rL   )r   r4   )r/   r4   )Ú
isinstanceÚintr   ÚintegerÚ
ValueErrorÚsqrtÚpirN   r   rM   ZcdfÚexp)r   r   rK   ÚorderÚdnÚaÚgZgd1Zgd2ÚtpÚfpZfd1pZfd2pÚtnÚfnZfd1nZfd2nr.   r   r   r   r   Ú_derivsò   s>    


"
ÿþ


z
HR._derivsc                 C   s   |   ||d¡S r,   ©rb   ©r   r   rK   r   r   r   r     s    zHR.derivc                 C   s   |   ||d¡S )Nr/   rc   rd   r   r   r   r   !  s    z	HR.deriv2N)rR   )
r   r   r   r1   r2   r(   r   rb   r   r   r   r   r   r   rJ   Ø   s   
,rJ   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )ÚTEVz_t-EV model of Demarta and McNeil 2005

    restrictions:
     - rho in (-1,1)
     - x > 0
    r/   c                 C   s$   |}|dk}|dko|dk }|o"|S r"   r   )r   ÚrhoÚdfÚxr;   r@   r   r   r   r(   2  s    zTEV._check_argsc                 C   s¨   |}ddl m} t |d|  d| ¡| }t d| | d| ¡| }t d| ¡t d||  ¡ }|| }	|| }
|| |	|d ¡ d| | |
|d ¡  }|S )Nr   )r   r)   r   )rO   r   r   rA   rW   rP   )r   r   rf   rg   rh   Zstats_trD   rE   Zterm0Zz1Zz2r+   r   r   r   r   8  s     ,zTEV.evaluateNrI   r   r   r   r   re   )  s   re   )r1   Únumpyr   Zscipyr   Zstatsmodels.tools.numdiffr   r   r   r    Ztransform_tawnr3   Ztransform_joer9   Ztransform_tawn2r=   Ztransform_bilogisticrJ   Ztransform_hrre   Ztransform_tevr   r   r   r   Ú<module>   s    
+4!M 