
    Pi/              
          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j        j        ed                         Zd Zd Zd Z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)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          |          }|                    ||           }|                    | |          }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                    /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/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   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!#666D1A!W,,,,7g"3777D1A!X----7hr.   c                 P   d}t           j                            |           }t          ddd|          \  }}}t	          dd||           }|                    |           t	          dd| |	          }|                    |           t          |j        |j        d
d           d S )Nr   r   r1   r   r   r   larsr   methodalphar   cd)r   rD   r   rE   gMb@?g-C6*?rtolatol)r   r8   r9   r-   r   fitr	   r;   )global_random_seedrE   r    r+   _	spca_lars
spca_lassos          r,   test_fit_transformrO   <   s    E
)

 2
3
3C2vC@@@GAq!vUAS  I MM! t2DE  J NN1J*I,ASWXXXXXXr.   c                    d}t           j                            |           }t          ddd|          \  }}}t	          dd||           }|                    |           |                    |          }t	          ddd|| 	                              |          }|                    |          }t          j        |j        d
k              rJ t          ||           d S )Nr   r   r1   r@   rA   rB   rC   r   )r   n_jobsrD   rE   r   r   )
r   r8   r9   r-   r   rJ   	transformallr;   r
   )	rK   rE   r    r+   rL   rM   U1r=   U2s	            r,   test_fit_transform_parallelrV   O   s     E
)

 2
3
3C2vC@@@GAq!vUAS  I MM!			Q		B'   
c!ff 	 
		Bvi+q011111b"%%%%%r.   c                    t           j                            |           }t          ddd|          \  }}}d|d d df<   t	          d|           }t          j        t          j        |                    |                              rJ d S )Nr   r1   r@   rA   r   r   r2   )r   r8   r9   r-   r   anyisnanr:   )rK   r    r+   rL   	estimators        r,   test_transform_nanr[   g   s     )

 2
3
3C2vC@@@GAq!AaaadGq7IJJJIvbhy66q99::;;;;;;;r.   c                 Z   t           j                            |           }t          ddd|          \  }}}t	          dd|          }|                    |          }t	          dd|          }|                    |                              |          }t          ||dd	
           d S )Nr   A   r@   rA   rB   r   rD   r   rF   -C6?gh㈵>rG   )	r   r8   r9   r-   r   r:   rJ   rR   r	   )rK   r    r+   rL   rM   rT   rN   rU   s           r,   test_fit_transform_tallr`   q   s    
)

 2
3
3C2vC@@@GAq!qcJJJI		 	 	#	#B$SIIIJ				$	$Q	'	'BBD111111r.   c                    t           j                            |           }|                    dd          }|                    dd          }t	          d||d|          }|                    |                    dd                     |t           j                            |dd          z  }t          |j	        d 	          d         j	        }t          |j        |           d S )
N   r      r   )r   U_initV_initmax_iterr   r   T)axiskeepdims)uv)r   r8   r9   r   r   rJ   linalgnormr   Tr	   r;   )rK   r    rd   re   modelexpected_componentss         r,   test_initializationrp   {   s    
)

 2
3
3C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   r0   r1   r   r   )r   rf   r   r3   r4   r5   r6   r7   )r   r8   r9   r   r   r:   r;   r   )r    r<   pcar!   s       r,   test_mini_batch_correct_shapesrs      s    
)


"
"C		"bA
!ac
J
J
JC!A? G++++7g
"qs
K
K
KC!A? H,,,,7hr.   c                 8   d}t           j                            |           }t          ddd|          \  }}}t	          dd||          }|                    |          }|                    |d d                   }t          |d	         |d	                    d S )
Nr   r     r@   rA   rB   rC   r1   r   )r   r8   r9   r-   r   r:   rR   r	   )rK   rE   r    r+   rL   rM   results_trainresults_tests           r,   test_scaling_fit_transformrx      s    E
)

 2
3
3C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                            |           }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
           d S )Nr   ru   r@   rA   r1   r   r   )rE   ridge_alphar   r   r2   r_   )rI   )r   r8   r9   r-   r   r   rJ   rR   r	   absr;   r   rm   eyesign)	rK   r    r+   rL   Zr=   rr   results_test_pcaresults_test_spcas	            r,   test_pca_vs_spcar      se   
)

 2
3
3C4cBBBGAq!2vC@@@GAq!1!!#NNND
13
/
/
/CGGAJJJHHQKKK}}Q''q))
t##CO$56677     0AAA 6777!21aaa4!8999$&7dCCCCCCr.   SPCAr   r   c                     t           j                            d          }d\  }}|                    ||          } | |                              |          }||j        |k    sJ d S |j        |k    sJ d S )Nr   r0   r1   r   )r   r8   r9   r   rJ   n_components_)r   r   r    r   r   r<   rn   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.   rD   )rB   rF   zdata_type, expected_typec                 $   d\  }}}t           j                            d          }|                    ||                              |          } | ||          }	|	                    |          }
|
j        |k    sJ |	j        j        |k    sJ d S )N)r0   r1   r   r   )r   rD   )r   r8   r9   r   astyper:   dtyper;   )r   rD   	data_typeexpected_typer   r   r   r    input_arrayrn   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\  }}}t          ||||          } | |||          }|                    |                    t          j                            } | |||          }	|	                    |                    t          j                            }
t          |
|           t          |	j        |j                   d S )N)   r   rb   )r   r   effective_rankr   r^   )r   r:   r   r   float32float64r	   r;   )r   rD   rK   r   r   r   r   model_32transformed_32model_64transformed_64s              r,   %test_sparse_pca_numerical_consistencyr      s     +4'Iz<&#'	  K t!'  H
 ++K,>,>rz,J,JKKNt!'  H
 ++K,>,>rz,J,JKKNNN333H((*>?????r.   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   rc   r   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   r8   r9   r   rJ   get_feature_names_out__name__lowerr   r   )r   r    r   r   r<   rn   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   r1   d   g      ?)rf   tolr   gMbP?gư>r   )rf   r   max_no_improvementr   N)r   r8   r9   r   r   rJ   n_iter_)rK   r    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   rc   r   
randomizedr   )r   
svd_solverr   rB   )r   rD   rz   rE   r   N)	r   r8   r9   r   r   rJ   r   r	   r;   )rK   r    r<   r   rr   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}t	          |dd|           }t          ||           }|                    |          }|                    |          }	t          |                    |          |                    |	                     dS )zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.r1   rb   r   -q=r   rE   rz   r   r2   N)	r   r8   r9   r   r   r   r:   r	   inverse_transform)
rK   r    r   r   r<   r   r=   rr   X_trans_spcaX_trans_pcas
             r,   !test_sparse_pca_inverse_transformr   8  s    
)

 2
3
3C!Iz		)Z((AL!'	  D <6H
I
I
IC%%a((L##A&&K|,,c.C.CK.P.P    r.   c                    t           j                            |          }d\  }}|                    ||          }|} | |dd|          }|                    |          }t          |                    |          |           dS )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   rK   r    r   r   r<   r   r=   r   s	            r,   +test_transform_inverse_transform_round_tripr   M  s    
 )

 2
3
3C!Iz		)Z((AL4!'	  D %%a((LD**<8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>   rO   markthread_unsaferV   r[   r`   rp   rs   rx   r   parametrizer   r   r   int32int64r   r   r   r   r   r   r   r   r.   r,   <module>r      so  
      , , , , , , 1 1 1 1 1 1 D D D D D D D D D D , , , , , ,         
 + * * * * *   4  Y Y Y& "& & #" &,< < <2 2 2< < <  7 7 7D D D$ )-?!@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@ @ 32 BA@6 )-?!@AA
J 
J BA
JI I I47 7 74  * )-?!@AA= = BA= = =r.   