
    0Ph=                         d Z ddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZ d"d	Zd
 Zd Zd Zej                            dddg          d             Zd Zd Zej                            dddg          d             Zd Zej                            d          ej                            dg d          d                         Z d Z!d Z"ej                            dg d          ej                            dddg          ej                            dddg          d                                     Z#ej                            dddg          d              Z$d! Z%dS )#z
Test the fastica algorithm.
    N)stats)PCAFastICAfastica)_gs_decorrelation)ConvergenceWarning)assert_allcloseignore_warningsc                     t          j        | |          } | |                     d          z  } | |                     d          z  } dS )a  Centers and norms x **in place**

    Parameters
    -----------
    x: ndarray
        Array with an axis of observations (statistical units) measured on
        random variables.
    axis: int, optional
        Axis along which the mean and variance are calculated.
    r   axisN)nprollaxismeanstd)xr   s     h/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/decomposition/tests/test_fastica.pycenter_and_normr      sE     	AtAQAAAAA    c                     t           j                            d          } t           j                            |                     dd                    \  }}}|                     d          }t          ||d           |dz                                  dk     sJ |                     d          }t          ||d          }t          j        ||j	                  }|d d         dz                                  dk     sJ d S )Nr   
      g|=   )
r   randomRandomStatelinalgsvdrandnr   sumdotT)rngW_wutmps         r   test_gsr)   #   s     )


"
"CimmCIIb"--..GAq!		"AaBqD::<<'!!!!		"A!Q""A
&AC..CGqL'))))))r   c                 t   t           j                            d          }|                    d                              | d          }t          dddd                              |          }|j        j        | k    sJ |j	        j        | k    sJ |j
        j        | k    sJ |j        j        | k    sJ d S )	Nr   d   r   Fcopyr     unit-variancen_componentsmax_iterwhitenrandom_state)r   r   r   random_sampleastyper   fitcomponents_dtypemixing_mean_
whitening_)global_dtyper#   Xficas       r   test_fastica_attributes_dtypesrA   1   s    
)


"
"C)$$++Lu+EEAoA  	c!ff 	 !\1111<----:|++++? L000000r   c                    t           j                            d          }|                    d                              | d          }t          |dd|          \  }}}|j        | k    sJ |j        | k    sJ |j        | k    sJ d S )Nr   r+   Fr-   r/   r0   )r3   r4   r5   )r   r   r   r6   r7   r   r:   )r>   r#   r?   k_r;   s_s         r   test_fastica_return_dtypesrE   =   s    
)


"
"C)$$++Lu+EEA	Ds  OB 8|####=L((((8|######r   	add_noiseTFc           	         |dk    r>|t           j        k    r.| s,t          j        d          dk    rt	          j        d           t           j                            |          }d}dt          j        t          j	        dd|                    z  dk    d	z
  }t          j                            d	||
          }t           j        ||f         j        }t          |           |                    |          }|\  }}d}t          j        t          j        |          t          j        |          gt          j        |          t          j        |           gg          }	|	                    |          }	t          j        |	|          }
| r|
d|                    dd          z  z  }
t          |
           d }ddg}ddd|g}g d}t+          j        |||          D ]\  }}}|rqt/          |
j        ||||          \  }}}t	          j        t2                    5  t/          |
j        t           j        ||           d d d            n# 1 swxY w Y   nt7          dd|          }|                    |
j                  }t/          |||d|          \  }}}t	          j        t2                    5  t/          |t           j        |           d d d            n# 1 swxY w Y   |j        }|rL|t           j        k    rdnd}t;          t          j        t          j        ||          |
          ||           t          |           |\  }}t=          t          j        ||                    t=          t          j        ||                    k    r|\  }}|t          j        t          j        ||                    z  }|t          j        t          j        ||                    z  }| sRt;          t          j        ||          |z  d	d           t;          t          j        ||          |z  d	d           gt;          t          j        ||          |z  d	d           t;          t          j        ||          |z  d	d           t/          |
j        |||          \  }}}tA          |||          }|                    |
j                  }|j!        j"        dk    sJ |j"        d k    sJ t;          ||           t          j#        t          j        |                    |t           j        k    rdnd!z  }t;          ||$                    |
j                  |           |j%        j"        dk    sJ tA          t           j        |          }t	          j        t2                    5  |&                    |
j                   d d d            d S # 1 swxY w Y   d S )"N   DISTRIBubuntuzFastICA instability with Ubuntu Atlas build with float32 global_dtype. For more details, see https://github.com/scikit-learn/scikit-learn/issues/24131#issuecomment-1208091119r/   r   r   r,      sizer5   g333333?皙?c                 D    | dz  d| dz  z                       d          fS )N   r   r   r   )r   )r   s    r   g_testz#test_fastica_simple.<locals>.g_testm   s'    !ta!Q$h__"_----r   parallel	deflationlogcoshexpcubearbitrary-variancer0   F)funr4   	algorithmr5   )rY   r4   rZ   Tr2   r4   r5   F)rY   rZ   r4   r5   )rY   rZ   gh㈵>atolg{Gz?)rY   rZ   r5   r   r   r/   r   gHz>)'r   float32osgetenvpytestxfailr   r   sinlinspacer   trvsc_r"   r   r7   arraycosr!   r   	itertoolsproductr   raises
ValueErrortanhr   fit_transformr	   abssignr   r9   shapemax	transformr;   r8   )rF   global_random_seedr>   r#   	n_sampless1s2sphimixingmrQ   algosnls	whiteningalgonlr4   rC   r;   rD   pcar?   r]   s1_s2_r%   sources_funicasourcess                                 r   test_fastica_simpler   H   s    	b  BJ&& 'Ii  H,,`	
 	
 	
 )

 2
3
3CI
bfR[C3344
4q
8A	=B	QY5G	H	HB
b"fAA	AFB CXsRVC[[1BF3KK"&++3NOPPF]]<((F
vqA &	S399Q%%%%A. . . %EeVV
,C>>>I%-eS)DD )G )Gb& 	8%Fd  OB z** I I4HHHHI I I I I I I I I I I I I I I 1TDDDC!!!#&&A%rT%c  OB z** 8 8rw$77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8T 	K (2:55441DBF26'2#6#6::BTJJJJS rvc2#bfS"oo"6"666HCrwrvc2'''rwrvc2'''  	GBF3OOi7FFFFBF3OOi7FFFFFBF3OOi7FFFFBF3OOi7FFFFF  	t2D  Aq+ bD7I
J
J
JC$$G? F****=I%%%%K))) 6"&//""lbj.H.HdddSDGS]]13//d;;;;;&&&&
bg
.
.
.C	z	"	"                   s6   #II	I	6KK#	&K#	:W""W&)W&c                      ddgddgg} t          ddd          }d}t          j        t          |          5  |                    |            d d d            n# 1 swxY w Y   t          |d          sJ d S )Nr   rK   Fr[   z(Ignoring n_components with whiten=False.matchr;   )r   rc   warnsUserWarningr8   hasattr)r~   r   warn_msgs      r   test_fastica_nowhitenr      s    
Q!QA qQ
?
?
?C9H	k	2	2	2  


              3	"""""""s   AA!Ac                  p   t           j                            d          } d}t          j        dd|          }t          j        |          }t          j        t          j        t           j        |z                      }t           j        ||f         j        }t          |           | 
                    dd          }t          j        ||          }d}t          j        t          |          5  t          dd| dd	
          }	|	                    |j                   d d d            d S # 1 swxY w Y   d S )Nr   r/   r,      r   z\FastICA did not converge. Consider increasing tolerance or the maximum number of iterations.r   rR           )rZ   r2   r5   r3   tol)r   r   r   rf   re   ceilpiri   r"   r   r   r!   rc   r   r   r   r8   )
r#   rx   rg   ry   rz   r{   r}   r~   r   r   s
             r   test_fastica_convergence_failr      sY    )


"
"CI
AsI&&A	B		""	#	#B
b"fAA YYq!__F
vqA	/  
(	9	9	9   qsQTW
 
 
 		                 s   //D++D/2D/c           	         t           j                            d          }d}t          j        dd|          }t          j        |          }t          j        t          j        t           j        |z                      }t           j        ||f         j        }t          |           |\  }}|
                    dd          }t          j        ||          }| r|d|
                    d|          z  z  }t          |           t          |j        dd|          \  }	}
}|j        }t          |t          j        t          j        |
|	          |                     t          |           |\  }}t          t          j        ||                    t          t          j        ||                    k    r|\  }}|t          j        t          j        ||                    z  }|t          j        t          j        ||                    z  }| sRt          t          j        ||          |z  d	d
           t          t          j        ||          |z  d	d
           d S d S )Nr   r/   r,   r   r   rN   r0   r[   rK   gMbP?r\   )r   r   r   rf   re   r   r   ri   r"   r   r   r!   r   r	   rr   rs   )rF   r#   rx   rg   ry   rz   r{   r}   r~   rC   r;   rD   r   r   s                 r   test_non_square_fasticar      s&    )


"
"CI
AsI&&A	B		""	#	#B
b"fAAFB YYq!__F
vqA +	S399Q	****A	!O#  OB 
B Brvgr22A66777BHC 26#r??c"&b//2222S2726#r??###C2726#r??###C  CsB)3QTBBBBsB)3QTBBBBBBC Cr   c                 $   t           j                            |           }|                    d                              |          }d}ddgddgfD ]\  }}||n|j        d         }t          |||d	          }t          j                    5  t          j	        d
t                     t          j	        dt                     |                    |          }	ddd           n# 1 swxY w Y   |j        j        |dfk    sJ |	j        |j        d         |fk    sJ t          |||d	          }
t          j                    5  t          j	        d
t                     t          j	        dt                     |
                    |           ddd           n# 1 swxY w Y   |
j        j        |dfk    sJ |
                    |          }|r*t          j        |                                          dz  }nd}t%          |	||           dS )zTest unit variance of transformed data using FastICA algorithm.

    Check that `fit_transform` gives the same result as applying
    `fit` and then `transform`.

    Bug #13056
    r+   i,  r0   r   FNrK   r   r1   errorignorer   g    .Ar   r\   )r   r   r   r6   r7   rt   r   warningscatch_warningssimplefilterRuntimeWarningr   rq   r9   r8   rv   rr   r   r	   )rw   r>   r#   r?   r3   r4   r2   n_components_r   Xtica2Xt2r]   s                r   test_fit_transformr     s    )

 2
3
3C)$$++L99AH"11!5t} E #, #,(4(@agaj%VW
 
 
 $&& 	& 	& !'>::: !(,>???""1%%B	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& $(;;;;;xAGAJ66666%VW
 
 
 $&& 	 	 !'>:::!(,>???HHQKKK	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 %-)<<<<<nnQ  	6#;;##%%+DDDCd+++++G#, #,s&   A
C%%C)	,C)	A
FF	!F	z/ignore:Ignoring n_components with whiten=False.z+whiten, n_components, expected_mixing_shape))rX   r   r   r   )rX   r   r   r   )r0   r   r   )r0   r   r   )Fr   r   )Fr   r   c                    d}t           j                            |          }|                    |df                              |          }t          |||           }t          j                    5  t          j        dt                     |
                    |          }	d d d            n# 1 swxY w Y   |j        j        |k    sJ |                    |	          }
|j        |
j        k    sJ ||j        d         k    rB|r*t          j        |
                                          dz  }nd}t!          ||
|           d S d S )	Nr,   r   )r2   r5   r4   r   rK   g     j@r   r\   )r   r   r   r6   r7   r   r   r   r   r   rq   r;   rt   inverse_transformrr   r   r	   )r4   r2   expected_mixing_shaperw   r>   rx   r#   r?   r   r   X2r]   s               r   test_inverse_transformr   =  s     I
)

 2
3
3C9b/**11,??A
|#f
M
M
MC		 	"	" " " 	h(:;;;q!!" " " " " " " " " " " " " " " ; 55555			r	"	"B7bh qwqz!!  	 6"::??$$s*DDD2D)))))) "!s   10B--B14B1c                     d} d}t           j                            d          }|                    || f          }|                    | dz   | dz             }t          j        t          d          5  t          |ddi           d d d            n# 1 swxY w Y   t          j        t          d	          5  t          ||
           d d d            d S # 1 swxY w Y   d S )NrP   r   r   rK   zalpha must be in \[1,2\]r   alpha)fun_argsz0w_init has invalid shape.+should be \(3L?, 3L?\))w_init)	r   r   r   r6   r   rc   rn   ro   r   )
n_featuresrx   r#   r?   r   s        r   test_fastica_errorsr   i  sl   JI
)


"
"C9j122AYYzA~zA~66F	z)D	E	E	E * *WaL))))* * * * * * * * * * * * * * *	P
 
 
 " " 	&!!!!" " " " " " " " " " " " " " " " " "s$   2BBB8CCCc                  .   t           j                            d          } |                     d          }|j        d         }t          |dd          }|                    |          }t          j        |          t          j	        d          k    sJ dS )zTTest unit variance of transformed data using FastICA algorithm.

    Bug #13056
    r   r+   rK   r0   r[   g      ?N)
r   r   r   r6   rt   r   rq   varrc   approx)r#   r?   r2   r   r   s        r   !test_fastica_whiten_unit_variancer   w  s    
 )


"
"C)$$A71:L
|ORS
T
T
TC			1		B6"::s++++++++r   r4   rW   return_X_meanreturn_n_iterc                     d}d}t           j                            d          }|                    ||f          }d|z   |z   }t	          || ||          }t          |          |k    sJ | s
|d         J d S d S )NrP   r   r   )r4   r   r   )r   r   r   r6   r   len)	r4   r   r   r   rx   r#   r?   expected_lenouts	            r   test_fastica_output_shaper     s     JI
)


"
"C9j122A}$}4L
	&]  C s88|#### 1v~~~ ~r   c                    t           j                            |          }d}dt          j        t          j        dd|                    z  dk    dz
  }t
          j                            d||          }t           j        ||f         j	        }t          |           |\  }}|                                dz  t           j        z  }t          j        t          j        |          t          j        |          gt          j        |          t          j        |           gg          }t          j        ||          }	| r|	d|                    dd          z  z  }	t          |	           i }
dD ]R}t#          dd	|
          }|                    |	j	                  }||
|<   |j        j        dk    sJ |j        dk    sJ St+          |
d         |
d         d           dS )z2Test FastICA is consistent between whiten_solvers.r/   r   r   r,   rK   rL   rN   )r   eighr0   r5   r4   whiten_solverr^   r_   r   r   g-q=r\   N)r   r   r   re   rf   r   rg   rh   ri   r"   r   randr   rj   rk   r!   r   r   rq   r9   rt   r	   )rF   rw   r#   rx   ry   rz   r{   r|   r}   r~   outssolverr   r   s                 r   %test_fastica_simple_different_solversr     s    )

 2
3
3CI
bfR[C3344
4q
8A	=B	QYS	9	9B
b"fAAFB ((**q.25
 CXsRVC[[1BF3KK"&++3NOPPF
vqA &	S399Q%%%%AD! * *1_FSSS##AC((V$....}	))))) DL$u+E::::::r   c                    t           j                            |           }|                    dd          }||j        z  }t          ddd          }d}t          j        t          |          5  t          t          	          5  |                    |           d
d
d
           n# 1 swxY w Y   d
d
d
           d
S # 1 swxY w Y   d
S )z:Test FastICA eigh solver raises warning for low-rank data.r   r   r   r0   r   r   z$There are some small singular valuesr   )categoryN)r   r   r   r   r"   r   rc   r   r   r
   r   r8   )rw   r#   Ar?   r   msgs         r   "test_fastica_eigh_low_rank_warningr     s@   
)

 2
3
3C		"aA	ACA
q
O
O
OC
0C	k	-	-	-  &8999 	 	 GGAJJJ		 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s6   /B?B'B?'B+	+B?.B+	/B??CC)r   )&__doc__rl   ra   r   numpyr   rc   scipyr   sklearn.decompositionr   r   r   sklearn.decomposition._fasticar   sklearn.exceptionsr   sklearn.utils._testingr	   r
   r   r)   rA   rE   markparametrizer   r   r   r   r   filterwarningsr   r   r   r   r   r    r   r   <module>r      s        				             7 7 7 7 7 7 7 7 7 7 < < < < < < 1 1 1 1 1 1 C C C C C C C C    * * *	1 	1 	1$ $ $ tUm44h h 54hV# # #  < tUm44*C *C 54*CZ/, /, /,d MNN1  
 
* *
 
 ON*@" " ", , , #Q#Q#QRR4-884-88  98 98 SR" tUm44; ; 54;D    r   