
    {Kg2              
       *   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mZmZ d dlmZ d$dZd Zd	 Zed
        Zd Zd Zd Zd Zej4                  j7                  dd      d        Zd Zd Zej4                  j?                  de	eg      ej4                  j?                  dddg      d               Z ej4                  j?                  de	ef      ej4                  j?                  dd      ej4                  j?                  dejB                  ejB                  fejD                  ejD                  fejF                  ejD                  fejH                  ejD                  ff      d                      Z%ej4                  j?                  de	ef      ej4                  j?                  dd      d               Z&ej4                  j?                  de	eg      d        Z'd Z(d  Z)d! Z*d" Z+ej4                  j?                  de	eg      d#        Z,y)%    N)assert_array_equal)PCAMiniBatchSparsePCA	SparsePCA)check_random_state)assert_allcloseassert_array_almost_equal!if_safe_multiprocessing_with_blas)svd_flipc                 $   |d   |d   z  }t        |      }|j                  ||       }|j                  | |      }g d}g d}	t        |       D ]t  }
t        j                  |      }||
   d   |	|
   z
  ||
   d   |	|
   z   }}||
   d   |	|
   z
  ||
   d   |	|
   z   }}d||| d d ||f<   |j                         ||
d d f<   v t        j                  ||      }|d|j                  |j                  d   |j                  d         z  z  }|||fS )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                    o/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_sparse_pca.pygenerate_toy_datar,      s,   AA.J
\
*C		)\*A		,
+A&G	B< hhz"QZ]RU*GAJqMBqE,AdQZ]RU*GAJqMBqE,Ad'*Dq$t)|$))+!Q$ ! 	q!AsyyQWWQZ0	00Aa7N    c                     t         j                  j                  d      } | j                  dd      }t	        d|       }|j                  |      }|j                  j                  dk(  sJ |j                  dk(  sJ t	        d|       }|j                  |      }|j                  j                  d	k(  sJ |j                  d
k(  sJ y )Nr      
   r   r   r   r   r0   r/   r      r4   r0   r/   r4   )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                  ,   d} t         j                  j                  d      }t        ddd|      \  }}}t	        dd| d      }|j                  |       t	        dd	d| 
      }|j                  |       t        |j                  |j                         y )Nr   r   r   r0   r   r   r   larsr   methodalphar   cd)r   rC   r   rD   )r   r7   r8   r,   r   fitr	   r:   )rD   r   r*   _	spca_lars
spca_lassos         r+   test_fit_transformrJ   <   s    E
))


"C2vC@GAq!quSTUIMM! $QeTJNN1j44i6K6KLr-   c                     d} t         j                  j                  d      }t        ddd|      \  }}}t	        dd| d      }|j                  |       |j                  |      }t	        dd	d| d
      j                  |      }|j                  |      }t        j                  |j                  dk(        rJ t        ||       y )Nr   r   r   r0   r?   r@   rA   rB   r   )r   n_jobsrC   rD   r   )
r   r7   r8   r,   r   rF   	transformallr:   r	   )rD   r   r*   rG   rH   U1r<   U2s           r+   test_fit_transform_parallelrQ   I   s    E
))


"C2vC@GAq!quSTUIMM!			Q	Bqu1	c!f 	 
	Bvvi++q0111b"%r-   c                     t         j                  j                  d      } t        ddd|       \  }}}d|d d df<   t	        d      }t        j
                  t        j                  |j                  |                  rJ y )Nr   r   r0   r?   r@   r   r   )r   r7   r8   r,   r   anyisnanr9   )r   r*   rG   	estimators       r+   test_transform_nanrW   Z   sn     ))


"C2vC@GAq!AadGq)Ivvbhhy66q9:;;;;r-   c                     t         j                  j                  d      } t        ddd|       \  }}}t	        dd|       }|j                  |      }t	        dd|       }|j                  |      j                  |      }t        ||       y )	Nr   r   A   r?   r@   rA   )r   rC   r   rE   )	r   r7   r8   r,   r   r9   rF   rM   r	   )r   r*   rG   rH   rO   rI   rP   s          r+   test_fit_transform_tallrZ   d   s{    
))


"C2vC@GAq!qcJI		 	 	#B$SIJ			$	$Q	'Bb"%r-   c                     t         j                  j                  d      } | j                  dd      }| j                  dd      }t	        d||d|       }|j                  | j                  dd             |t         j                  j                  |dd      z  }t        |j                  d 	      d   j                  }t        |j                  |       y )
Nr      r      )r   U_initV_initmax_iterr   r   T)axiskeepdims)uv)r   r7   r8   r   r   rF   linalgnormr   Tr   r:   )r   r^   r_   modelexpected_componentss        r+   test_initializationrj   n   s    
))


"CYYq!_FYYq!_FvfqsE 
IIcii1o 299>>&q4>#PP"%8%:%:dCAFHHE%%':;r-   c                     t         j                  j                  d      } | j                  dd      }t	        dd|       }|j                  |      }|j                  j                  dk(  sJ |j                  dk(  sJ t	        d	d|       }|j                  |      }|j                  j                  d
k(  sJ |j                  dk(  sJ y )Nr   r/   r0   r   r   )r   r`   r   r2   r3   r4   r5   r6   )r   r7   r8   r   r   r9   r:   r   )r   r;   pcar    s       r+   test_mini_batch_correct_shapesrm   |   s    
))


"C		"bA
!ac
JC!A??  G+++77g
"qs
KC!A??  H,,,77hr-   Tz"skipping mini_batch_fit_transform.)reasonc                  .   d} t         j                  j                  d      }t        ddd|      \  }}}t	        dd|       j                  |      }|j                  |      }t        j                  dk(  rmdd l	}|j                  j                  }d |j                  _        	 t	        dd	| d
      }|j                  |      j                  |      }	||j                  _        n/t	        dd	| d
      }|j                  |      j                  |      }	t        j                  |j                  dk(        rJ t        ||	       t	        dd| d      j                  |      }
t        |
j                  |j                         y # ||j                  _        w xY w)Nr   r   r   r0   r?   r@   )r   r   rD   win32r   )r   rL   rD   r   rE   rB   )r   r7   r8   r,   r   rF   rM   sysplatformjoblibparallelmultiprocessingrN   r:   r	   )rD   r   r*   rG   rH   rO   rs   _mpr<   rP   rI   s              r+   test_mini_batch_fit_transformrw      sZ   E
))


"C2vC@GAq!"OSSTUVI			Q	B
||woo--*.'	2%qAD !&&q)B.1FOO+!q%VWXXXa[""1%vvi++q0111b"%#t5q	c!f  j44i6K6KL /2FOO+s   "/F Fc                      d} t         j                  j                  d      }t        ddd|      \  }}}t	        dd| |      }|j                  |      }|j                  |d d	       }t        |d   |d          y )
Nr   r   r     r?   r@   rA   rB   r0   )r   r7   r8   r,   r   r9   rM   r   )rD   r   r*   rG   rH   results_trainresults_tests          r+   test_scaling_fit_transformr|      s{    E
))


"C4cBGAq!quSVWI++A.M&&q"v.LM!$l1o6r-   c                     t         j                  j                  d      } t        ddd|       \  }}}t        ddd|       \  }}}t	        ddd      }t        d	      }|j                  |       |j                  |       |j                  |      }|j                  |      }t        t        j                  |j                  j                  |j                  j                              t        j                  d      d
       |t        j                  |dd d f         z  }|t        j                  |dd d f         z  }t        ||       y )Nr   r   ry   r?   r@   r0   r   )rD   ridge_alphar   rS   gh㈵>)atol)r   r7   r8   r,   r   r   rF   rM   r   absr:   r   rg   eyesign)r   r*   rG   Zr<   rl   results_test_pcaresults_test_spcas           r+   test_pca_vs_spcar      s   
))


"C4cBGAq!2vC@GAq!1!!<D
1
CGGAJHHQK}}Q'q)
t##COO$5$567  0A 677!21a4!899$&78r-   SPCAr   r   c                     t         j                  j                  d      }d\  }}|j                  ||      } | |      j	                  |      }||j
                  |k(  sJ y |j
                  |k(  sJ y )Nr   r/   r0   rS   )r   r7   r8   r   rF   n_components_)r   r   r   r   r   r;   rh   s          r+   test_spca_n_components_r      su     ))


"C"Iz		)Z(Al+//2E""l222""j000r-   rC   )rA   rE   zdata_type, expected_typec                    d\  }}}t         j                  j                  d      }|j                  ||      j	                  |      } | ||      }	|	j                  |      }
|
j                  |k(  sJ |	j                  j                  |k(  sJ y )Nr/   r0   r   r   )r   rC   )r   r7   r8   r   astyper9   dtyper:   )r   rC   	data_typeexpected_typer   r   r   r   input_arrayrh   transformeds              r+   test_sparse_pca_dtype_matchr      s     +4'Iz<
))


"C))Iz299)DKl6:E%%k2K---""m333r-   c                    d}d}d\  }}}t         j                  j                  d      }|j                  ||      } | |||d      }	|	j	                  |j                  t         j                              }
 | |||d      }|j	                  |j                  t         j                              }t        ||
|       t        |j                  |	j                  |       y )NMbP?r   r   r   )r   rD   rC   r   )rtol)
r   r7   r8   r   r9   r   float32float64r   r:   )r   rC   r   rD   r   r   r   r   r   model_32transformed_32model_64transformed_64s                r+   %test_sparse_pca_numerical_consistencyr      s     DE*3'Iz<
))


"C))Iz2K!vAH ++K,>,>rzz,JKN!vAH ++K,>,>rzz,JKNNN>H(((*>*>TJr-   c                 L   t         j                  j                  d      }d\  }}|j                  ||      } | d      j	                  |      }|j                         }| j                  j                         }t        t        d      D cg c]  }| | 
 c}|       yc c}w )z'Check feature names out for *SparsePCA.r   r   r]   rS   N)
r   r7   r8   r   rF   get_feature_names_out__name__lowerr   r   )	r   r   r   r   r;   rh   namesestimator_nameis	            r+   test_spca_feature_names_outr     s     ))


"C"Iz		)Z(Aa $$Q'E'')E]]((*NaA1>*1#.A5IAs   B!c                  
   t         j                  j                  d      } d\  }}| j                  ||      }d}t	        j
                  t        |      5  t        d      j                  |       ddd       y# 1 sw Y   yxY w)zECheck that we raise a warning for the deprecation of `max_iter=None`.r   r   z@`max_iter=None` is deprecated in version 1.4 and will be removed)matchN)r`   )	r   r7   r8   r   pytestwarnsFutureWarningr   rF   )r   r   r   r;   warn_msgs        r+   #test_spca_max_iter_None_deprecationr     sb    
))


"C"Iz		)Z(AQH	m8	4D)--a0 
5	4	4s   A99Bc                    t         j                  j                  |       }d\  }}|j                  ||      }t	        dd|       j                  |      }t	        dd|       j                  |      }|j                  |j                  k  sJ t	        ddd|       j                  |      }t	        ddd|       j                  |      }|j                  |j                  k  sJ y	)
z@Check that `tol` and `max_no_improvement` act as early stopping.)2   r0   d   g      ?)r`   tolr   r   gư>r   )r`   r   max_no_improvementr   N)r   r7   r8   r   r   rF   n_iter_)global_random_seedr   r   r   r;   model_early_stoppedmodel_not_early_stoppeds          r+   test_spca_early_stoppingr     s    
))

 2
3C"Iz		)Z(A -#,>	c!f  1$-?	c!f  &&)@)H)HHHH -$1CU	c!f  1$3EW	c!f  &&)@)H)HHHHr-   c                 "   t         j                  j                  |       }|j                  dd      }d}t	        |dd      j                  |      }t        |dddd      j                  |      }t        |j                  |j                         y	)
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   rA   )r   rC   r~   rD   r   N)	r   r7   r8   r   r   rF   r   r   r:   )r   r   r;   r   rl   r<   s         r+   $test_equivalence_components_pca_spcar   9  s     ))

 2
3C		"aAL
! 
c!f	 
 ! 
c!f 	 COOT%5%56r-   c                  D   t         j                  j                  d      } d\  }}| j                  ||      }d}t	        |ddd      }t        |d      }|j                  |      }|j                  |      }t        |j                  |      |j                  |             y)zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.r   r0   r\   r   -q=r   rD   r~   r   r1   N)	r   r7   r8   r   r   r   r9   r   inverse_transform)	r   r   r   r;   r   r<   rl   X_trans_spcaX_trans_pcas	            r+   !test_sparse_pca_inverse_transformr   S  s    
))


"C!Iz		)Z(AL!EPQD <a
8C%%a(L##A&K|,c.C.CK.Pr-   c                     t         j                  j                  d      }d\  }}|j                  ||      }|} | |ddd      }|j	                  |      }t        |j                  |      |       y)z^Check the `transform` and `inverse_transform` round trip with no loss of
    information.
    r   r   r   r   N)r   r7   r8   r   r9   r   r   )r   r   r   r   r;   r   r<   r   s           r+   +test_transform_inverse_transform_round_tripr   e  sr    
 ))


"C!Iz		)Z(AL!EPQD %%a(LD**<8!<r-   )N)-rq   numpyr   r   numpy.testingr   sklearn.decompositionr   r   r   sklearn.utilsr   sklearn.utils._testingr   r	   r
   sklearn.utils.extmathr   r,   r=   rJ   rQ   rW   rZ   rj   rm   markskipifrw   r|   r   parametrizer   r   r   int32int64r   r   r   r   r   r   r   r    r-   r+   <module>r      s<      , D D , 
 +4
M #& #& <&< D!EFM GM>79$ )-?!@A$3
1 4 B
1 )-?!@A>2	RZZ 	RZZ 	2::	2::		4 3 B	4 )-?!@A>2K 3 BK, )-?!@A
J B
J1I474$ )-?!@A= B=r-   