U
    Ãmœd @  ã                   @   sž   d dl mZ d dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZ d dlmZmZ d dlmZmZmZ d dlmZ dZG dd	„ d	ƒZd
d„ Zdd„ Zdd„ ZdS )é    )ÚPLATFORM_WIN32N)Úassert_allcloseÚassert_equalÚassert_raises)ÚPCAÚpca)ÚdataÚ	princomp1Ú	princomp2)ÚEstimationWarningçñhãˆµøä>c                   @   sÀ   e Zd Zedd„ ƒZejjejjdd„ ƒƒZ	dd„ Z
dd„ Zd	d
„ Zdd„ Zejjdd„ ƒZdd„ Zejjdd„ ƒZdd„ Zejjedd�dd„ ƒZdd„ Zejjdd„ ƒZdd„ Zdd „ Zd!S )"ÚTestPCAc           
      C   sÒ   t j ¡ }| d¡ d}d}d}d}|j}|||fƒ}|||fƒ}|j|||fd�| }	| |	¡| | _| jd | _|| _	d}d}d}d}|j}|||fƒ}|||fƒ}|j|||fd�| }	| |	¡| | _
d S )	NiÒ  é   éd   éÈ   é   )Úsizeç        é,  )ÚnpÚrandomZRandomStateÚseedÚstandard_normalZstandard_gammaÚdotÚxÚx_copyÚrsÚx_wide)
Úclsr   ÚkÚnÚtZlamZnorm_rngÚeÚfÚb© r%   ú`/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/multivariate/tests/test_pca.pyÚsetup_class   s,    

zTestPCA.setup_classc                 C   s²   t | jƒ}| ¡ }|jdd�}|jdd�}|jdd�}| ¡ }|jdd�}| ¡  t | jdd�}| ¡  t | jddd	�}| ¡  t | jd
dd�}d| ¡ ks t‚t| j|jƒ d S )Né
   ©ÚncompF©Z	log_scaleT)Z
cumulativeé   ©Ústandardize©r.   Údemeanr   ©r*   ÚglsZGLS)r   r   Ú
plot_screeÚplot_rsquareÚ__repr__ÚAssertionErrorr   r   )ÚselfÚclose_figuresÚpcÚfigr%   r%   r&   Útest_smoke_plot_and_repr/   s    
z TestPCA.test_smoke_plot_and_reprc                 C   sœ  t | jƒ}t | jdd�}t|j|jƒ tt |jd d …d d…f ¡t |jd d …d d…f ¡ƒ tt |jd d…d d …f ¡t |jd d…d d …f ¡ƒ t|j|jƒ tt |j	d d …d d…f ¡t |j	d d …d d…f ¡ƒ t | jddd�}t | jddd�}tt |j¡t |j¡t
d� tt |j¡t |j¡t
d� t|j|jt
d� tt |j	¡t |j	¡t
d� t| j|jƒ t| j|jƒ t| j|jƒ d S )NZsvd©Úmethodr   )r=   r*   Znipals©Zatol)r   r   r   Ú
projectionr   ÚabsÚfactorsÚcoeffÚ	eigenvalsÚ	eigenvecsÚ	DECIMAL_5r   r   )r7   Zpc_eigZpc_svdZ	pc_nipalsr%   r%   r&   Útest_eig_svd_equivD   sH    
ÿÿÿÿ
þ
þþ
þzTestPCA.test_eig_svd_equivc                 C   s”  t | jƒ}t | jdd�}t|j |j¡|j |j¡ƒ |j}t|j |¡t d¡dd� |j}t|j |¡t d¡dd� t | jdd�}t|jd d …d d…f |jƒ t|jd d…d d …f |jƒ t|j	d d… |j	ƒ t|j
d d… |j
ƒ t|jd d …d d…f |jƒ t | jddd	�}| j d
¡}| j| }|j |¡}tj |¡\}	}
t |	¡}|d d d… }|	| }	|
d d …|f }
t||jƒ t|	|j
ƒ tt |
¡t |j¡ƒ tt |j¡t | |
¡¡ƒ t|j|| ƒ t | jdddd�}| j}|j |¡}tj |¡\}	}
t |	¡}|d d d… }|	| }	|
d d …|f }
t||jƒ t|	|j
ƒ tt |
¡t |j¡ƒ tt |j¡t | |
¡¡ƒ d S )NF)Ú	normalizer   r   r>   r(   r)   é   )r.   rG   r   éÿÿÿÿ)r.   r0   rG   )r   r   r   rA   r   rB   ÚTr   ÚeyeÚrsquarerC   rD   ÚmeanÚlinalgZeighZargsortZtransformed_datar@   r?   )r7   r9   Z
pc_no_normZprincompÚweightsZpc_10ÚmuZxdmZxpxÚvalZvecÚindr   r%   r%   r&   Útest_optionsh   sR    
ÿ


zTestPCA.test_optionsc                 C   s6  t jd }t|ddd�}t}tt |j¡t |j¡ƒ t|j |j	¡| 
d¡ |ƒ tt |j	¡t |jj¡ƒ t|j |j	¡|j |jj¡ƒ t|d d… ddd�}|d d…  
d¡}t}tt |j¡t |j¡ƒ t|j |j	¡| |d d… ƒ tt |j	¡t |jj¡ƒ t|j |j	¡|j |jj¡ƒ d S )Ng     @�@F)rG   r.   r   é   )r   Zxor   r	   r   r   r@   rA   r   rB   rM   ÚcoefrJ   r
   )r7   r   r9   ÚrefrP   r%   r%   r&   Útest_against_reference•   s$    
ÿ ÿzTestPCA.test_against_referencec              	   C   sÖ   t jdd��"}t| jdd�}tt|ƒdƒ W 5 Q R X t jdd��:}| j}| d¡t 	d¡ }t|dd	�}tt|ƒdƒ W 5 Q R X t
tt| jd
d	� t
tt| jd
d� t
tt| jdd� t
tttjt 	d¡ dd� d S )NT)Úrecordr   r)   é   )r   rY   r   Zeigr<   Úunknown©Úmissingç       @)Ztol)r   r   )ÚwarningsÚcatch_warningsr   r   r   Úlenr   r   r   Zonesr   Ú
ValueErrorÚnan)r7   Úwr9   r   r   r%   r%   r&   Útest_warnings_and_errorsª   s    z TestPCA.test_warnings_and_errorsc                 C   s˜   t t | j¡ƒ}t | jƒ}t|jj|jƒ | ¡ }|jdd�}|jdd�}| ¡ }|jdd�}| 	d¡}t t | j¡ddd	� t t | j¡ddd
� d S )Nr(   r)   Fr+   r,   r   é   Tr1   )r*   r.   )
r   ÚpdÚ	DataFramer   r   rA   Úvaluesr3   r4   Úproject)r7   r8   r9   Zpc1r:   Zprojr%   r%   r&   Útest_pandasº   s    

zTestPCA.test_pandasc                 C   s
  t tt| jdd� t tt| jt ddg¡d� | j| j d¡ }||d  d¡ }t|ddddd	�}t|dddd
�}||j }|d  d¡}d| }|t |d  ¡ ¡ }t	||j
ƒ t||jƒ t||jƒ t|ddd|d�}t	||j
ƒ t	t |j¡t |j¡ƒ d S )NT)r2   ç      ð?)rO   r   r]   rY   F)r*   r.   r0   r2   ©r*   r.   r0   )r*   r.   r0   rO   )r   ra   r   r   r   ÚarrayrM   r?   Úsqrtr   rO   r   r   r@   rA   )r7   r   Zpc_glsr9   ÚerrorsÚvarrO   Z
pc_weightsr%   r%   r&   Útest_gls_and_weightsÈ   s     
zTestPCA.test_gls_and_weightsc                 C   s’   t | jƒ}t|jjd | jjd ƒ t|jjd tt | jj¡ƒƒ t t	 
| j¡ƒ}t|jjd | jjd ƒ t|jjd tt | jj¡ƒƒ d S )NrY   r   )r   r   r   rA   ÚshaperD   Úminr   rm   rf   rg   )r7   r9   r%   r%   r&   Ú	test_wideß   s    
 zTestPCA.test_widec                 C   sÂ  t | jdd�}| j d¡}| j| }tj |j¡ |¡}|j |¡}t|j	|| ƒ t | jddd�}tj |j¡ |¡}|j |¡}t|j	|| ƒ t | jdddd�}tj |j¡ | j¡}|j |¡}t|j	|ƒ t | jddd�}| j d¡}| j| }tj |j¡ |¡}|j |¡}t|j	|| ƒ t | jddd�}tj |j¡ |¡}|j |¡}t|j	|| ƒ t | jddddd	�}tj |j¡ | j¡}|j |¡}t|j	|ƒ |j
}tt|d
ƒ d S )Nr,   r)   r   F)r.   r*   )r.   r0   r*   Tr1   )r.   r0   r*   r2   é   )r   r   rM   r   rN   ZpinvrA   r   r   r?   ri   r   ra   )r7   r9   rP   Zdemean_xrU   Údirectri   r%   r%   r&   Útest_projectioné   s<    

zTestPCA.test_projectionzWindows 32-bit)Úreasonc              	   C   s  | j  ¡ }tj|d d d…d d d…f< t|dd�}|t t t |¡d¡¡ }t|ƒ}t|j	|j	ƒ t
||jƒ t|dd�}|d d …t t t |¡d¡¡f }t|ƒ}t|j	|j	ƒ t
||jƒ t|dd�}|j|jkrÞ|}n|}t|ƒ}t|j	|j	ƒ t
||jƒ t|d	d
d�}t |¡}tj|dd�}|| }	t tj|	d dd�¡}
|	|
 }d||< || }d}d}|dk�rÚt|d	ddd�}|j	| ||< || }|| }t t |d ¡¡t t |d ¡¡ }|}|d7 }�qj| j d }|j	|
 | }|| ||< t|j|ƒ t
| j | jƒ | j }t|ƒ}t|dd�}t|j	|j	td� t|dd�}t|j	|j	td� t|dd�}t|j	|j	td� t|d	d�}t|d	d
d�}t|j	|j	td� | j  ¡ }tj|d d …d d …f< ttt|dd� ttt|dd� ttt|dd� ttt|d
d� d S )Nr,   é   údrop-rowr[   rY   údrop-colr   údrop-minr   úfill-em©r*   r\   )Zaxisr   r   rk   gH¯¼šò×j>Frl   r>   r)   )r   Úcopyr   rb   r   Zlogical_notÚanyÚisnanr   r?   r   r   r   Znanmeanrn   ÚsumZ_adjusted_datar   rE   r   ra   )r7   r   r9   Zx_dropped_rowZ
pc_droppedZx_dropped_colZx_dropped_minr\   rP   ro   ÚsigmaÚx_stdÚlastÚdeltaÚcountZpc_tempÚcurrentÚdiffr?   r%   r%   r&   Útest_replace_missing  sv    
$

(

zTestPCA.test_replace_missingc                 C   s„  | j d }| d¡}|| }t |d¡}|| }t| j ƒ}|jd }t |d ¡}t |d ¡}	t|d ƒD ]2}
||j	|
ddd� }dt |d ¡|	  ||
< qlt
||jƒ t| j dd�}t |d ¡}	t|d ƒD ]2}
||j	|
ddd� }dt |d ¡|	  ||
< qÔt
||jƒ t| j ddd	�}t |d ¡}	t|d ƒD ]4}
||j	|
ddd� }dt |d ¡|	  ||
< �q>t
||jƒ d S )
Nr   r   rY   r   F)Z	transformZunweightrk   r-   r/   )r   rM   r   Ústdr   rr   Zzerosr‚   Úrangeri   r   rL   )r7   r   rP   Zx_demeanr‹   r„   r9   ZnvarrL   ÚtssÚiro   r%   r%   r&   Útest_rsquareZ  s2    



zTestPCA.test_rsquarec                 C   s¤  | j  ¡ }tj|d d d…d d d…f< t|ddd�}t |¡}t|ddd�}t|j|jƒ t|j	|j	ƒ tt | j  ¡ ¡dd�}t
|jt|jƒƒs”t‚t
|jt|jƒƒsªt‚t
|jt|jƒƒsÀt‚t
|jt|jƒƒsÖt‚| j  ¡ }tj|d d d…d d d…f< t |¡}t|dd�}t|dd�}t|j|jƒ t|j	|j	ƒ t|d	d�}t|d	d�}t|j|jƒ t|j	|j	ƒ t|d
d�}t|d
d�}t|j|jƒ t|j	|j	ƒ d S )Nr,   ry   r   r}   r~   r)   rz   r[   r{   r|   )r   r   r   rb   r   rf   rg   r   rB   rA   Ú
isinstanceÚtyper6   r   rC   rD   )r7   r   r9   Zpc_dfZpc_df_nomissingZx_dfr%   r%   r&   Útest_missing_dataframex  s6    



zTestPCA.test_missing_dataframec                 C   s&   | j  ¡ }tt|ƒjt|ƒd ƒ d S )Nr   )r   r   r   r   rA   r   )r7   r   r%   r%   r&   Útest_equivalence›  s    
zTestPCA.test_equivalencec                 C   s0   | j  ¡ }t|dd�j}t|ƒj}t||ƒ d S )NT)Zsvd_full_matrices)r   r   r   rA   r   )r7   r   Zsvd_full_matrices_trueZsvd_full_matrices_falser%   r%   r&   Útest_equivalence_full_matricesŸ  s    

z&TestPCA.test_equivalence_full_matricesN)Ú__name__Ú
__module__Ú__qualname__Úclassmethodr'   ÚpytestÚmarkZsmokeZ
matplotlibr;   rF   rS   rW   rd   rj   rq   Zslowrt   rw   Zskipifr   rŠ   r�   r’   r“   r”   r%   r%   r%   r&   r      s,   
$-

	'
I
"r   c               	   C   s:   t  d¡} t j| d< tjtdd�� t| ƒ W 5 Q R X d S )N©r   é2   )r   r   zdata contains non-finite values©Úmatch)r   Úemptyrb   r™   Úraisesra   r   )r   r%   r%   r&   Útest_missing¦  s    

r¡   c              	   C   sp   t j d¡}t j|dd d…f< t t¡� t|ddd� W 5 Q R X t|dd�}t|j	j
ƒt|j
ƒd	 kslt‚d S )
Nr›   r   éýÿÿÿr,   r{   r~   r|   r[   rY   )r   r   r   rb   r™   r    ra   r   ÚmaxrA   rr   r6   )Úreset_randomstater   Úpr%   r%   r&   Útest_too_many_missing­  s    r¦   c              	   C   sŽ   t j d¡}|d d …d d…f d|d d …dd …f   |d d …dd …f< tjtdd�� t|ddd�j}W 5 Q R X |j|jd	 dfksŠt	‚d S )
N)i�  r   rY   g{®Gáz„?z#Many series are being down weightedr�   r   Tr1   r   )
r   r   r   r™   Zwarnsr   r   rA   rr   r6   )r¤   r   rA   r%   r%   r&   Útest_gls_warning¶  s
    <r§   )Zstatsmodels.compat.platformr   r^   Únumpyr   Zpandasrf   r™   Znumpy.testingr   r   r   Zstatsmodels.multivariate.pcar   r   Z.statsmodels.multivariate.tests.results.datamlwr   r	   r
   Zstatsmodels.tools.sm_exceptionsr   rE   r   r¡   r¦   r§   r%   r%   r%   r&   Ú<module>   s       	