U
    Ãmœdœ$  ã                   @   sÚ   d Z ddlZddlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z&m'Z' ddl(m)Z) G dd„ dƒZ*G d	d
„ d
e*ƒZ+dS )zÏ
Tests for setting options in KalmanFilter, KalmanSmoother, SimulationSmoother

(does not test the filtering, smoothing, or simulation smoothing for each
option)

Author: Chad Fulton
License: Simplified-BSD
é    N)ÚFILTER_CONVENTIONALÚFILTER_EXACT_INITIALÚFILTER_AUGMENTEDÚFILTER_SQUARE_ROOTÚFILTER_UNIVARIATEÚFILTER_COLLAPSEDÚFILTER_EXTENDEDÚFILTER_UNSCENTEDÚFILTER_CONCENTRATEDÚFILTER_CHANDRASEKHARÚINVERT_UNIVARIATEÚSOLVE_LUÚ	INVERT_LUÚSOLVE_CHOLESKYÚINVERT_CHOLESKYÚSTABILITY_FORCE_SYMMETRYÚMEMORY_STORE_ALLÚMEMORY_NO_FORECASTÚMEMORY_NO_PREDICTEDÚMEMORY_NO_FILTEREDÚMEMORY_NO_LIKELIHOODÚMEMORY_NO_GAINÚMEMORY_NO_SMOOTHINGÚMEMORY_NO_STD_FORECASTÚMEMORY_CONSERVE)ÚSMOOTHER_STATEÚSMOOTHER_STATE_COVÚSMOOTHER_STATE_AUTOCOVÚSMOOTHER_DISTURBANCEÚSMOOTHER_DISTURBANCE_COVÚSMOOTHER_ALL)ÚSimulationSmootherÚSIMULATION_STATEÚSIMULATION_ALL)Úassert_equalc                   @   s   e Zd Zedd„ ƒZdS )ÚOptionsc                 O   s4   t  d¡}d}t|d|dœ|—Ž| _| j |¡ d S )Né
   é   )Zk_endogÚk_states)ÚnpZaranger!   ÚmodelÚbind)ÚclsÚargsÚkwargsZendogr(   © r/   úf/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_options.pyÚsetup_class;   s    
ÿzOptions.setup_classN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr1   r/   r/   r/   r0   r%   :   s   r%   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestOptionsc                 C   sì   | j }d|_d|_t|jtƒ d|_t|jttB ƒ d|_t|jtƒ | t¡ t|jtƒ |jddd� t|jtƒ d|_|j	D ]}t
||dƒ q‚t|jttB tB tB tB tB tB tB tB tB ƒ |j	D ]}t
||dƒ qÊt|jdƒ d S )Nr   TF)Úfilter_conventionalZfilter_augmented)r*   Zfilter_methodr7   r$   r   Zfilter_collapsedr   Zset_filter_methodr   Zfilter_methodsÚsetattrr   r   r   r   r	   r
   r   ©Úselfr*   Únamer/   r/   r0   Útest_filter_methodsH   sP    ÿ
ÿ

ÿÿÿþþþýþ
zTestOptions.test_filter_methodsc                 C   sÞ   | j }d|_d|_t|jtƒ d|_t|jttB ƒ d|_t|jtƒ | t¡ t|jtƒ |jdddd� t|jttB ƒ d|_|j	D ]}t
||dƒ qˆt|jttB tB tB tB ƒ |j	D ]}t
||dƒ q¼t|jdƒ d S )Nr   TF)Úinvert_choleskyÚinvert_univariateZ	invert_lu)r*   Zinversion_methodr>   r$   r   r=   r   Zset_inversion_methodr   Zinversion_methodsr8   r   r   r9   r/   r/   r0   Útest_inversion_methodsq   s>    ÿ
 ÿÿ
ÿþ
z"TestOptions.test_inversion_methodsc                 C   sŒ   | j }d|_d|_t|jtƒ d|_t|jdƒ d|_| t¡ t|jtƒ d|_|jdd� t|jtƒ d|_|jdd� t|jtƒ d S )Nr   TF)Ústability_method)Ústability_force_symmetry)r*   r@   rA   r$   r   Zset_stability_method)r:   r*   r/   r/   r0   Útest_stability_methods—   s    
z"TestOptions.test_stability_methodsc                 C   s  | j }t|_d|_t|jtƒ d|_t|jttB ƒ d|_t|jtƒ | t	¡ t|jt	ƒ |jddd� t|jtƒ d|_|j
D ]}|dkr�q‚t||dƒ q‚t|jtt	B tB tB tB tB tB ƒ t|jt@ tƒ |j
D ]}|dkræqØt||dƒ qØt|jdƒ d S )NTF)Úmemory_no_filteredZmemory_no_predictedr   Zmemory_conserve)r*   r   Zconserve_memoryZmemory_no_forecastr$   r   rC   r   Zset_conserve_memoryr   Zmemory_optionsr8   r   r   r   r   r   r9   r/   r/   r0   Útest_conserve_memory²   sN    ÿ
ÿ

ÿÿþþþ
z TestOptions.test_conserve_memoryc                 C   sø   | j }d|_d|_t|jtƒ d|_t|jttB ƒ d|_t|jtƒ | t¡ t|jtƒ |jddd� t|jtƒ d|_|j	D ]}|dkr�q‚t
||dƒ q‚t|jttB tB tB tB ƒ t|jtƒ |j	D ]}|dkrÚqÌt
||dƒ qÌt|jdƒ d S )Nr   TF)Úsmoother_disturbanceZsmoother_disturbance_covZsmoother_all)r*   Zsmoother_outputZsmoother_stater$   r   rE   r   Zset_smoother_outputr   Zsmoother_outputsr8   r   r   r    r9   r/   r/   r0   Útest_smoother_outputsÝ   sF    ÿ
ÿ

ÿÿþ
z!TestOptions.test_smoother_outputsc                 C   s,   t | j t¡tƒ t | jjddd�tƒ d S )NT)Zsimulate_stateZsimulate_disturbance)r$   r*   Zget_simulation_outputr"   r#   )r:   r/   r/   r0   Útest_simulation_outputs	  s    
þÿýz#TestOptions.test_simulation_outputsN)	r2   r3   r4   r<   r?   rB   rD   rF   rG   r/   r/   r/   r0   r6   G   s   )&+,r6   ),Ú__doc__Únumpyr)   Z(statsmodels.tsa.statespace.kalman_filterr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z*statsmodels.tsa.statespace.kalman_smootherr   r   r   r   r   r    Z.statsmodels.tsa.statespace.simulation_smootherr!   r"   r#   Znumpy.testingr$   r%   r6   r/   r/   r/   r0   Ú<module>   s   
l 