
     h:D                        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
 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
Zd Zd Zd Zej                            d          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 ej                            d          d             Z!d Z"ej                            d e             ed          g          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)assert_array_equal)assert_allclose)FastICAfasticaPCA)_gs_decorrelation)ConvergenceWarningc                     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     d/var/www/html/Sam_Eipo/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   2   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   zHignore:Starting in v1.3, whiten='unit-variance' will be used by default.	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        k    rd!nd}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_testr   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㈵>atol{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	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   J   sn    	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)))2:--441DGS]]13//d;;;;;&&&&
bg
.
.
.C	z	"	"                   s6   #II	I	6KK#	&K#	V;;V?V?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   rd   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   rg   rf   ceilpirj   r"   r   r   r!   rd   r   r
   r   r8   )
r#   rx   rh   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   rg   rf   r   r   rj   r"   r   r   r!   r   r   rs   rt   )rF   r#   rx   rh   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   ru   r   warningscatch_warningssimplefilterRuntimeWarningr
   rr   r9   r8   rv   rs   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
   rr   r;   ru   inverse_transformrs   r   r   )r4   r2   expected_mixing_shaperw   r>   rx   r#   r?   r   r   X2r]   s               r   test_inverse_transformr   A  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   rd   ro   rp   r   )
n_featuresrx   r#   r?   r   s        r   test_fastica_errorsr   n  sn    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   ru   r   rr   varrd   approx)r#   r?   r2   r   r   s        r   !test_fastica_whiten_unit_variancer     s    
 )


"
"C)$$A71:L
|ORS
T
T
TC			1		B6"::s++++++++r   r   )r4   c                    t           j                            d          }|                    d          }t	          j        t          d          5  |                     |           | j        dk    sJ 	 ddd           dS # 1 swxY w Y   dS )zSTest FastICA whiten default value deprecation.

    Regression test for #19490
    r   r+   zStarting in v1.3, whiten=r   rX   N)	r   r   r   r6   rd   r   FutureWarningr8   _whiten)r   r#   r?   s      r   -test_fastica_whiten_default_value_deprecationr     s     )


"
"C)$$A	m+G	H	H	H 3 3


{2222223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3s   #BBBc                     t           j                            d          } |                     d          }|j        d         }t          |d          }t          j        t                    5  |	                    |          }ddd           n# 1 swxY w Y   t          |dd          }t          j        t                    5  |	                    |          }ddd           n# 1 swxY w Y   t          |ddd	
          }t          j                    5  t          j        dt                     |	                    |          }ddd           n# 1 swxY w Y   |j        dk    sJ |j        dk    sJ |j        dk    sJ t          ||           t          ||           t          j        |          t          j        d          k    sJ dS )z_Test previous behavior for FastICA whitening (whiten=True)

    Regression test for #19490
    r   r+   rK   )r2   r5   NTr[   rX   r   )r2   r4   r5   whiten_solverr   r^   )r   r   r   r6   ru   r   rd   r   r   rr   r   r   r   r   r   r   r   )	r#   r?   r2   default_icaXt_on_defaultr   r   av_icaXt_avs	            r   +test_fastica_whiten_backwards_compatibilityr     s   
 )


"
"C)$$A71:L|!DDDK	m	$	$ 5 5#11!445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 |Dq
I
I
IC	m	$	$ " "q!!" " " " " " " " " " " " " " " !#	  F 
	 	"	" ( (g}555$$Q''( ( ( ( ( ( ( ( ( ( ( ( ( ( (
 "66666;.....>11111r=)))r5!!!6"::y11111111s6   ,BBBC&&C*-C*0EEE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   r   r_   r`   r   r   g-q=r\   N)r   r   r   rf   rg   r   rh   ri   rj   r"   r   randr   rk   rl   r!   r   r   rr   r9   ru   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  |	                    |           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   N)
r   r   r   r   r"   r   rd   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	-	-	-  


                 s   /BBB)r   )(__doc__rm   rd   r   rb   numpyr   scipyr   sklearn.utils._testingr   r   sklearn.decompositionr   r   r   sklearn.decomposition._fasticar	   sklearn.exceptionsr
   r   r)   rA   rE   markfilterwarningsparametrizer   r   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      sx          				           5 5 5 5 5 5 2 2 2 2 2 2 7 7 7 7 7 7 7 7 7 7 < < < < < < 1 1 1 1 1 1    * * *	1 	1 	1$ $ $ N  tUm44g g 54 gT# # #  < tUm44*C *C 54*CZ/, /, /,d MNN1  
 
* *
 
 ON*B N " " ", , , GG4,@,@,@ ABB	3 	3 CB	3$2 $2 $2N #Q#Q#QRR4-884-88  98 98 SR" tUm44; ; 54;D    r   