
    -i-/              
          S SK rS SKrS SKJ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JrJr  S SKJr  S S jrS	 rS
 r\S 5       rS rS rS rS rS rS r\R:                  R=                  S\
\	/5      \R:                  R=                  SSS/5      S 5       5       r\R:                  R=                  S\
\	45      \R:                  R=                  SS5      \R:                  R=                  S\R@                  \R@                  4\RB                  \RB                  4\RD                  \RB                  4\RF                  \RB                  445      S 5       5       5       r$\R:                  R=                  S\
\	45      \R:                  R=                  SS5      S 5       5       r%\R:                  R=                  S\
\	/5      S 5       r&S r'S r(S r)\R:                  R=                  S\
\	/5      S 5       r*g)!    N)assert_array_equal)make_low_rank_matrix)PCAMiniBatchSparsePCA	SparsePCA)check_random_state)assert_allcloseassert_array_almost_equal!if_safe_multiprocessing_with_blas)svd_flipc                 
   US   US   -  n[        U5      nUR                  X5      nUR                  X5      n/ SQn/ SQn	[        U 5       Hi  n
[        R                  " U5      nX   S   X   -
  X   S   X   -   pX   S   X   -
  X   S   X   -   pSXU S S 2X24'   UR                  5       XzS S 24'   Mk     [        R                  " Xg5      nUSUR                  UR                  S   UR                  S   5      -  -  nUXg4$ )Nr      ))   r   )      )   r   )r      r   g      ?g?)r   randnrangenpzerosraveldotshape)n_components	n_samples
image_sizerandom_state
n_featuresrngUVcentersszkimgxminxmaxyminymaxYs                    ^/var/www/html/venv/lib/python3.13/site-packages/sklearn/decomposition/tests/test_sparse_pca.pygenerate_toy_datar-      s
   AA.J
\
*C		)*A		,+A&G	B< hhz"Z]RU*GJqMBE,AdZ]RU*GJqMBE,Ad'*q$)|$))+Q$ ! 	qAsyyQWWQZ0	00Aa7N    c                     [         R                  R                  S5      n U R                  SS5      n[	        SU S9nUR                  U5      nUR                  R                  S:X  d   eUR                  S:X  d   e[	        SU S9nUR                  U5      nUR                  R                  S	:X  d   eUR                  S
:X  d   eg )Nr      
   r   r   r   r   r1   r0   r      r5   r1   r0   r5   )r   randomRandomStater   r   fit_transformcomponents_r   )r    Xspcar!   s       r,   test_correct_shapesr>   .   s    
))


"C		"bA!#6D1A!!W,,,77g"37D1A!!X---77hr.   c                    Sn[         R                  R                  U 5      n[        SSSUS9u  n  n[	        SSXS9nUR                  U5        [	        SSXS	9nUR                  U5        [        UR                  UR                  5        g )
Nr   r   r1   r   r   r   larsr   methodalphar   cd)r   rD   r   rE   )r   r8   r9   r-   r   fitr
   r;   )global_random_seedrE   r    r+   _	spca_lars
spca_lassos          r,   test_fit_transformrL   <   s    E
))

 2
3C2vC@GAq!vUI MM! t2DJ NN1j44i6K6KLr.   c                    Sn[         R                  R                  U 5      n[        SSSUS9u  n  n[	        SSXS9nUR                  U5        UR                  U5      n[	        SSSUU S	9R                  U5      nUR                  U5      n[         R                  " UR                  S
:H  5      (       a   e[        Xh5        g )Nr   r   r1   r@   rA   rB   rC   r   )r   n_jobsrD   rE   r   r   )
r   r8   r9   r-   r   rG   	transformallr;   r
   )	rH   rE   r    r+   rI   rJ   U1r=   U2s	            r,   test_fit_transform_parallelrS   M   s    E
))

 2
3C2vC@GAq!vUI MM!			Q	B' 
c!f 	 
	Bvvi++q01111b%r.   c                    [         R                  R                  U 5      n[        SSSUS9u  n  nSUS S 2S4'   [	        SU S9n[         R
                  " [         R                  " UR                  U5      5      5      (       a   eg )Nr   r1   r@   rA   r   r   r2   )r   r8   r9   r-   r   anyisnanr:   )rH   r    r+   rI   	estimators        r,   test_transform_nanrX   d   su     ))

 2
3C2vC@GAq!AadGq7IJIvvbhhy66q9:;;;;;r.   c                    [         R                  R                  U 5      n[        SSSUS9u  n  n[	        SSUS9nUR                  U5      n[	        SSUS9nUR                  U5      R                  U5      n[        XW5        g )Nr   A   r@   rA   rB   r   rD   r   rF   )	r   r8   r9   r-   r   r:   rG   rO   r
   )rH   r    r+   rI   rJ   rQ   rK   rR   s           r,   test_fit_transform_tallr\   n   sz    
))

 2
3C2vC@GAq!qcJI		 	 	#B$SIJ			$	$Q	'Bb%r.   c                    [         R                  R                  U 5      nUR                  SS5      nUR                  SS5      n[	        SX#SUS9nUR                  UR                  SS5      5        U[         R                  R                  USSS9-  n[        UR                  S S	9S   R                  n[        UR                  U5        g )
N   r      r   )r   U_initV_initmax_iterr   r   T)axiskeepdims)uv)r   r8   r9   r   r   rG   linalgnormr   Tr	   r;   )rH   r    r`   ra   modelexpected_componentss         r,   test_initializationrl   x   s    
))

 2
3CYYq!_FYYq!_FvqsE 
IIcii1o 299>>&q4>#PP"%8%:%:dCAFHHE%%':;r.   c                     [         R                  R                  S5      n U R                  SS5      n[	        SSU S9nUR                  U5      nUR                  R                  S:X  d   eUR                  S:X  d   e[	        S	SU S9nUR                  U5      nUR                  R                  S
:X  d   eUR                  S:X  d   eg )Nr   r0   r1   r   r   )r   rb   r   r3   r4   r5   r6   r7   )r   r8   r9   r   r   r:   r;   r   )r    r<   pcar!   s       r,   test_mini_batch_correct_shapesro      s    
))


"C		"bA
!ac
JC!A??  G+++77g
"qs
KC!A??  H,,,77hr.   c                     Sn[         R                  R                  U 5      n[        SSSUS9u  n  n[	        SSXS9nUR                  U5      nUR                  US S 5      n[        US	   US	   5        g )
Nr   r     r@   rA   rB   rC   r1   r   )r   r8   r9   r-   r   r:   rO   r	   )rH   rE   r    r+   rI   rJ   results_trainresults_tests           r,   test_scaling_fit_transformrt      sy    E
))

 2
3C4cBGAq!quWI++A.M&&q"v.LM!$l1o6r.   c                    [         R                  R                  U 5      n[        SSSUS9u  n  n[        SSSUS9u  n  n[	        SSSUS9n[        SUS	9nUR                  U5        UR                  U5        UR                  U5      nUR                  U5      n[        [         R                  " UR                  R                  UR                  R                  5      5      [         R                  " S5      S
S9  U[         R                  " USS S 24   5      -  nU[         R                  " USS S 24   5      -  n[        XxS
S9  g )Nr   rq   r@   rA   r1   r   r   )rE   ridge_alphar   r   r2   g-C6?)atol)r   r8   r9   r-   r   r   rG   rO   r	   absr;   r   ri   eyesign)	rH   r    r+   rI   Zr=   rn   results_test_pcaresults_test_spcas	            r,   test_pca_vs_spcar~      s   
))

 2
3C4cBGAq!2vC@GAq!1!!#ND
13
/CGGAJHHQK}}Q'q)
t##COO$5$567  0A 677!21a4!899$dCr.   SPCAr   r   c                     [         R                  R                  S5      nSu  p4UR                  X45      nU " US9R	                  U5      nUb  UR
                  U:X  d   eg UR
                  U:X  d   eg )Nr   r0   r1   r   )r   r8   r9   r   rG   n_components_)r   r   r    r   r   r<   rj   s          r,   test_spca_n_components_r      sq     ))


"C"I		)(Al+//2E""l222""j000r.   rD   )rB   rF   zdata_type, expected_typec                    Su  pEn[         R                  R                  S5      nUR                  XE5      R	                  U5      nU " XaS9n	U	R                  U5      n
U
R                  U:X  d   eU	R                  R                  U:X  d   eg )N)r0   r1   r   r   )r   rD   )r   r8   r9   r   astyper:   dtyper;   )r   rD   	data_typeexpected_typer   r   r   r    input_arrayrj   transformeds              r,   test_sparse_pca_dtype_matchr      s     +4'I<
))


"C))I299)DKl:E%%k2K---""m333r.   c                 T   Su  p4n[        UUUUS9nU " UUUS9nUR                  UR                  [        R                  5      5      nU " UUUS9n	U	R                  UR                  [        R
                  5      5      n
[        X5        [        U	R                  UR                  5        g )N)   r   r^   )r   r   effective_rankr   r[   )r   r:   r   r   float32float64r	   r;   )r   rD   rH   r   r   r   r   model_32transformed_32model_64transformed_64s              r,   %test_sparse_pca_numerical_consistencyr      s     +4'I<&#'	K !'H
 ++K,>,>rzz,JKN!'H
 ++K,>,>rzz,JKNN3H(((*>*>?r.   c                 F   [         R                  R                  S5      nSu  p#UR                  X#5      nU " SS9R	                  U5      nUR                  5       nU R                  R                  5       n[        [        S5       Vs/ s H  o U 3PM
     snU5        gs  snf )z'Check feature names out for *SparsePCA.r   r   r_   r   N)
r   r8   r9   r   rG   get_feature_names_out__name__lowerr   r   )	r   r    r   r   r<   rj   namesestimator_nameis	            r,   test_spca_feature_names_outr      s     ))


"C"I		)(Aa $$Q'E'')E]]((*NaA1*1#.A5IAs   Bc                    [         R                  R                  U 5      nSu  p#UR                  X#5      n[	        SSU S9R                  U5      n[	        SSU S9R                  U5      nUR                  UR                  :  d   e[	        SSSU S9R                  U5      n[	        SSSU S9R                  U5      nUR                  UR                  :  d   eg	)
z@Check that `tol` and `max_no_improvement` act as early stopping.)2   r1   d   g      ?)rb   tolr   gMbP?gư>r   )rb   r   max_no_improvementr   N)r   r8   r9   r   r   rG   n_iter_)rH   r    r   r   r<   model_early_stoppedmodel_not_early_stoppeds          r,   test_spca_early_stoppingr     s    
))

 2
3C"I		)(A -#,>	c!f  1$-?	c!f  &&)@)H)HHHH -$1CU	c!f  1$3EW	c!f  &&)@)H)HHHHr.   c                    [         R                  R                  U 5      nUR                  SS5      nSn[	        USSS9R                  U5      n[        USSSSS9R                  U5      n[        UR                  UR                  5        g	)
zCheck the equivalence of the components found by PCA and SparsePCA.

Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/23932
r   r_   r   
randomizedr   )r   
svd_solverr   rB   )r   rD   rv   rE   r   N)	r   r8   r9   r   r   rG   r   r	   r;   )rH   r    r<   r   rn   r=   s         r,   $test_equivalence_components_pca_spcar     s     ))

 2
3C		"aAL
! 
c!f	 
 ! 
c!f 	 COOT%5%56r.   c                 2   [         R                  R                  U 5      nSu  p#UR                  X#5      nSn[	        USSU S9n[        XPS9nUR                  U5      nUR                  U5      n	[        UR                  U5      UR                  U	5      5        g)zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.r1   r^   r   -q=r   rE   rv   r   r2   N)	r   r8   r9   r   r   r   r:   r	   inverse_transform)
rH   r    r   r   r<   r   r=   rn   X_trans_spcaX_trans_pcas
             r,   !test_sparse_pca_inverse_transformr   5  s    
))

 2
3C!I		)(AL!'	D <
IC%%a(L##A&K|,c.C.CK.Pr.   c                     [         R                  R                  U5      nSu  p4UR                  X45      nUnU " USSUS9nUR	                  U5      n[        UR                  U5      U5        g)zVCheck the `transform` and `inverse_transform` round trip with no loss of
information.
r   r   r   N)r   r8   r9   r   r:   r	   r   )	r   rH   r    r   r   r<   r   r=   r   s	            r,   +test_transform_inverse_transform_round_tripr   J  sq    
 ))

 2
3C!I		)(AL!'	D %%a(LD**<8!<r.   )N)+numpyr   pytestnumpy.testingr   sklearn.datasetsr   sklearn.decompositionr   r   r   sklearn.utilsr   sklearn.utils._testingr	   r
   r   sklearn.utils.extmathr   r-   r>   rL   rS   rX   r\   rl   ro   rt   r~   markparametrizer   r   r   int32int64r   r   r   r   r   r   r    r.   r,   <module>r      s  
   , 1 D D , 
 +4M" #& #&,<&<7D$ )-?!@A$3
1 4 B
1 )-?!@A>2	RZZ 	RZZ 	2::	2::		4 3 B	4 )-?!@A>2@ 3 B@6 )-?!@A
J B
JI474* )-?!@A= B=r.   