U
    md                     @   sL  d Z ddlmZmZ ddlZddlmZmZm	Z	 ddl
ZddlZddlmZ ddlmZmZmZmZ ej jZejddd	d
e_dd Zdd Zdd Zdd Zdd Zej ddgej ddgdd Z!ej dddgej dddgej dddgdd Z"ej dddgej dddgd d! Z#ej dddgej dddgd"d# Z$ej dddgej dddgej dddgd$d% Z%ej dddgej dddgd&d' Z&ej dddgej dddgd(d) Z'd*d+ Z(ej d,ddgd-d. Z)ej dd/d0d1d2d3gd4d5 Z*d6d7 Z+dS )8z<
Tests for news results

Author: Chad Fulton
License: BSD-3
    )assert_frame_equalassert_series_equalN)assert_assert_allcloseassert_equal)datasets)dynamic_factorsarimax
structuralvarmaxZ1959Q12009Q3Qstartendfreqc                 C   s8   dD ].}t | |}t|j| t|j | qd S )N)total_impactsupdate_impactsrevision_impactspost_impacted_forecastsprev_impacted_forecasts)getattrr   indexequalsr   columnstolist)newsimpact_datesimpacted_variablesattrval r!   c/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/tsa/statespace/tests/test_news.pycheck_impact_indices   s    
r#   c                    s   | j jd kr^tt| jd d tt| jd d tt| jd d tt| jd d n| jjj | jjj	t
trg| jdd}| } fdd|d D |d< fdd|d D |d< t| j|| jj t| j| d S )	Nrevision dater   revised variableTZdropc                    s   g | ]}  |qS r!   Zget_loc.0datedatesr!   r"   
<listcomp>:   s    z*check_revision_indices.<locals>.<listcomp>c                    s   g | ]}  |qS r!   r   r)   nameendog_namesr!   r"   r-   <   s   )news_resultsr   r   lenrevisions_ilocrevisions_ixpreviousmodel_indexr2   
isinstancestrto_framereset_indexcopyr   r   astypedtypes)r   revisions_index
desired_ixdesired_ilocr!   r,   r2   r"   check_revision_indices'   s*    






rE   c                    s   | j jd kr^tt| jd d tt| jd d tt| jd d tt| jd d n| jjj | jjj	t
trg| jdd}| } fdd|d D |d< fdd|d D |d< t| j|| jj t| j| d S )	Nupdate dater   updated variableTr&   c                    s   g | ]}  |qS r!   r'   r(   r+   r!   r"   r-   W   s    z(check_update_indices.<locals>.<listcomp>c                    s   g | ]}  |qS r!   r.   r/   r1   r!   r"   r-   Y   s   )r3   r   r   r4   updates_iloc
updates_ixupdatedr8   r9   r2   r:   r;   r<   r=   r>   r   r   r?   r@   )r   updates_indexrB   rC   r!   rD   r"   check_update_indicesE   s*    






rL   c                 C   s   t |r|}ntjjg g gddgd}| jjj}t|tr@|g}t	| j
j| t	| jj| t	| jj| t	| jj| tj||g}t	| jj| d S )NrF   rG   names)r4   pd
MultiIndexfrom_productr7   r8   r2   r:   r;   r   r   r   r   update_forecastsupdate_realizedweightsr   )r   rK   r   Z
news_indexr2   Zweights_columnsr!   r!   r"   check_news_indicesb   s     

rU   c                 C   s  d| _ t| || t| | t| | t| || |rHt| j|dd ntt	| j
  |rrt| j|dd n$t| jjd k tt	| j
  | jd| jd }t| j|dd t| j|	dd t| j|
dd t| j|dd t| j|dd t| j|dd t| j|dd t| jj ddg t| jjjddg t| jj| t| jj d	d
g t| jjjddg t| jj| jj t| jd
 | jdd t| jd	 | jdd | j}d	d
dddg}t|j | ddddg}t|jj| |r| jd
  ddgd
 }t|| jdd | jd	  ddgd	 }t|| jdd | jd  ddgd }t|| jdd t|d  ddg| jdd | jd  ddgj!dd d}t|| jdd | j"}dddg}t|j | ddd	d
ddg}t|jj| |r| j"d  ddddgd }t|| jdd t| j"d  ddg| jdd | j"d  ddgj!dd d}t|| jdd | j#}dddddg}t|j | ddg}t|jj| t|j$d d df | j% dd t|j$d d df | jd% dd t|j$d d df | jd% dd t|j$d d df | j% dd t|j$d d df | j% dd d S )Ng|۽g-q=)Zatolr   Zrevisedzobserved (prev)r$   r%   Zobservedzforecast (prev)rF   rG   r   weightZimpactzimpact datezimpacted variable         )Zaxis      zestimate (prev)zimpact of revisionszimpact of newsztotal impactzestimate (new))&Z	tolerancer#   rE   rL   rU   r   r   r   npallZisnullr   r3   Zfillnar   r   r   rR   rS   r   rT   r   Zdata_revisionsr   r   r   rN   r   Zdata_updatesdetails_by_impactZdrop_duplicatesr=   Zunstacksumdetails_by_updateimpactslocstack)r   	revisionsupdatesr   r   rA   rK   r   r   r   r   rR   rS   news_desiredrT   r   r^   desiredactualr`   ra   r!   r!   r"   
check_newsw   s   






   

  
 
      ri   rd   Tre   c                    sr  t d  }d }|r:|jd d  }|jd d  }n(|jd d  }|jd d  }d}| rpd|jd< t|}|ddg}|j|dd	|d
}tj	dd	dd}	dg}
| r|rtj
j|jdd  dggddgd}|jd dtddd  }nr| rTtj
j|jdd  dggddgd}tjd|jd dtd  f dd}ntj
jg g gddgd}d }|rtj
jtj	dddddggddgd}td|jd d|jd   d|jd  d|jd   d|jd  d|jd   ggj}ntj
jg g gddgd}d }t| |rJtj|jd dtd   dd}n0tj|jd |jd dtd  f dd}tj|jd dtd |jd  f dd}|r
d|jd  g |jd g fddtt D }ttjddtd f j}n@tjg tjd tjg tjdtjg tjd}ttd}t|| ||	|
|||||| || d S )Ninfl2009Q2r   rJ                 ?      ?2010Q1r   r   comparison_typer   r   r$   r%   rM   rZ   rW   r   rY   r   periodsr   rF   rG   g      ?g      ?c                    s   g | ]}|  |  qS r!   r!   r)   irR   rS   r!   r"   r-   _  s   z/test_sarimax_time_invariant.<locals>.<listcomp>Zdtype)r   rZ   )dtar>   rb   ilocr	   SARIMAXsmoothr   rO   period_rangerP   Zfrom_arraysr   r\   arangeZreshaper_arrayTprintranger4   	DataFrameSeriesfloat64zerosri   )rd   re   endogrr   endog1endog2modresr   r   r   rA   r   rK   r   r   r   rf   rT   r!   rx   r"   test_sarimax_time_invariant  s    


"         
"      r   Fwhichexogtrendc                 C   sj  t d  }d }|r:|jd d  }|jd d  }n(|jd d  }|jd d  }d}| rpd|jd< d }d }d}	|dkrt|}t|}n|d	krd
}	tj|||	d}
|
dddg}|j	||dd|d}t|}|ddg}|j	|dd|d}dddddddddddddg}|D ]>}t
||}t
||}t|tjrXt|| n
t|| q&d S )Nrj   rk   r   rJ   rl   rm   nr   r   tr   r   rn   ro   2008Q1r   r   r   rr   rq   r   r   r   r   rT   rR   rS   r   r   r5   r6   rH   rI   )rz   r>   rb   r{   r\   	ones_liker	   r|   r}   r   r   r:   rO   r   r   r   )rd   re   r   r   rr   r   r   exog1exog2r   mod1res1news1mod2res2news2attrsr   wxr!   r!   r"   test_sarimax_time_varyingp  sZ    




      

r   c                 C   sJ  t d  }d }|r:|jd d  }|jd d  }n(|jd d  }|jd d  }d}| rpd|jd< t|}t|}tj|d|d}|d	d
dg}	|	j	||dd|d}
t|d}|d	d
g}|j	|dd|d}dddddddddddddg}|D ]>}t
|
|}t
||}t|tjr8t|| n
t|| qd S )Nrj   rk   r   rJ   rl   rm   Zllevel)r   rn   皙?r   r   rq   r   r   r   r   rT   rR   rS   r   r   r5   r6   rH   rI   )rz   r>   rb   r{   r\   r   r
   ZUnobservedComponentsr}   r   r   r:   rO   r   r   r   )rd   re   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r"   'test_unobserved_components_time_varying  sN    	



      

r   c                    sr  t ddg  }t|d  d |d< |jdd  }d }|rf|jd d  }|jd d  }n(|jd d  }|jd d  }d}| rd|jd	< tj|d
d}tj	d }|
|}|j|dd|d}	tjdddd}
ddg}td}td}|d }|| }|| }| rx|rxtjj|jd	d  ddggddgd}|jd j}tj|| || || || f j}nz| rtjj|jd	d  ddggddgd}|jd	 j}tj|| || || || f j}ntjjg g gddgd}d }|rZ|jd	 j}tj|| || || || f j}|jd j}tj|| || || || f j}nl|jd	 j}tj||jd  || || || f j}|jd	 j}tj||jd  || || || f j}|jd	 j}tj||jd  || || || f j}|r4tjjtjddddddggddgd}|| }ntjjg g gddgd}d }|r
||jd j  |jd j fddtt D }tjj|
|gddgd}tjtd||d }||jd d df< ||jd d df< |j|jd d d!f< |j|jd d df< n@tjg tjd" tjg tjd"tjg tjd"}ttd#}t|	| ||
||||||| || d S )$Nrealgdpunemp  rW   rk   r   rJ   rl   rm   r   r   rn   皙?r   ?ro   r   皙?rp   rq   r   r   )rX   rX   rX   Z
transitionr$   r%   rM   rs   rt   rF   rG   c                    s   g | ]}|  |  qS r!   r!   rv   rx   r!   r"   r-   G  s   z.test_varmax_time_invariant.<locals>.<listcomp>zimpact dateszimpacted variables)rX      )r   r   Z2009Q4ry   )r   r   )rz   r>   r\   logdiffr{   rb   r   VARMAXr   r}   r   rO   r~   r   eyerP   rQ   r   valuesZc_r   r   r4   r   r   r   ri   )rd   re   r   rr   r   r   r   paramsr   r   r   r   ZZT0ZT1ZT2ZT3rA   tmpr   r   Zrev_impacted_forecastsr   rK   r   rf   r   rT   r!   rx   r"   test_varmax_time_invariant  s    





&&  
   
 
      r   c                 C   s  t ddg  }t|d  d |d< |jdd  }d }|rf|jd d  }|jd d  }n(|jd d  }|jd d  }d}| rd|jd	< d }d }d
}	|dkrt|d }t|d }tjd }
tjd }n"|dkrd}	tjd }
tjd }t	j
|||	d}||
}|j||dd|d}t	j
|d
d}||}|j|dd|d}ddddddddddd d!d"g}|D ]>}t||}t||}t|tjrt|| n
t|| q~d S )#Nr   r   r   rW   rk   r   rJ   rl   rm   r   r   )	rn   r   r   r   rl   rl   ro   r   r   r   r   r   )	rl   rl   rn   r   r   r   ro   r   r   r   r   r   r   rq   r   r   r   r   rT   rR   rS   r   r   r5   r6   rH   rI   )rz   r>   r\   r   r   r{   rb   r   r   r   r   r}   r   r   r:   rO   r   r   r   )rd   re   r   r   rr   r   r   r   r   r   params1params2r   r   r   r   r   r   r   r   r   r   r!   r!   r"   test_varmax_time_varying`  sf    








      

r   c                 C   s  t ddg  }t|d  d |d< |jdd  }d }|rf|jd d  }|jd d  }n(|jd d  }|jd d  }d}| rd|jd	< t|d }t|d }tjd
 }tjd }	t	j
||ddd}
|
|}|j||dd|d}t	j
|ddd}||	}|j|dd|d}dddddddddddddg}|D ]>}t||}t||}t|tjr|t|| n
t|| qJd S )Nr   r   r   rW   rk   r   rJ   rl   rm   )r   r   rl   rl   333333?r   rn   r   )r   r   r   r   rn   r   rX   )r   	k_factorsfactor_orderr   r   )r   r   rq   r   r   r   r   rT   rR   rS   r   r   r5   r6   rH   rI   )rz   r>   r\   r   r   r{   rb   r   r   r   ZDynamicFactorr}   r   r   r:   rO   r   r   r   )rd   re   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r!   r"    test_dynamic_factor_time_varying  s\    	


 


      

r   c                 C   sp  t d  }|r6|jd d  }|jd d  }n$|jd d  }|jd d  }| rhd|jd< t|}|ddg}t|}|ddg}|j|dd	}	|j|d
d	}
|j|dd	}|j|d
d	}dddddddddddddg}|D ]x}t|	|}t|
|}t||}t||}t	|t
jrLt|| t|| t|| qt|| t|| t|| qd S )Nrj   rk   r   rl   rm   rn   ro   rJ   rr   r7   r   r   r   r   rT   rR   rS   r   r   r5   r6   rH   rI   )rz   r>   rb   r{   r	   r|   r}   r   r   r:   rO   r   r   r   )rd   re   r   r   r   r   r   r   r   Znews_updated_dataZnews_previous_dataZnews_updated_resultsZnews_previous_resultsr   r   r   r   yzr!   r!   r"   test_defaults  sN    


      







r   c               	   C   s   t d  } tj| jd< d}t| }|ddg}tj	t
|d ||  W 5 Q R X tj	t
|d || W 5 Q R X |j| dd}t|jd	 |j| d
d}t|jd	 |j|d
d}t|jd	 |j|d
d}t|jd	 d S )Nrj   rm   z8Could not automatically determine the type of comparisonrn   ro   matchr7   r   r   rJ   )rz   r>   r\   nanr{   r	   r|   r}   pytestraises
ValueErrorr   r   r   )r   msgr   r   r   r!   r!   r"   test_comparison_types  s"    
r   use_periodsc                 C   s  t d  }| rtj}ndd }|jdd}t|jd d }|ddg}|	|}|d	d
dd}t
|jj| |j	|dd
d}|dd
dd}t
|jj| |j	|ddd}|dddd}t
|jj| |j	||jd
 d
d}|d	d
dd}t
|jj| |j	||jd dd}|dddd}t
|jj| |j	|dd
d}|dd
dd}t
|jj| |j	|ddd}|dddd}t
|jj| |j	||jd
 d
d}|d	d
dd}t
|jj| |j	||jd dd}|dddd}t
|jj| |j	|ddd}|dddd}t
|jj| |j	|dd	d}|dd	dd}t
|jj| |j	|d|jd d}|dddd}t
|jj| |jd|jd d}t
|jj|j |j	|d|jd
 d}|dd	dd}t
|jj| |jd|jd
 d}t
|jj|j |j	||jd dd}|dddd}t
|jj| |j|jd dd}t
|jj|j |j	||jd d	d}|dd	dd}t
|jj| |j|jd d	d}t
|jj|j t|}t||jd
  |dddd}|jd |d dfD ]T}	|j	|d|	d}t
|jj| |	dkr"|jd|	d}t
|jj|j q"|dddd}|jd |d dfD ]T}
|j	||
dd}t
|jj| |	dkr|j|
dd}t
|jj|j qd S )Nrj   c                  _   s   t j| |jddS )Nr   r   )rO   r~   to_timestamp)argskwargsr!   r!   r"   index_range1  s    z)test_start_end_dates.<locals>.index_ranger   r   rm   rn   ro   rk   rW   rt   Z2009Q1r   ru   rX   r   ru   )r   ru   r   r   r   r   rY   r   )rz   r>   rO   r~   r   r	   r|   r{   r}   r   r   r   r   r   nobspredictr4   r   )r   r   r   r   r   r   rg   	predictedZ
total_nobsr   r   r!   r!   r"   test_start_end_dates+  s    


r   r   range2int64numpylistc           
      C   sl  t d  }t|}| dkrDt||_|jd d }t|d }| dkrtj|d dd|_|jd d }tj|d d dd}n| dkrtt	||_|jd d }tt	|d }nV| d	kr|j
}|d d }t|d }n,| d
kr| }|d d }t|d }t|}|ddg}||}|dd }t|jj| |j||jd dd}|dd }t|jj| |j||jd dd}|dd }t|jj| |j||jd dd}|dd }t|jj| |j||jd dd}|dd }t|jj| |j||jd |jd d}|dd }t|jj| | dkr|j|jd |jd d}	t|jj|	j |j||j|jd}|dd }t|jj| | dkr|j|j|jd}	t|jj|	j |j||j|jd d}|dd }t|jj| | dkrh|j|j|jd d}	t|jj|	j d S )Nrj   r   rm   rX   r   )stopstep)r   r   r   r   rn   ro   r   rW   r   r   ir   )r   r   rs   )rz   r>   r4   rO   Z
RangeIndexr   r{   Indexr\   r   r   r   r	   r|   r}   r   r   r   r   r   r   )
r   r   r   Z
endog_initZindex_plus2r   r   r   rg   r   r!   r!   r"   test_start_end_int  sr    





r   c               	   C   s\   t d  } t| jd d }|ddg}d}tjt|d |	| j
 W 5 Q R X d S )Nrj   rm   rn   ro   z?The index associated with the updated results is not a supersetr   )rz   r>   r	   r|   r{   r}   r   r   r   r   r   )r   r   r   r   r!   r!   r"   test_invalid  s    r   ),__doc__Zstatsmodels.compat.pandasr   r   r   r\   Znumpy.testingr   r   r   ZpandasrO   r   Zstatsmodelsr   Zstatsmodels.tsa.statespacer   r	   r
   r   Z	macrodataZload_pandasdatarz   r~   r   r#   rE   rL   rU   ri   markZparametrizer   r   r   r   r   r   r   r   r   r   r   r!   r!   r!   r"   <module>   s^   
 ^:4{A:-
k 
H