
    -i,>                        S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r
JrJr  SSKJr  SSKJr  SSKJrJr  S!S jrS	 rS
 rS r\R0                  R3                  SSS/5      S 5       rS rS r\R0                  R3                  SSS/5      S 5       rS r\R0                  R?                  S5      \R0                  R3                  S/ SQ5      S 5       5       r S r!S r"\R0                  R3                  S/ SQ5      \R0                  R3                  SSS/5      \R0                  R3                  SSS/5      S 5       5       5       r#\R0                  R3                  SSS/5      S 5       r$S  r%g)"z
Test the fastica algorithm.
    N)stats)PCAFastICAfastica)_gs_decorrelation)ConvergenceWarning)assert_allcloseignore_warningsc                 t    [         R                  " X5      n X R                  SS9-  n X R                  SS9-  n g)zCenters 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     [/var/www/html/venv/lib/python3.13/site-packages/sklearn/decomposition/tests/test_fastica.pycenter_and_normr      s6     	AAQAAA    c                    [         R                  R                  U 5      n[         R                  R	                  UR                  SS5      5      u  n  nUR                  S5      n[        XBS5        US-  R                  5       S:  d   eUR                  S5      n[        XBS5      n[         R                  " XRR                  5      nUS S S-  R                  5       S:  d   eg )N
      g|=   )
r   randomRandomStatelinalgsvdrandnr   sumdotT)global_random_seedrngW_wutmps          r   test_gsr)   #   s     ))

 2
3CiimmCIIb"-.GAq!		"AaBqD::<'!!!		"A!"A
&&CC.CGqL')))r   c                    [         R                  R                  S5      nUR                  S5      R	                  U SS9n[        SSSSS9R                  U5      nUR                  R                  U :X  d   eUR                  R                  U :X  d   eUR                  R                  U :X  d   eUR                  R                  U :X  d   eg )	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+EAoA	c!f 	 !!\111<<---::|+++??  L000r   c                 
   [         R                  R                  S5      nUR                  S5      R	                  U SS9n[        USSUS9u  p4nUR                  U :X  d   eUR                  U :X  d   eUR                  U :X  d   eg )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+EA	DsOB 88|###==L(((88|###r   	add_noiseTFc           	         US:X  aK  U[         R                  :X  a7  U (       d0  [        R                  " S5      S:X  a  [        R
                  " S5        [         R                  R                  U5      nSnS[         R                  " [         R                  " SSU5      5      -  S:  S	-
  n[        R                  R                  S	XAS
9n[         R                  XV4   R                  n[        U5        UR!                  U5      nUu  pVSn[         R"                  " [         R$                  " U5      [         R                  " U5      /[         R                  " U5      [         R$                  " U5      * //5      n	U	R!                  U5      n	[         R&                  " X5      n
U (       a  U
SUR)                  SS5      -  -  n
[        U
5        S nSS/nSSSU/n/ SQn[*        R,                  " XU5       GH  u  nnnU(       ab  [/        U
R                  UUXS9u  nnn[        R0                  " [2        5         [/        U
R                  [         R4                  UUS9  S S S 5        Os[7        SSUS9nUR9                  U
R                  5      n[/        UUUSUS9u  nnn[        R0                  " [2        5         [/        U[         R4                  US9  S S S 5        UR                  nU(       aM  U[         R                  :X  a  SOSn[;        [         R&                  " [         R&                  " UU5      U
5      UUS9  [        U5        Uu  nn[=        [         R&                  " UU5      5      [=        [         R&                  " UU5      5      :  a  Uu  nnU[         R>                  " [         R&                  " UU5      5      -  nU[         R>                  " [         R&                  " UU5      5      -  nU (       dI  [;        [         R&                  " UU5      U-  S	SS9  [;        [         R&                  " UU5      U-  S	SS9  GMG  [;        [         R&                  " UU5      U-  S	SS9  [;        [         R&                  " UU5      U-  S	SS9  GM     [/        U
R                  WWUS9u    nn[A        UXS9nUR9                  U
R                  5      nURB                  RD                  S:X  d   eURD                  S :X  d   e[;        UU5        [         RF                  " [         R<                  " U5      5      U[         R                  :X  a  SOS!-  n[;        UURI                  U
R                  5      US9  URJ                  RD                  S:X  d   e[A        [         R4                  US9n[        R0                  " [2        5         URM                  U
R                  5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       GN"= f! , (       d  f       g = f)"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                 6    U S-  SU S-  -  R                  SS94$ )N   r   r   )r   )r   s    r   g_test#test_fastica_simple.<locals>.g_testm   s$    !ta!Q$h__"_---r   parallel	deflationlogcoshexpcubearbitrary-variancer0   F)funr4   	algorithmr5   )r[   r4   r\   Tr2   r4   r5   F)r[   r\   r4   r5   )r[   r\   gh㈵>atolg{Gz?)r[   r\   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   r"   r>   r#   	n_sampless1s2sphimixingmrR   algosnls	whiteningalgonlr4   rC   r;   rD   pcar?   r_   s1_s2_r%   sources_funicasourcess                                 r   test_fastica_simpler   H   s    	b BJJ&IIi H,`	
 ))

 2
3CI
bffR[[C34
4q
8A	=B	QY	HB
bfAA	AFB CXXsRVVC[1BFF3K"&&+3NOPF]]<(F
vA	S399Q%%%A. %EeVV
,C>I%--e)Db&%FdOB z*4H +* 1TDC!!!##&A%rT%cOB z*rww$7 +TT (2::541DBFF266'2#6:BTJS rvvc2#bffS"o"66HCrwwrvvc2''rwwrvvc2'' BFF3Oi7FBFF3Oi7FBFF3Oi7FBFF3Oi7FS EX  	t2DAq+ bD
JC$G??  F***==I%%%K) 66"&&/"lbjj.HddSDGS]]133/d;;;&&&
bgg
.C	z	" 
#	"q +* +*` 
#	"s$   /%W.W#,W5
W 	#
W2	5
Xc                      SS/SS//n [        SSSS9nSn[        R                  " [        US9   UR	                  U 5        S S S 5        [        US5      (       d   eg ! , (       d  f       N"= f)Nr   rK   Fr]   z(Ignoring n_components with whiten=False.matchr;   )r   re   warnsUserWarningr8   hasattr)r   r   warn_msgs      r   test_fastica_nowhitenr      sc    
Q!QA qQ
?C9H	k	2
 
33	"""" 
3	2s   A
A+c           	      t   [         R                  R                  U 5      nSn[         R                  " SSU5      n[         R                  " U5      n[         R
                  " [         R                  " [         R                  U-  5      5      n[         R                  XE4   R                  n[        U5        UR                  SS5      n[         R                  " Xv5      nSn	[        R                  " [        U	S9   [        SSUSS	S
9n
U
R!                  UR                  5        S S S 5        g ! , (       d  f       g = f)Nr/   r   r,      r   z\FastICA did not converge. Consider increasing tolerance or the maximum number of iterations.r   rT           )r\   r2   r5   r3   tol)r   r   r   rh   rg   ceilpirk   r!   r   r   r    re   r   r   r   r8   )r"   r#   ry   ri   rz   r{   r|   r~   r   r   r   s              r   test_fastica_convergence_failr      s     ))

 2
3CI
AsI&A	B		"	#B
bfAA YYq!_F
vA	/  
(	9 qsQTW
 		 
:	9	9s   7)D))
D7c           	         [         R                  R                  U 5      nSn[         R                  " SSU5      n[         R                  " U5      n[         R
                  " [         R                  " [         R                  U-  5      5      n[         R                  XV4   R                  n[        U5        Uu  pVUR                  SS5      n[         R                  " X5      n	U(       a  U	SUR                  SU5      -  -  n	[        U	5        [        U	R                  SSUS9u  pnUR                  n[        U[         R                  " [         R                  " X5      U	5      5        [        U5        Uu  p[        [         R                  " X5      5      [        [         R                  " X5      5      :  a  Uu  pU[         R                  " [         R                  " X5      5      -  nU[         R                  " [         R                  " X5      5      -  nU(       dE  [        [         R                  " X5      U-  S	S
S9  [        [         R                  " X5      U-  S	S
S9  g g )Nr/   r   r,   r   r   rN   r0   r]   rK   gMbP?r^   )r   r   r   rh   rg   r   r   rk   r!   r   r   r    r   r	   rt   ru   )r"   rF   r#   ry   ri   rz   r{   r|   r~   r   rC   r;   rD   r   r   s                  r   test_non_square_fasticar      s    ))

 2
3CI
AsI&A	B		"	#B
bfAAFB YYq!_F
vA	S399Q	***A	!O#OB 
B Brvvg2A67BHC 266#?c"&&/22277266#?##C277266#?##C s)3QTBs)3QTB r   c                 ,   [         R                  R                  U 5      nUR                  S5      R	                  U5      nSnSS/SS/4 GH  u  pVUb  UOUR
                  S   n[        XdUSS	9n[        R                  " 5          [        R                  " S
[        5        [        R                  " S[        5        UR                  U5      n	SSS5        UR                  R
                  US4:X  d   eW	R
                  UR
                  S   U4:X  d   e[        XdUSS	9n
[        R                  " 5          [        R                  " S
[        5        [        R                  " S[        5        U
R                  U5        SSS5        U
R                  R
                  US4:X  d   eU
R                  U5      nU(       a(  [         R                   " U5      R#                  5       S-  nOSn[%        XUS9  GM     g! , (       d  f       GN.= f! , (       d  f       N= f)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   rv   r   warningscatch_warningssimplefilterRuntimeWarningr   rs   r9   r8   rx   rt   r   r	   )r"   r>   r#   r?   r3   r4   r2   n_components_r   Xtica2Xt2r_   s                r   test_fit_transformr     s    ))

 2
3C)$++L9AH"11!5t} E(4(@aggaj%VW
 $$& !!'>: !!(,>?""1%B ' $$(;;;;xxAGGAJ6666%VW
 $$& !!'>:!!(,>?HHQK ' %%-)<<<<nnQ 66#;##%+DDd+G !F '& '&s   AG33AH3
H	
H	z/ignore:Ignoring n_components with whiten=False.z+whiten, n_components, expected_mixing_shape))rZ   r   r   r   )rZ   r   r   r   )r0   r   r   )r0   r   r   )Fr   r   )Fr   r   c                    Sn[         R                  R                  U5      nUR                  US45      R	                  U5      n[        XU S9n[        R                  " 5          [        R                  " S[        5        UR                  U5      n	S S S 5        UR                  R                  U:X  d   eUR                  W	5      n
UR                  U
R                  :X  d   eXR                  S   :X  a<  U(       a(  [         R                  " U
5      R                  5       S-  nOSn[!        XzUS9  g g ! , (       d  f       N= f)	Nr,   r   )r2   r5   r4   r   rK   g     j@r   r^   )r   r   r   r6   r7   r   r   r   r   r   rs   r;   rv   inverse_transformrt   r   r	   )r4   r2   expected_mixing_shaper"   r>   ry   r#   r?   r   r   X2r_   s               r   test_inverse_transformr   =  s     I
))

 2
3C9b/*11,?A
|f
MC		 	 	" 	h(:;q! 
# ;; 5555			r	"B77bhh wwqz!  66":??$s*DDD) " 
#	"s   #-D00
D>c                     Sn Sn[         R                  R                  S5      nUR                  X45      nUR	                  U S-   U S-   5      n[
        R                  " [        SS9   [        USS0S9  S S S 5        [
        R                  " [        S	S9   [        X4S
9  S S S 5        g ! , (       d  f       N:= f! , (       d  f       g = f)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   re   rp   rq   r   )
n_featuresry   r#   r?   r   s        r   test_fastica_errorsr   i  s    JI
))


"C912AYYzA~zA~6F	z)D	EWaL) 
F	M
 	!
 
 
F	E
 
s   'B(
B9(
B69
Cc                    [         R                  R                  U 5      nUR                  S5      nUR                  S   n[        USSS9nUR                  U5      n[         R                  " U5      [        R                  " S5      :X  d   eg)zLTest unit variance of transformed data using FastICA algorithm.

Bug #13056
r+   rK   r0   r   r]   g      ?N)
r   r   r   r6   rv   r   rs   varre   approx)r"   r#   r?   r2   r   r   s         r   !test_fastica_whiten_unit_variancer   w  st    
 ))

 2
3C)$A771:L
|ORS
TC			1	B66":s++++r   r4   rY   return_X_meanreturn_n_iterc                     SnSn[         R                  R                  S5      nUR                  XC45      nSU-   U-   n[	        X`X!S9n[        U5      U:X  d   eU (       d	  US   b   eg g )NrP   r   r   )r4   r   r   )r   r   r   r6   r   len)	r4   r   r   r   ry   r#   r?   expected_lenouts	            r   test_fastica_output_shaper     s}     JI
))


"C912A}$}4L
	C s8|###1v~~ r   c                    [         R                  R                  U5      nSnS[         R                  " [         R                  " SSU5      5      -  S:  S-
  n[
        R                  R                  SX2S9n[         R                  XE4   R                  n[        U5        Uu  pEUR                  5       S-  [         R                  -  n[         R                  " [         R                  " U5      [         R                  " U5      /[         R                  " U5      [         R                  " U5      * //5      n[         R                  " X5      n	U (       a  U	SUR!                  SS5      -  -  n	[        U	5        0 n
S H[  n[#        SS	US
9nUR%                  U	R                  5      nXU'   UR&                  R(                  S:X  d   eUR(                  S:X  a  M[   e   [+        U
S   U
S   SS9  g)z2Test FastICA is consistent between whiten_solvers.r/   r   r   r,   rK   rL   rN   )r   eighr0   r5   r4   whiten_solverr`   ra   r   r   g-q=r^   N)r   r   r   rg   rh   r   ri   rj   rk   r!   r   randr   rl   rm   r    r   r   rs   r9   rv   r	   )rF   r"   r#   ry   rz   r{   r|   r}   r~   r   outssolverr   r   s                 r   %test_fastica_simple_different_solversr     s    ))

 2
3CI
bffR[[C34
4q
8A	=B	QY	9B
bfAAFB ((*q.255
 CXXsRVVC[1BFF3K"&&+3NOPF
vA	S399Q%%%AD!1_FS##ACC(V$$...}}	))) " DL$u+E:r   c                 r   [         R                  R                  U 5      nUR                  SS5      nX"R                  -  n[        SSSS9nSn[        R                  " [        US9   [        [        S	9   UR                  U5        S
S
S
5        S
S
S
5        g
! , (       d  f       N= f! , (       d  f       g
= f)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   re   r   r   r
   r   r8   )r"   r#   Ar?   r   msgs         r   "test_fastica_eigh_low_rank_warningr     s    
))

 2
3C		"aA	CCA
q
OC
0C	k	-&89 GGAJ	 : 
.	-99 
.	-s$   &B(4BB(
B%	!B((
B6)rQ   )&__doc__rn   rc   r   numpyr   re   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 < 1 C *	1$ tUm4h 5hV#< tUm4*C 5*CZ/,d MN1
*
 O*@", #QR4-84-8 9 9 S" tUm4; 5;Dr   