U
    md"                     @   s   d Z ddlZddlZddlmZ ddlmZm	Z	 ddl
mZmZ ddlmZ ddlZdd	d
ZdddZdddZdd Zdd Zdd ZdS )zQ
Tests for Chandrasekhar recursions

Author: Chad Fulton
License: Simplified-BSD
    N   )results_varmax)sarimaxvarmax)MEMORY_CONSERVEMEMORY_NO_LIKELIHOOD)assert_allcloseFc                 C   s  |j }t| j|j t| j||j|dd | jjjD ](}|dkrJq<tt| j|t|j| q<ddddg}|s|dg7 }|D ]*}t| j|}t|j|}t||d	d qd
dg}|s|dddddg7 }|D ]*}t| j|}t|j|}t||d	d q|sTdddddddddddddg}	|	D ],}t| j|}t|j|}t||d	d q&| jj	}
|s| j
d|
d d d!}| j
d|
d d d!}n$| j
d|
d d"}| j
d|
d d"}t|j|j t|j|j d S )#Ng|=)ZatolZobsZpredicted_stateZfiltered_stateZ	forecastsZforecasts_errorZkalman_gaing-q=Zpredicted_state_covZfiltered_state_covZstandardized_forecasts_errorZtmp1Ztmp2Ztmp3Ztmp4Zsmoothed_stateZsmoothed_state_covZsmoothed_state_autocovZsmoothed_state_disturbanceZsmoothed_state_disturbance_covZ smoothed_measurement_disturbanceZ$smoothed_measurement_disturbance_covZscaled_smoothed_estimatorZscaled_smoothed_estimator_covZsmoothing_errorZsmoothed_forecastsZsmoothed_forecasts_errorZsmoothed_forecasts_error_cov
   2   (   )startendZdynamic)r   r   )paramsr   ZllfmodelZ	score_obsssmZshapesgetattrZfilter_resultsnobsZget_predictionZpredicted_meanZse_mean)	res_chandres_origmemory_conserver   nameZfilter_attractualZdesiredZfilter_attr_burnZsmoothed_attrr   Z
pred_chandZ	pred_orig r   l/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_chandrasekhar.pycheck_output   sx    
 


  r   c           
      K   s   t jdddd}t jtjdddg|d}t|d  jd	d
 }t	j
|f|}t	j
|f|}d|j_|j}| |j_| |j_||}||}	t||	 d S )N
1960-01-01
1982-10-01QSfreqinvincconsumpcolumnsindex
1960-04-01
1978-10-01T)pd
date_range	DataFramer   lutkepohl_datanplogdifflocr   SARIMAXr   filter_chandrasekharstart_paramsfilter_univariatesmoothr   )
r3   kwargsr%   dtaendogmod_orig	mod_chandr   r   r   r   r   r   check_univariate_chandrasekharZ   s     

r:   c                 K   sX  t jdddd}t jtjdddg|d}t|d  |d	< t|d  |d
< t|d  |d< |jddd	d
gf }t	j
|f|}t	j
|f|}d|j_|j}	| |j_| |j_|rtddgddgg|d< tddgddgg|d< |r2|jtt @  |jtt @  ||	}
||	}n||	}
||	}t|
||d d S )Nr   r   r   r   r    r!   r"   r#   Zdln_invZdln_incZdln_consumpr&   r'   T      ?      ?obs_cov)r   )r(   r)   r*   r   r+   r,   r-   r.   r/   r   ZVARMAXr   r1   r2   r3   arrayZset_conserve_memoryr   r   filterr4   r   )r3   gen_obs_covr   r5   r%   r6   r7   r8   r9   r   r   r   r   r   r    check_multivariate_chandrasekharr   sD     






rA   c                   C   sV   t dd t ddd tdd tddd tddd tddd tdddd	 d S )
NFr3   Tr3   Zconcentrate_scaler3   Zmeasurement_errordiagonalr3   Zerror_cov_typer3   r@   r3   r@   r   r:   rA   r   r   r   r   test_chandrasekhar_conventional   s$    

 rJ   c                   C   sV   t dd t ddd tdd tddd tddd tddd tdddd d S )	NTrB   rC   rD   rE   rF   rG   rH   rI   r   r   r   r   test_chandrasekhar_univariate   s$    

 rK   c               	   C   s   t d} t j| d< t| }d|j_tjt	dd |
ddg W 5 Q R X t d} t| }d|j_d|j_tjt	dd |
ddg W 5 Q R X t d} t| }d|j_t d	|d
< tjt	dd |
ddg W 5 Q R X d S )Nr	   r   Tz6Cannot use Chandrasekhar recursions with missing data.)matchr<   r;   z9Cannot use Chandrasekhar recursions with filtered timing.)r   r   r	   r=   zeCannot use Chandrasekhar recursions with time-varying system matrices \(except for intercept terms\).)r,   Zzerosnanr   r0   r   r1   pytestZraisesRuntimeErrorr?   Ztiming_init_filteredZones)r7   modr   r   r   test_invalid   s$    






rQ   )F)F)FFF)__doc__numpyr,   Zpandasr(   resultsr   Zstatsmodels.tsa.statespacer   r   Z(statsmodels.tsa.statespace.kalman_filterr   r   Znumpy.testingr   rN   r   r:   rA   rJ   rK   rQ   r   r   r   r   <module>   s    
G
    
+