a
    \:bF                     @   s   d dl mZ d dlZd dlm  m  mZ G dd deZ	dddZ
ddd	Zd ddZd!ddZd"ddZdd Zdd Zd#ddZdd ZdS )$    )lrangeNc                   @   s$   e Zd Zdd Zdd Zdd ZdS )MPLConfiguratorc                 C   s
   g | _ d S N_inverse_actions)self r   Alib/python3.9/site-packages/statsmodels/tsa/vector_ar/plotting.py__init__
   s    zMPLConfigurator.__init__c                 C   s   | j D ]
}|  qd S r   r   )r   actionr   r   r	   revert   s    
zMPLConfigurator.revertc                    s:   dd l   jd | jd<  fdd}| j| d S )Nr   	font.sizec                      s    j d< d S )Nr   )rcParamsr   ZmplZold_sizer   r	   r      s    z,MPLConfigurator.set_fontsize.<locals>.revert)Z
matplotlibr   r   append)r   sizer   r   r   r	   set_fontsize   s
    

zMPLConfigurator.set_fontsizeN)__name__
__module____qualname__r
   r   r   r   r   r   r	   r      s   r   c                 C   s   ddl m} | jd }|d }}|jdd}t|D ]\}| dd|f }	||||d }
|durp|
||	 n
|
|	 |dur4|
||  q4|S )z#
    Plot multiple time series
    r   N   
   r   figsize)matplotlib.pyplotpyplotshapefigurerangeZadd_subplotplot	set_title)YnamesindexpltkrowscolsfigjZtsaxr   r   r	   plot_mts   s    


r,   Tc                 C   sP  dd l m} | j\}	}
|
d }}|jdd}t|	}t|	d |	t| }t|	|	t| }t|
D ]}||||d }|j	|| d d |f ddd}|j	|tj
| dd |f |d d |f f d	d
d}|r|j	||d d |f ddd}|	||d d |f d |d ur(|||  |d u r:ddi}|jf i | qj|S )Nr   r   r   r   r&   ZObserved)Zlabelk--ZForecastzk-.zForc 2 STD errZloczupper right)r   r   r   r   nparangelenr   Zsubplotr    Zr_r!   Zlegend)ZpriorZforcZ	err_upperZ	err_lowerr$   r#   Zplot_stderrZlegend_optionsr%   nr&   r'   r(   r)   ZprangeZrng_fZrng_errr*   r+   Zp1Zp2Zp3r   r   r	   plot_var_forc9   s0    


,

r3   r&   r.   皙?asymc                    s   ddl m}  du r|  dur(n
tt|  fdd}	|	| | |dur|dkrt|}
|	| |
|  | |	| |
|  | |dv r|	|d | |	|d | dS )zm
    Make plot with optional error bars

    Parameters
    ----------
    y :
    error : array or None
    r   Nc                    s     | |S r   )r    )yZfmtaxesxr   r	   <lambda>l       z!plot_with_error.<locals>.<lambda>r5   ZmcZsz1Zsz2Zsz3r   )r   r   gcar   r1   utilZnorm_signif_level)r6   errorr9   r8   	value_fmtZ	error_fmtalphastderr_typer%   Zplot_actionqr   r7   r	   plot_with_error\   s    


rD      c                 C   s   ddl m} t }|| | jd }|j||ddd\}}	t|D ]f}
t|D ]X}|	|
 | }t| dd|
|f |||d |durP|j|dd	d
 |j| dd	d
 qPqDt	  |
  |S )z$

    Parameters
    ----------
    r   Nr   r   F)r   squeeze)	linewidthxlabelr+   r&   z--)colorZ	linestyle)r   r   r   r   r   subplotsr   
acorr_plotaxhlineadjust_subplotsr   )acorrfontsizerG   rH   Z	err_boundr%   Zconfigr&   r)   r8   ir*   r+   r   r   r	   plot_full_acorrz   s"    

rQ   c                 C   s|   dd l m} |d u r| }|d u r2tt| }|j|dg| |d |jddd |ddg |	d|d d g d S )Nr   )Zlwr&   rI   r-   r   )
r   r   r=   r/   r0   r1   ZvlinesrL   Zset_ylimZset_xlim)rN   rG   rH   r+   r%   r   r   r	   rK      s    rK   c                   C   s   t d S r   )NotImplementedErrorr   r   r   r	   plot_acorr_with_error   s    rT   c                  K   s<   dd l m} tdddddd}||  |jf i | d S )Nr   r4   g?gffffff?g?)ZbottomtopleftrightZhspace)r   r   dictupdateZsubplots_adjust)kwdsr%   Zpassed_kwdsr   r   r	   rM      s    
rM   r   c              
   C   s  ddl m} |du ri }|	du r$i }	t|||\}}}|j||dd|
d\}}t  |j|dd d}t|}tt| }|D ]J\}}}}|| | }|durR|d	krt	|dd|| | || | f }t
| dd||f ||||d
|d |dv rr|d dd||f |d dd||f f}t
| dd||f ||||d
|d n t
| dd||f d||d
d |jddd |dur|j|||f dd |dd}|j||| || f |d q~|S )z
    Reusable function to make flexible grid plots of impulse responses and
    comulative effects

    values : (T + 1) x k x k
    stderr : T x k x k
    hlines : k x k
    r   NTF)nrowsncolsZsharexrF   r      )rO   z%s$\rightarrow$%sr5   b)r9   r8   rA   r@   rB   r<   r   )r9   r8   r@   r&   rR   rO      )r   r   _get_irf_plot_configrJ   rM   Zsuptitler1   r   r/   ZsqrtrD   rL   getr!   )valuesstderrimpcolrescolr#   titleZsignifZhlinesZsubplot_paramsZplot_paramsr   rB   r%   r[   r\   to_plotr)   r8   Zsubtitle_tempr&   rngr*   rP   ZaiZajr+   ZsigZerrsZszr   r   r	   irf_grid_plot   sH    


(
,
 ri   c                    s   t |  } }|d urP|d urPd }}t| |t| |  ddfg}nv|d urd}t| |fddtD }nF|d urd}t| |  fddtD }nfddtD }|||fS )Nr   r   c                    s   g | ]} ||d fqS r   r   ).0rP   )r*   r   r	   
<listcomp>  r;   z(_get_irf_plot_config.<locals>.<listcomp>c                    s   g | ]}| |d fqS rj   r   )rk   r*   )rP   r   r	   rl   
  r;   c                    s&   g | ]}t  D ]}||||fqqS r   )r   )rk   rP   r*   )r&   r   r	   rl     r;   )r1   r>   Z	get_indexr   )r#   rd   re   r[   r\   rg   r   )rP   r*   r&   r	   r`      s     r`   )NN)NNTN)NNr&   r.   r4   r5   )rE   rE   NN)rE   NN)r4   NNNr   r5   )Zstatsmodels.compat.pythonr   Znumpyr/   Zstatsmodels.tsa.vector_ar.utilZtsaZ	vector_arr>   objectr   r,   r3   rD   rQ   rK   rT   rM   ri   r`   r   r   r   r	   <module>   s(   
  
#  
  

  
=