
    0PhJ1              
          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j                            dd          d             Zd Zd Zej                            de	eg          ej                            dddg          d                         Z ej                            de	ef          ej                            dd          ej                            dej!        ej!        fej"        ej"        fej#        ej"        fej$        ej"        ff          d                                     Z%ej                            de	ef          ej                            dd          d                         Z&ej                            de	eg          d             Z'd Z(d  Z)d! Z*ej                            de	eg          d"             Z+dS )$    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          |          }|                    ||           }|                    | |          }g d}g d}	t          |           D ]}
t          j        |          }||
         d         |	|
         z
  ||
         d         |	|
         z   }}||
         d         |	|
         z
  ||
         d         |	|
         z   }}d|||         d d ||f<   |                                ||
d d f<   t          j        ||          }|d|                    |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                    k/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/decomposition/tests/test_sparse_pca.pygenerate_toy_datar,      sU   AA.J
\
*
*C		)\**A		,
++A&&&G	B<    hz""QZ]RU*GAJqMBqE,AdQZ]RU*GAJqMBqE,Ad'*DIqqq$t)|$))++!QQQ$ 	q!AsyyQWQZ00	00Aa7N    c                     t           j                            d          } |                     dd          }t	          d|           }|                    |          }|j        j        dk    sJ |j        dk    sJ t	          d|           }|                    |          }|j        j        d	k    sJ |j        d
k    sJ d S )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!#666D1A!W,,,,7g"3777D1A!X----7hr-   c                  J   d} t           j                            d          }t          ddd|          \  }}}t	          dd| d          }|                    |           t	          dd	d| 
          }|                    |           t          |j        |j                   d S )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UUUIMM! $QeTTTJNN1j4i6KLLLLLr-   c                     d} t           j                            d          }t          ddd|          \  }}}t	          dd| d          }|                    |           |                    |          }t	          dd	d| d
                              |          }|                    |          }t          j        |j        dk              rJ t          ||           d S )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UUUIMM!			Q		Bqu1  	c!ff 	 
		Bvi+q011111b"%%%%%r-   c                     t           j                            d          } t          ddd|           \  }}}d|d d df<   t	          d          }t          j        t          j        |                    |                              rJ d S )Nr   r   r0   r?   r@   r   r   )r   r7   r8   r,   r   anyisnanr9   )r   r*   rG   	estimators       r+   test_transform_nanrW   Z   s     )


"
"C2vC@@@GAq!AaaadGq)))Ivbhy66q99::;;;;;;;r-   c                  T   t           j                            d          } t          ddd|           \  }}}t	          dd|           }|                    |          }t	          dd|           }|                    |                              |          }t          ||           d S )	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JJJI		 	 	#	#B$SIIIJ				$	$Q	'	'Bb"%%%%%r-   c                     t           j                            d          } |                     dd          }|                     dd          }t	          d||d|           }|                    |                     dd                     |t           j                            |dd          z  }t          |j	        d 	          d         j	        }t          |j        |           d S )
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1oo 29>>&q4>#P#PP"%8%:dCCCAFHE%':;;;;;r-   c                     t           j                            d          } |                     dd          }t	          dd|           }|                    |          }|j        j        dk    sJ |j        dk    sJ t	          d	d|           }|                    |          }|j        j        d
k    sJ |j        dk    sJ d S )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
J
J
JC!A? G++++7g
"qs
K
K
KC!A? H,,,,7hr-   Tz"skipping mini_batch_fit_transform.)reasonc                  J   d} t           j                            d          }t          ddd|          \  }}}t	          dd|                               |          }|                    |          }t          j        dk    rvdd l	}|j
        j        }d |j
        _        	 t	          dd	| d
          }|                    |                              |          }	||j
        _        nL# ||j
        _        w xY wt	          dd	| d
          }|                    |                              |          }	t          j        |j        dk              rJ t          ||	           t	          dd| d                              |          }
t          |
j        |j                   d S )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      s   E
)


"
"C2vC@@@GAq!"OOOSSTUVVI			Q		B
|wo-*.'	2%qA  D !&&q))B.1FO++cFO+1111!q%VWXXXXXa[[""1%%vi+q011111b"%%%#t5q  	c!ff  j4i6KLLLLLs    ;C( (C6c                  8   d} t           j                            d          }t          ddd|          \  }}}t	          dd| |          }|                    |          }|                    |d d	                   }t          |d         |d                    d S )
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BBBGAq!quSVWWWI++A..M&&q"v..LM!$l1o66666r-   c                     t           j                            d          } t          ddd|           \  }}}t          ddd|           \  }}}t	          ddd          }t          d	          }|                    |           |                    |           |                    |          }|                    |          }t          t          j	        |j
                            |j
        j                            t          j        d          d
           |t          j        |dd d f                   z  }|t          j        |dd d f                   z  }t          ||           d S )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BBBGAq!2vC@@@GAq!1!!<<<D
1


CGGAJJJHHQKKK}}Q''q))
t##CO$56677     0AAA 6777!21aaa4!8999$&788888r-   SPCAr   r   c                     t           j                            d          }d\  }}|                    ||          } | |                              |          }||j        |k    sJ d S |j        |k    sJ d S )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      s     )


"
"C"Iz		)Z((ADl+++//22E"l222222"j000000r-   rC   )rA   rE   zdata_type, expected_typec                 $   d\  }}}t           j                            d          }|                    ||                              |          } | ||          }	|	                    |          }
|
j        |k    sJ |	j        j        |k    sJ d S )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299)DDKDl6:::E%%k22K----"m333333r-   c                    d}d}d\  }}}t           j                            d          }|                    ||          } | |||d          }	|	                    |                    t           j                            }
 | |||d          }|                    |                    t           j                            }t          ||
|           t          |j	        |	j	        |           d S )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22Kt!vA  H ++K,>,>rz,J,JKKNt!vA  H ++K,>,>rz,J,JKKNNN>>>>H((*>TJJJJJJr-   c                 f   t           j                            d          }d\  }}|                    ||          } | d                              |          }|                                }| j                                        t          fdt          d          D             |           dS )z'Check feature names out for *SparsePCA.r   r   r]   rS   c                     g | ]} | 	S  r   ).0iestimator_names     r+   
<listcomp>z/test_spca_feature_names_out.<locals>.<listcomp>  s$    AAA1>.1..AAAr-   N)
r   r7   r8   r   rF   get_feature_names_out__name__lowerr   r   )r   r   r   r   r;   rh   namesr   s          @r+   test_spca_feature_names_outr     s     )


"
"C"Iz		)Z((ADa   $$Q''E''))E]((**NAAAAaAAA5IIIIIr-   c                    t           j                            |           }d\  }}|                    ||          }t	          dd|                               |          }t	          dd|                               |          }|j        |j        k     sJ t	          ddd|                               |          }t	          ddd|                               |          }|j        |j        k     sJ d	S )
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
3
3C"Iz		)Z((A -#,>  	c!ff  1$-?  	c!ff  &)@)HHHHH -$1CU  	c!ff  1$3EW  	c!ff  &)@)HHHHHHHr-   c                 @   t           j                            |           }|                    dd          }d}t	          |dd                              |          }t          |dddd                              |          }t          |j        |j                   d	S )
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   -  s     )

 2
3
3C		"aAL
!   
c!ff	 
 !   
c!ff 	 COT%566666r-   c                     t           j                            d          } d\  }}|                     ||          }d}t	          |ddd          }t          |d          }|                    |          }|                    |          }t          |                    |          |                    |                     dS )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   G  s    
)


"
"C!Iz		)Z((AL!EPQ  D <a
8
8
8C%%a((L##A&&K|,,c.C.CK.P.P    r-   c                    t           j                            d          }d\  }}|                    ||          }|} | |ddd          }|                    |          }t          |                    |          |           dS )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   Y  s    
 )


"
"C!Iz		)Z((AL4!EPQ  D %%a((LD**<88!<<<<<r-   )N),rq   numpyr   pytest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 D D D D D D D D , , , , , ,         
 + * * * * *   4  
M 
M 
M #& & #"& < < <& & &< < <   D!EFFM M GFM>7 7 79 9 9$ )-?!@AA$33
1 
1 43 BA
1 )-?!@AA>22	RZ 	RZ 	2:	2:	 	4 	4  32 BA	4 )-?!@AA>22K K 32 BAK, )-?!@AA
J 
J BA
JI I I47 7 74  $ )-?!@AA= = BA= = =r-   