U
    Ãmœd*  ã                   @   s†   d Z ddlZddlZddlmZmZ G dd„ dƒZG dd„ deƒZG dd	„ d	eƒZ	G d
d„ deƒZ
G dd„ deƒZG dd„ deƒZdS )zŒ Transformation Classes as generators for Archimedean copulas


Created on Wed Jan 27 14:33:40 2021

Author: Josef Perktold
License: BSD-3

é    N)Úexpm1Úgammac                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú
Transformsc                 C   s   d S ©N© )Úselfr   r   úd/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/distributions/copula/transforms.pyÚ__init__   s    zTransforms.__init__c                 C   s6   |   ||¡}|  ||¡}|  ||¡}t ||d  ¡S )Né   )ÚinverseÚderivÚderiv2ÚnpÚabs)r   ÚphiÚargsÚtZphi_d1Zphi_d2r   r   r   Úderiv2_inverse   s    zTransforms.deriv2_inversec                 C   s   t dƒ‚d S )Nznot yet implemented)ÚNotImplementedError)r   Úkr   Úthetar   r   r   Úderivk_inverse   s    zTransforms.derivk_inverseN)Ú__name__Ú
__module__Ú__qualname__r	   r   r   r   r   r   r   r      s   r   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTransfFrankc              	   C   sX   t  |¡}t ¡ �< t dt¡ t  t| | ƒ ¡t  t| ƒ ¡  }W 5 Q R X |S )NÚignore)r   ÚasarrayÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningÚlogr   )r   r   r   Úvalr   r   r   Úevaluate"   s
    

4zTransfFrank.evaluatec                 C   s,   t  |¡}t  t  | ¡t| ƒ ¡ | S r   )r   r   Úlog1pÚexpr   ©r   r   r   r   r   r   r   *   s    
zTransfFrank.inversec                 C   s,   t  |¡}t  | | ¡}| | |d  S ©Né   ©r   r   r&   )r   r   r   Útmpr   r   r   r   .   s    
zTransfFrank.derivc                 C   s6   t  |¡}t  || ¡}|d  | |d d  }|S ©Né   r)   r*   )r   r   r   r+   Úd2r   r   r   r   3   s    
zTransfFrank.deriv2c                 C   s<   t  |¡}t  || ¡}|d | ||| d d   }|S ©Nr)   r-   ©r   r&   )r   r   r   ÚetÚeptr.   r   r   r   r   9   s    
 zTransfFrank.deriv2_inversec                 C   sJ   t  |¡}t  || ¡}|d | || d  ||| d d    }|S )Nr)   r
   r0   )r   r   r   r1   r2   Úd3r   r   r   Úderiv3_inverse@   s    
ÿzTransfFrank.deriv3_inversec                 C   sŽ   t  |¡}t  || ¡}|}|}|d | d| t  d||  ¡ dt  |d|  ¡  d|  t  d| ¡ d  ||| d d   }|S )Nr)   éüÿÿÿr-   é   r0   )r   r   r   r1   r2   ÚpÚbÚd4r   r   r   Úderiv4_inverseG   s     

.ÿÿÿÿýzTransfFrank.deriv4_inversec                 C   s   |d|@   kodk S   S )Nr   r)   r   ©r   r   r   r   r   Úis_completly_monotonicS   s    z"TransfFrank.is_completly_monotonicN)r   r   r   r$   r   r   r   r   r4   r:   r<   r   r   r   r   r       s   r   c                   @   sd   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚTransfClaytonc                 C   s   |dkS ©Nr   r   r;   r   r   r   Ú
_checkargsZ   s    zTransfClayton._checkargsc                 C   s   t  || ¡d S ©Nç      ð?©r   Úpower©r   r   r   r   r   r   r$   ]   s    zTransfClayton.evaluatec                 C   s   t  d| d| ¡S ©Nr)   éÿÿÿÿrB   r'   r   r   r   r   `   s    zTransfClayton.inversec                 C   s   | t  || d ¡ S r(   rB   rD   r   r   r   r   c   s    zTransfClayton.derivc                 C   s   ||d  t  || d ¡ S r/   rB   rD   r   r   r   r   f   s    zTransfClayton.deriv2c                 C   s   d| |d  |   | S r(   r   r'   r   r   r   Úderiv_inversei   s    zTransfClayton.deriv_inversec                 C   s$   |d d| d| d   |d  S )Nr)   rF   r-   r   r'   r   r   r   r   l   s    zTransfClayton.deriv2_inversec                 C   s:   |}d| dd|   |d  d| d| d    }|S )Nr)   r-   r
   rF   r   )r   r   r   Úthr3   r   r   r   r4   o   s    2zTransfClayton.deriv3_inversec                 C   sD   |}d| dd|   dd|   |d  d| d| d   }|S )Nr)   r-   r
   r6   rF   r   )r   r   r   rH   r9   r   r   r   r:   t   s
    &ÿzTransfClayton.deriv4_inversec                 C   s:   d| }d| t || ƒ t |ƒ d| ||    }|S rE   )r   )r   r   r   r   Zthir9   r   r   r   r   z   s    .zTransfClayton.derivk_inversec                 C   s   |dkS r>   r   r;   r   r   r   r<      s    z$TransfClayton.is_completly_monotonicN)r   r   r   r?   r$   r   r   r   rG   r   r4   r:   r   r<   r   r   r   r   r=   X   s   r=   c                   @   sX   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTransfGumbelz
    requires theta >=1
    c                 C   s   |dkS r(   r   r;   r   r   r   r?   ˆ   s    zTransfGumbel._checkargsc                 C   s   t  t  |¡ |¡S r   )r   rC   r"   rD   r   r   r   r$   ‹   s    zTransfGumbel.evaluatec                 C   s   t  t  |d| ¡ ¡S r@   )r   r&   rC   r'   r   r   r   r   Ž   s    zTransfGumbel.inversec                 C   s   | t  |¡ |d   | S r(   ©r   r"   rD   r   r   r   r   ‘   s    zTransfGumbel.derivc                 C   sV   t  |¡}|dd|   ||d   d|  |dd|   ||   |d |  }|S )NrF   r)   r-   rJ   )r   r   r   Ztmp1r.   r   r   r   r   ”   s    
"ÿ
ÿzTransfGumbel.deriv2c                 C   sP   |}|d|  |d |d|    |d |d   }|t  |d|   ¡9 }|S r,   r0   )r   r   r   rH   r.   r   r   r   r   �   s    0zTransfGumbel.deriv2_inversec                 C   sv   |}|}|d|   dd|  |d|    dd|  | d |d|    || d  }|t  |d|   ¡9 }|S )Nr
   r-   r)   r0   )r   r   r   r7   r8   r3   r   r   r   r4   £   s    $ÿ
þzTransfGumbel.deriv3_inversec                 C   s¨   |}|}d|d  d|d   d|  d |d|   d|d  d|  d |d|    d|d  |d|    |d	|   || d	  }|t  |d|   ¡9 }|S )
Né   r
   é   r-   g      @r)   é   é   r6   r0   )r   r   r   r7   r8   r9   r   r   r   r:   ¬   s    ."ÿþ
ý
üzTransfGumbel.deriv4_inversec                 C   s   |dkS r(   r   r;   r   r   r   r<   ¸   s    z#TransfGumbel.is_completly_monotonicN)r   r   r   Ú__doc__r?   r$   r   r   r   r   r4   r:   r<   r   r   r   r   rI   ƒ   s   		rI   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTransfIndepc                 G   s   t  |¡}t  |¡ S r   )r   r   r"   ©r   r   r   r   r   r   r$   ¾   s    
zTransfIndep.evaluatec                 G   s   t  |¡}t  | ¡S r   r*   ©r   r   r   r   r   r   r   Â   s    
zTransfIndep.inversec                 G   s   t  |¡}d| S )Ng      ð¿©r   r   rQ   r   r   r   r   Æ   s    
zTransfIndep.derivc                 G   s   t  |¡}d|d  S )NrA   r-   rS   rQ   r   r   r   r   Ê   s    
zTransfIndep.deriv2c                 G   s   t  | ¡S r   r0   rR   r   r   r   r   Î   s    zTransfIndep.deriv2_inversec                 G   s   t  | ¡ S r   r0   rR   r   r   r   r4   Ñ   s    zTransfIndep.deriv3_inversec                 G   s   t  | ¡S r   r0   rR   r   r   r   r:   Ô   s    zTransfIndep.deriv4_inverseN)
r   r   r   r$   r   r   r   r   r4   r:   r   r   r   r   rP   ¼   s   rP   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	Ú_TransfPowerz–generic multivariate Archimedean copula with additional power transforms

    Nelson p.144, equ. 4.5.2

    experimental, not yet tested and used
    c                 C   s
   || _ d S r   )Ú	transform)r   rU   r   r   r   r	   à   s    z_TransfPower.__init__c                 G   s0   t  |¡}t  | jjt  ||¡f|žŽ |¡}|S r   )r   r   rC   rU   r$   )r   r   ÚalphaÚbetaÚtr_argsr   r   r   r   r$   ã   s
    
ÿz_TransfPower.evaluatec                 G   s<   t  |¡}| j}t  |jt  |d| ¡f|žŽ d| ¡}|S r@   )r   r   rU   rC   r$   )r   r   rV   rW   rX   ZtransfZphi_invr   r   r   r   ê   s    
ÿz_TransfPower.inverseN)r   r   r   rO   r	   r$   r   r   r   r   r   rT   Ø   s   rT   )rO   r   Únumpyr   Zscipy.specialr   r   r   r   r=   rI   rP   rT   r   r   r   r   Ú<module>   s   	8+9