U
    Kvf?                     @   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   Y/tmp/pip-unpacked-wheel-2v6byqio/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 )
SquareFunczclass 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   Znumpyr   r   r   r   r!   r$   r.   r/   r7   r;   r   Zabsfr   r   r   ZchainfprintZchainf2r   r   r   r	   <module>   s(   

