U
    }hL                     @   sd   d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ edd ZdS )	    )combinationsN)FactorAnalysis)_ortho_rotation)ConvergenceWarning)assert_almost_equalassert_array_almost_equalignore_warningsc               
   C   s^  t jd} d\}}}| ||}| ||}| jd|d| || }t ||| }g }dD ] }	t||	d}
|
| ||
 |
	|}|j
||fkstt|
jd |
|  t|
| |
| t t |
j}|dkstd	t j|dd
d}|
 }t t || |j }|dk s@td| t|t |d}
tt  |
|d d d df  W 5 Q R X q`dd }|\}}dD ]}t|||||| qd|_d|_tt || W 5 Q R X dd|j
d fD ]F}||
_ |
| |
 }|
! }t"t ||t #|j
d d qd}i i  }}dD ],}	t||	d}|$|||	< | ||	< qLt%d ddgdD ]B\}}t &|| || rtt j&|| || ddstqt 'ddddgdd d!d"gd#d$d%d&gd'd(d)d*gg}t 'd+d,gd-d.gd/d0gd1d2gg}t(|d d d |f dd3j)}t"t |t |dd4 d S )5Nr   )            )size)Z
randomizedZlapack)n_componentsZ
svd_methodg        zLog likelihood dif not increaseg      ?)ZrowvarZbiasg?zMean absolute difference is %f)r   Znoise_variance_init   c                 S   s   t t| |S )N)npabsgetattr)xy r   T/tmp/pip-unpacked-wheel-ig1s1lm8/sklearn/decomposition/tests/test_factor_analysis.pyfC   s    ztest_factor_analysis.<locals>.f)loglike_Zcomponents_Znoise_variance_T   )Nvarimax	quartimax)r   Zrotationr   r   r   )Zatolgm^?gxֿg1e}Vѿgp1R?gթ4ܿgJ_JUgvٯ;ݷ?gEq^Og 5?ḡ]͔g>ȫ?ge<wg?gq g .>?grzM?gbX9?g9v?g?5^I¿gS?g|?5^?g333333ӿgCl?gMbп)method)decimal)*r   randomZRandomStateZrandngammadotr   ZfitappendZ	transformshapeAssertionErrorr   r   Zscore_samplessumZmeanZscorealldiffcovZget_covariancer   r   ZonespytestZraises
ValueErrorZmax_iterverboseZwarnsr   r   Zget_precisionr   ZeyeZfit_transformr   Zallclosearrayr   T)rngZ	n_samplesZ
n_featuresr   WhZnoiseXZfasr   faZX_tr'   ZscovZmcovr   Zfa1Zfa2attrr(   Z	precisionresultsZprojectionsZfa_varZrot1Zrot2ZfactorsZ
r_solutionZrotatedr   r   r   test_factor_analysis   s|    




 &
$
"



r5   )	itertoolsr   Znumpyr   r)   Zsklearn.decompositionr   Z&sklearn.decomposition._factor_analysisr   Zsklearn.exceptionsr   Zsklearn.utils._testingr   r   r   r5   r   r   r   r   <module>   s   