U
    Kvf$                     @   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/   Q/tmp/pip-unpacked-wheel-2v6byqio/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 qt|jttB tB tB tB tB tB tB tB tB  |j	D ]}t
||d qt|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 qt|jttB tB tB tB  |j	D ]}t
||d qt|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rqt||d qt|jtt	B tB tB tB tB tB  t|jt@ t |j
D ]}|dkrqt||d qt|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rqt
||d qt|jttB tB tB tB  t|jt |j	D ]}|dkrqt
||d qt|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__Z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 