U
    Kvf–'  ã                   @   sÖ   d dl Ze e e¡j¡ZG dd„ dƒZdd„ Zdd„ Z	edœd	d
„Z
edœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„Zedœdd„ZdS )é    Nc                   @   sª   e Zd Zddd„Zedd„ ƒZejdd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZejdd„ ƒZdS )ÚHoltWintersArgsFc                 C   sZ   || _ || _|| _|| _t |¡| _t |¡| _t || d ¡| _|| _	|| _
|| _d S )Né   )Ú_xiÚ_pÚ_boundsÚ_yÚnpÚemptyÚ_lvlÚ_bÚ_sÚ_mÚ_nÚ
_transform)ÚselfÚxiÚpÚboundsÚyÚmÚnÚ	transform© r   úJ/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/tsa/holtwinters/_smoothers.pyÚ__init__   s    zHoltWintersArgs.__init__c                 C   s   | j S ©N©r   ©r   r   r   r   r      s    zHoltWintersArgs.xic                 C   s
   || _ d S r   r   ©r   Úvaluer   r   r   r      s    c                 C   s   | j S r   )r   r   r   r   r   r      s    zHoltWintersArgs.pc                 C   s   | j S r   )r   r   r   r   r   r      s    zHoltWintersArgs.boundsc                 C   s   | j S r   )r   r   r   r   r   r   #   s    zHoltWintersArgs.yc                 C   s   | j S r   )r
   r   r   r   r   Úlvl'   s    zHoltWintersArgs.lvlc                 C   s   | j S r   )r   r   r   r   r   Úb+   s    zHoltWintersArgs.bc                 C   s   | j S r   )r   r   r   r   r   Ús/   s    zHoltWintersArgs.sc                 C   s   | j S r   )r   r   r   r   r   r   3   s    zHoltWintersArgs.mc                 C   s   | j S r   )r   r   r   r   r   r   7   s    zHoltWintersArgs.nc                 C   s   | j S r   ©r   r   r   r   r   r   ;   s    zHoltWintersArgs.transformc                 C   s
   || _ d S r   r#   r   r   r   r   r   ?   s    N)F)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   Úsetterr   r   r   r    r!   r"   r   r   r   r   r   r   r   r      s2   











r   c                 C   s´   | dd… \}}}|d rJt t|d ƒ}tdt |d ƒ}||||   }|d rx|d }t||d ƒ}||||   }|d	 rª|d
 }td| |d ƒ}||||   }|||fS )aÿ  
    Transform parameters from the unrestricted [0,1] space
    to satisfy both the bounds and the 2 constraints
    beta <= alpha and gamma <= (1-alpha)

    Parameters
    ----------
    p : ndarray
        The parameters to transform
    sel : ndarray
        Array indicating whether a parameter is being estimated. If not
        estimated, not transformed.
    bounds : ndarray
        2-d array of bounds where bound for element i is in row i
        and stored as [lb, ub]

    Returns
    -------

    Né   r   ©r   r   r   ©r   r   ©r   r   ©r   r   é   ©r.   r   ç      ð?©r.   r   ©ÚmaxÚLOWER_BOUNDÚmin©r   Úselr   Úar!   ÚgZlbZubr   r   r   Úto_restrictedD   s    r:   c                 C   s¼   | dd… \}}}|d rJt t|d ƒ}tdt |d ƒ}|| ||  }|d r||d }t| d |d ƒ}|| ||  }|d	 r²|d
 }td| d  |d ƒ}|| ||  }|||fS )zë
    Transform parameters to the unrestricted [0,1] space

    Parameters
    ----------
    p : ndarray
        Parameters that strictly satisfy the constraints

    Returns
    -------
    ndarray
        Parameters all in (0,1)
    Nr)   r   r*   r   r+   r,   r-   r.   r/   r0   r1   r2   r6   r   r   r   Úto_unrestrictedk   s    r;   )Úhw_argsc                 C   s–   | |j |j t¡< |jr2t|j |j|jƒ\}}}n|j dd… \}}|j dd… \}}}d| }d| }	||j }
||jd< ||j	d< |||||	|
fS )z,
    Initialization for the Holt Models
    Nr.   r)   é   r   r   )
r   r   ÚastypeÚboolr   r:   r   r   r    r!   )Úxr<   ÚalphaÚbetaÚ_Úl0Úb0ÚphiÚalphacÚbetacÚy_alphar   r   r   Ú	holt_init   s    


rJ   c                 C   s\   t | |ƒ\}}}}}}|j}|j}td|ƒD ]$}||d  |||d    ||< q,|j| S )zH
    Simple Exponential Smoothing
    Minimization Function
    (,)
    r   )rJ   r   r    Úranger   )r@   r<   rC   rG   rI   r   r    Úir   r   r   Úholt__©   s    "rM   c                 C   s¦   t | |ƒ\}}}}}}|j}|j}	td|jƒD ]d}
||
d  |||
d  |	|
d  |    ||
< |||
 ||
d    ||	|
d  |   |	|
< q.|j||	|   S )z]
    Multiplicative and Multiplicative Damped
    Minimization Function
    (M,) & (Md,)
    r   ©rJ   r    r!   rK   r   r   ©r@   r<   rC   rB   rF   rG   rH   rI   r    r!   rL   r   r   r   Úholt_mul_dam·   s    02rP   c                 C   s¦   t | |ƒ\}}}}}}|j}|j}	td|jƒD ]d}
||
d  |||
d  ||	|
d      ||
< |||
 ||
d    || |	|
d    |	|
< q.|j|||	   S )zQ
    Additive and Additive Damped
    Minimization Function
    (A,) & (Ad,)
    r   rN   rO   r   r   r   Úholt_add_damÆ   s    02rQ   c              	   C   sø   | |j |j t¡< |jr2t|j |j|jƒ\}}}n|j dd… \}}}|j dd… \}}}|j dd… }d| }	d| }
d| }||j }||j }d|jdd…< d|j	dd…< d|j
dd…< ||jd< ||j	d< ||j
d|j…< |||||	|
|||f	S )z3Initialization for the Holt Winters Seasonal ModelsNr)   r=   r   r   )r   r   r>   r?   r   r:   r   r   r    r!   r"   r   )r@   r<   rA   rB   ÚgammarD   rE   rF   Ús0rG   rH   ÚgammacrI   Úy_gammar   r   r   Úholt_win_initÕ   s,      ÿ



rV   c              	   C   s¼   t | |ƒ\	}}}}}}}}}|j}|j}|j}	td|jƒD ]d}
||
d  ||
d   |||
d    ||
< ||
d  ||
d   |||
d    ||
|	 d < q:|j||d|	d  …   S )zD
    Multiplicative Seasonal
    Minimization Function
    (,M)
    r   N©rV   r    r"   r   rK   r   r   )r@   r<   rC   rG   rT   rI   rU   r    r"   r   rL   r   r   r   Úholt_win__mulï   s     ÿ,6rX   c              	   C   sÄ   t | |ƒ\	}}}}}}}}}|j}	|j}
|j}td|jƒD ]l}||d  ||
|d    ||	|d    |	|< ||d  ||	|d    ||
|d    |
|| d < q:|j|	 |
d|d  …  S )z>
    Additive Seasonal
    Minimization Function
    (,A)
    r   NrW   )r@   r<   rA   rC   rR   rG   rT   rI   rU   r    r"   r   rL   r   r   r   Úholt_win__add  s     ÿ*ÿ*ÿrY   c              	   C   s  t | |ƒ\	}}}}}}}}}	|j}
|j}|j}|j}td|jƒD ]´}||d  ||d   ||
|d  |||d      |
|< ||
| |
|d    || ||d    ||< |	|d  |
|d  |||d     |||d    ||| d < q@|j|
||  |d|d  …   S )zp
    Additive and Additive Damped with Multiplicative Seasonal
    Minimization Function
    (A,M) & (Ad,M)
    r   N)rV   r    r!   r"   r   rK   r   r   )r@   r<   rC   rB   rF   rG   rH   rT   rI   rU   r    r!   r"   r   rL   r   r   r   Úholt_win_add_mul_dam  s0    öÿ0&ÿrZ   c              	   C   s  t | |ƒ\	}}}}}}}}}	|j}
|j}|j}|j}td|jƒD ]´}||d  ||d   ||
|d  ||d  |    |
|< ||
| |
|d    |||d  |   ||< |	|d  |
|d  ||d  |   |||d    ||| d < q@|j|
||  |d|d  …   S )z|
    Multiplicative and Multiplicative Damped with Multiplicative Seasonal
    Minimization Function
    (M,M) & (Md,M)
    r   N©rV   r    r"   r!   r   rK   r   r   )r@   r<   rC   rB   rF   rG   rH   rT   rI   rU   r    r"   r!   r   rL   r   r   r   Úholt_win_mul_mul_dam7  s0    öÿ0&ÿr\   c              	   C   s"  t | |ƒ\	}}}}}}}}	}
|j}|j}|j}|j}td|jƒD ]¼}|	|d  |||d    |||d  |||d      ||< ||| ||d    || ||d    ||< |
|d  |||d  |||d      |||d    ||| d < q@|j|||  |d|d  …   S )zj
    Additive and Additive Damped with Additive Seasonal
    Minimization Function
    (A,A) & (Ad,A)
    r   Nr[   ©r@   r<   rA   rB   rR   rF   rG   rH   rT   rI   rU   r    r"   r!   r   rL   r   r   r   Úholt_win_add_add_damW  s<    ö
ÿþÿ0
ÿþÿr^   c              	   C   s"  t | |ƒ\	}}}}}}}}	}
|j}|j}|j}|j}td|jƒD ]¼}|	|d  |||d    |||d  ||d  |    ||< ||| ||d    |||d  |   ||< |
|d  |||d  ||d  |    |||d    ||| d < q@|j|| | |d|d  …   S )zv
    Multiplicative and Multiplicative Damped with Additive Seasonal
    Minimization Function
    (M,A) & (M,Ad)
    r   Nr[   r]   r   r   r   Úholt_win_mul_add_dam{  s<    ö
ÿþÿ0
ÿþÿr_   )Znumpyr   ÚsqrtZfinfoÚfloatZepsr4   r   r:   r;   rJ   rM   rP   rQ   rV   rX   rY   rZ   r\   r^   r_   r   r   r   r   Ú<module>   s   >'$  $