U
    Kvf*                     @   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   O/tmp/pip-unpacked-wheel-2v6byqio/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 )	_TransfPowerzgeneric 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   Znumpyr   Zscipy.specialr   r   r   r   r=   rI   rP   rT   r   r   r   r   <module>   s   	8+9