U
    Ãmœd?  ã                   @   s*  d Z ddl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G dd„ deƒZ	G dd„ deƒZ
G dd„ deƒZedk�r&eƒ Ze d¡dk e d¡dk e d¡dk e d¡dk ee
ddƒe	dƒƒZee d¡ƒ ee	dƒe
ddƒƒZee d¡ƒ dS )zmNonlinear Transformation classes


Created on Sat Apr 16 16:06:11 2011

Author: Josef Perktold
License : BSD
é    Nc                   @   s   e Zd Zdd„ ZdS )ÚTransformFunctionc                 C   s   |   |¡ d S ©N)Úfunc©ÚselfÚx© r   ún/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/sandbox/distributions/transform_functions.pyÚ__call__   s    zTransformFunction.__call__N)Ú__name__Ú
__module__Ú__qualname__r
   r   r   r   r	   r      s   r   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú
SquareFuncz²class to hold quadratic function with inverse function and derivative

    using instance methods instead of class methods, if we want extension
    to parametrized function
    c                 C   s   t  |d¡S )Ng       @©ÚnpÚpowerr   r   r   r	   r      s    zSquareFunc.funcc                 C   s
   t  |¡S r   ©r   Úsqrtr   r   r   r	   Úinverseplus!   s    zSquareFunc.inverseplusc                 C   s   dt  |¡ S ©Nç        r   r   r   r   r	   Úinverseminus$   s    zSquareFunc.inverseminusc                 C   s   dt  |¡ S ©Nç      à?r   r   r   r   r	   Ú	derivplus'   s    zSquareFunc.derivplusc                 C   s   ddt  |¡  S ©Nr   r   r   r   r   r   r	   Ú
derivminus*   s    zSquareFunc.derivminusN©	r   r   r   Ú__doc__r   r   r   r   r   r   r   r   r	   r      s   r   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚNegSquareFuncz!negative quadratic function

    c                 C   s   t  |d¡ S )Né   r   r   r   r   r	   r   4   s    zNegSquareFunc.funcc                 C   s   t  | ¡S r   r   r   r   r   r	   r   7   s    zNegSquareFunc.inverseplusc                 C   s   dt  | ¡ S r   r   r   r   r   r	   r   :   s    zNegSquareFunc.inverseminusc                 C   s   ddt  | ¡  S r   r   r   r   r   r	   r   =   s    zNegSquareFunc.derivplusc                 C   s   dt  | ¡ S r   r   r   r   r   r	   r   @   s    zNegSquareFunc.derivminusNr   r   r   r   r	   r   0   s   r   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚAbsFuncz,class for absolute value transformation
    c                 C   s
   t  |¡S r   )r   Úabsr   r   r   r	   r   H   s    zAbsFunc.funcc                 C   s   |S r   r   r   r   r   r	   r   K   s    zAbsFunc.inverseplusc                 C   s   d| S r   r   r   r   r   r	   r   N   s    zAbsFunc.inverseminusc                 C   s   dS ©Ng      ð?r   r   r   r   r	   r   Q   s    zAbsFunc.derivplusc                 C   s   dS )Ng      ð¿r   r   r   r   r	   r   T   s    zAbsFunc.derivminusNr   r   r   r   r	   r!   D   s   r!   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚLogFuncc                 C   s
   t  |¡S r   ©r   Úlogr   r   r   r	   r   ^   s    zLogFunc.funcc                 C   s
   t  |¡S r   ©r   Úexp©r   Úyr   r   r	   Úinversea   s    zLogFunc.inversec                 C   s   d| S r#   r   r   r   r   r	   Úderivd   s    zLogFunc.derivN©r   r   r   r   r+   r,   r   r   r   r	   r$   \   s   r$   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚExpFuncc                 C   s
   t  |¡S r   r'   r   r   r   r	   r   j   s    zExpFunc.funcc                 C   s
   t  |¡S r   r%   r)   r   r   r	   r+   m   s    zExpFunc.inversec                 C   s
   t  |¡S r   r'   r   r   r   r	   r,   p   s    zExpFunc.derivNr-   r   r   r   r	   r.   g   s   r.   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚBoxCoxNonzeroFuncc                 C   s
   || _ d S r   ©Úlamda)r   r1   r   r   r	   Ú__init__v   s    zBoxCoxNonzeroFunc.__init__c                 C   s   t  || j¡d | j S ©Né   ©r   r   r1   r   r   r   r	   r   y   s    zBoxCoxNonzeroFunc.funcc                 C   s   | j | d | j  S r3   r0   r)   r   r   r	   r+   |   s    zBoxCoxNonzeroFunc.inversec                 C   s   t  || jd ¡S r3   r5   r   r   r   r	   r,      s    zBoxCoxNonzeroFunc.derivN©r   r   r   r2   r   r+   r,   r   r   r   r	   r/   t   s   r/   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
AffineFuncc                 C   s   || _ || _d S r   ©ÚconstantÚslope)r   r9   r:   r   r   r	   r2   …   s    zAffineFunc.__init__c                 C   s   | j | j|  S r   r8   r   r   r   r	   r   ‰   s    zAffineFunc.funcc                 C   s   || j  | j S r   r8   r)   r   r   r	   r+   Œ   s    zAffineFunc.inversec                 C   s   | j S r   )r:   r   r   r   r	   r,   �   s    zAffineFunc.derivNr6   r   r   r   r	   r7   ƒ   s   r7   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	ChainFuncc                 C   s   || _ || _d S r   )ÚfinnÚfout)r   r<   r=   r   r   r	   r2   •   s    zChainFunc.__init__c                 C   s   | j  | j |¡¡S r   )r=   r   r<   r   r   r   r	   r   ™   s    zChainFunc.funcc                 C   s   | j  | j |¡¡S r   )Úf1r+   r=   r)   r   r   r	   r+   œ   s    zChainFunc.inversec                 C   s$   | j  |¡}| j |¡| j  |¡ S r   )r<   r   r=   r,   )r   r   Úzr   r   r	   r,   Ÿ   s    zChainFunc.derivNr6   r   r   r   r	   r;   “   s   r;   Ú__main__é   éûÿÿÿr4   r    g      @)r   Únumpyr   r   r   r   r!   r$   r.   r/   r7   r;   r   Zabsfr   r   r   ZchainfÚprintZchainf2r   r   r   r	   Ú<module>   s(   

