
    *YHh-/              
          d dl Zd dl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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d Zd Zej:                  j=                  de
e	g      ej:                  j=                  dddg      d               Zej:                  j=                  de
e	f      ej:                  j=                  dd      ej:                  j=                  dej@                  ej@                  fejB                  ejB                  fejD                  ejB                  fejF                  ejB                  ff      d                      Z$ej:                  j=                  de
e	f      ej:                  j=                  dd      d               Z%ej:                  j=                  de
e	g      d        Z&d Z'd Z(d Z)ej:                  j=                  de
e	g      d        Z*y)!    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                 $   |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                    d/var/www/html/planif/env/lib/python3.12/site-packages/sklearn/decomposition/tests/test_sparse_pca.pygenerate_toy_datar-      s1   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   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                 ,   d}t         j                  j                  |       }t        ddd|      \  }}}t	        dd||       }|j                  |       t	        dd| |	      }|j                  |       t        |j                  |j                         y )
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!vUASI MM! t2DEJ NN1j44i6K6KLr.   c                    d}t         j                  j                  |       }t        ddd|      \  }}}t	        dd||       }|j                  |       |j                  |      }t	        ddd|| 	      j                  |      }|j                  |      }t        j                  |j                  d
k(        rJ t        ||       y )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!vUASI MM!			Q	B' 
c!f 	 
	Bvvi++q0111b"%r.   c                    t         j                  j                  |       }t        ddd|      \  }}}d|d d df<   t	        d|       }t        j
                  t        j                  |j                  |                  rJ y )Nr   r1   r@   rA   r   r   r2   )r   r8   r9   r-   r   anyisnanr:   )rH   r    r+   rI   	estimators        r,   test_transform_nanrX   d   sr     ))

 2
3C2vC@GAq!AadGq7IJIvvbhhy66q9:;;;;r.   c                    t         j                  j                  |       }t        ddd|      \  }}}t	        dd|      }|j                  |      }t	        dd|      }|j                  |      j                  |      }t        ||       y )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   s|    
))

 2
3C2vC@GAq!qcJI		 	 	#B$SIJ			$	$Q	'Bb"%r.   c                    t         j                  j                  |       }|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 )
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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   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                     d}t         j                  j                  |       }t        ddd|      \  }}}t	        dd||      }|j                  |      }|j                  |d d       }t        |d	   |d	          y )
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      s|    E
))

 2
3C4cBGAq!quSVWI++A.M&&q"v.LM!$l1o6r.   c                    t         j                  j                  |       }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        ||d
       y )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$&7dCr.   SPCAr   r   c                     t         j                  j                  d      }d\  }}|j                  ||      } | |      j	                  |      }||j
                  |k(  sJ y |j
                  |k(  sJ y )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      su     ))


"C"Iz		)Z(Al+//2E""l222""j000r.   rD   )rB   rF   zdata_type, expected_typec                    d\  }}}t         j                  j                  d      }|j                  ||      j	                  |      } | ||      }	|	j                  |      }
|
j                  |k(  sJ |	j                  j                  |k(  sJ y )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'Iz<
))


"C))Iz299)DKl6:E%%k2K---""m333r.   c                 j   d\  }}}t        ||||      } | |||      }|j                  |j                  t        j                              } | |||      }	|	j                  |j                  t        j
                              }
t        |
|       t        |	j                  |j                         y )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'Iz<&#'	K !'H
 ++K,>,>rzz,JKN!'H
 ++K,>,>rzz,JKNNN3H(((*>*>?r.   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_   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"Iz		)Z(Aa $$Q'E'')E]]((*NaA1>*1#.A5IAs   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   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"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   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                 D   t         j                  j                  |       }d\  }}|j                  ||      }d}t	        |dd|       }t        ||       }|j                  |      }|j                  |      }	t        |j                  |      |j                  |	             y)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!Iz		)Z(AL!'	D <6H
IC%%a(L##A&K|,c.C.CK.Pr.   c                     t         j                  j                  |      }d\  }}|j                  ||      }|} | |dd|      }|j	                  |      }t        |j                  |      |       y)z^Check 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  su    
 ))

 2
3C!Iz		)Z(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.   