
    -iL              	          % S SK r S SKrS SKJrJr  S SKrS SKrS SKJ	r
  S SKJrJr  S SKJr  S SKJrJrJrJrJr  S SKJrJrJrJrJr  S SKJr  \/r\\   \S'   \/r \\   \S	'   \\ -   r!\/r"\\   \S
'   \/r#\\   \S'   \"\#-   r$  S<S jr%S r&Su  r'r(\)" \'\(-  S-  5      r*\RV                  RY                  SSS/SS/4SS/SS/4SS/SS/4/5      S 5       r-S r.S r/S r0S r1S  r2\RV                  RY                  S!\!5      S" 5       r3\RV                  RY                  S!\5      S# 5       r4S$ r5S% r6S& r7\RV                  RY                  S'\5      S( 5       r8\RV                  RY                  S'\5      S) 5       r9\RV                  RY                  S'\5      S* 5       r:\RV                  RY                  S'\5      S+ 5       r;\RV                  RY                  S'\5      S, 5       r<\RV                  RY                  S'\5      S- 5       r=\RV                  RY                  S'\5      S. 5       r>S/ r?\RV                  RY                  S'\5      \RV                  RY                  S0\$5      S1 5       5       r@\RV                  RY                  S'\5      \RV                  RY                  S2S35      \RV                  RY                  S4S35      \RV                  RY                  S0\$5      \RV                  RY                  S5S6S7/5      S8 5       5       5       5       5       rA\RV                  RY                  S0\$5      \RV                  RY                  S9\R                  \R                  4\R                  \R                  4\R                  \R                  4\R                  \R                  445      S: 5       5       rF\RV                  RY                  S0\$5      S; 5       rGg)=    N)AnyList)DataDimensionalityWarningNotFittedError)euclidean_distances)GaussianRandomProjectionSparseRandomProjection_gaussian_random_matrix_sparse_random_matrixjohnson_lindenstrauss_min_dim)assert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equal)COO_CONTAINERSall_sparse_random_matrixall_dense_random_matrixall_SparseRandomProjectionall_DenseRandomProjectionc           	          [         R                  R                  U5      nU " UR                  U5      UR	                  XS9UR	                  X#S944X4S9nUb  UR                  U5      $ UR                  5       $ )zMake some random data with uniformly located non zero entries with
Gaussian distributed values; `sparse_format` can be `"csr"` (default) or
`None` (in which case a dense array is returned).
sizeshape)nprandomRandomStaterandnrandintasformattoarray)coo_container	n_samples
n_features
n_nonzerosrandom_statesparse_formatrngdata_coos           W/var/www/html/venv/lib/python3.13/site-packages/sklearn/tests/test_random_projection.pymake_sparse_random_datar,   $   s     ))


-CIIj!I7J8	
 %	H    //!!    c                 \    [         R                  " U 5      (       d  U $ U R                  5       $ N)spissparser"   )matrixs    r+   densifyr3   A   s#    ;;v~~r-   )
     g      Y@zn_samples, epsd   n   ?皙?Z   皙?        2   i皙?c                 ~    [         R                  " [        5         [        XS9  S S S 5        g ! , (       d  f       g = f)Neps)pytestraises
ValueErrorr   )r$   rA   s     r+   test_invalid_jl_domainrE   Q   s$     
z	"%i9 
#	"	"s   
.
<c                     [         R                  " [        5         [        SS/-  SS/-  S9  S S S 5        [        [        R
                  R                  SSSS	9[        R                  " SS
5      S9  g ! , (       d  f       NK= f)N   r6      r8   r@      r4   )r4   r4   r         ?)rB   rC   rD   r   r   r   r    full r-   r+   test_input_size_jl_min_dimrM   ^   sb    	z	"%a3%iQ#Y? 
# "
		!Rh/RWWXs5K 
#	"s   A33
Bc                     / SQnU H0  u  p#[         R                  " [        5         U " X#5        S S S 5        M2     g ! , (       d  f       MD  = f)N))r   r   )rI   )rI   rO   )rI   r   )rO   r   rB   rC   rD   random_matrixinputsn_componentsr%   s       r+   check_input_size_random_matrixrU   j   s7    8F$* ]]:&,3 '& %+&&s	   	<
A	c                 V    / SQnU H  u  p#U " X#5      R                   UU4:X  a  M   e   g )N))rI      )rW   rI   )rW   rW   )rI   rI   r   rQ   s       r+   check_size_generatedrX   q   s=    -F$* \6<<A
 
 	
 
 %+r-   c                     [        U " SSSS95      n[        S[        R                  " U5      S5        [        S[        R                  R                  U5      S5        g )Ni'  rI   r   r'   rG         ?)r3   r   r   meanlinalgnorm)rR   As     r+   check_zero_mean_and_unit_normr`   z   sD     	eQQ78AaQ/c299>>!#4a8r-   c                     Su  pS H-  n[         R                  " [        5         U " XUS9  S S S 5        M/     g ! , (       d  f       MA  = f)N)rW   r4   )g      r<   r9   densityrP   )rR   rT   r%   rc   s       r+   %check_input_with_sparse_random_matrixrd      s9    $L#]]:&,GD '& $&&s	   9
A	rR   c                 F    [        U 5        [        U 5        [        U 5        g r/   )rU   rX   r`   )rR   s    r+   $test_basic_property_of_random_matrixrf      s     #=1'!-0r-   c                 Z    [        U 5        [        R                  " U SS9n[        U5        g )Nr[   rb   )rd   	functoolspartialr`   )rR   random_matrix_denses     r+   +test_basic_property_of_sparse_random_matrixrk      s&    )-8#++M3G!"56r-   c                      Sn Sn[        XSS9n[        S[        R                  " U5      S5        [        [        R                  " USS9SU -  S5        g )	Nr6   r5   r   rZ   r<   rH   rI   ddof)r
   r   r   r\   var)rT   r%   r_   s      r+   test_gaussian_random_matrixrp      sJ     LJqIAc2771:q1bffQQ/\1A1Er-   c            
      R   Sn SnS GH  nSU-  n[        XUSS9n[        U5      n[        R                  " U5      n[        R                  " U5      [        R                  " U 5      -  U;   d   e[        R                  " U5      * [        R                  " U 5      -  U;   d   eUS:X  a  [        R
                  " U5      S:X  d   eO$S	U;   d   e[        R
                  " U5      S
:X  d   e[        [        R                  " US	:H  5      SSU-  -
  SS9  [        [        R                  " U[        R                  " U5      [        R                  " U 5      -  :H  5      SSU-  -  SS9  [        [        R                  " U[        R                  " U5      * [        R                  " U 5      -  :H  5      SSU-  -  SS9  [        [        R                  " US	:H  SS9SSU-  -
  S-  U-  SS9  [        [        R                  " U[        R                  " U5      [        R                  " U 5      -  :H  SS9SSSU-  -  -
  S-  SU-  -  SS9  [        [        R                  " U[        R                  " U5      * [        R                  " U 5      -  :H  SS9SSSU-  -  -
  S-  SU-  -  SS9  GM     g )Nr6   i  )g333333?r[   rI   r   )rc   r'   r[   rH   r<   rG   )decimalrm   )	r   r3   r   uniquesqrtr   r   r\   ro   )rT   r%   rc   sr_   valuess         r+   test_sparse_random_matrixrw      sH   LJK!gA
 AJ 1wwqzBGGL11V;;;
{RWW\22f<<<c>776?a'''&= =776?a''' 	BGGAH-q1q5y!DGGAbggl&;;;<a1q5kST	
 	GGA"''!*rww|'<<<=qAE{TU	
 	BFF18!4q1q5yAo6ISTUFF1
RWW\%:::Ca!e_!QU+	

 	FF1bggl&;;;!Da!e_!QU+	
Q r-   c                      Sn / SQ/n[          H;  n[        R                  " [        5         U" U S9R	                  U5        S S S 5        M=     g ! , (       d  f       MO  = f)Nauto)r   rI   rH   rT   )all_RandomProjectionrB   rC   rD   fit)rT   fit_dataRandomProjections      r+   0test_random_projection_transformer_invalid_inputr      sG    L{H0]]:&,7;;HE '& 1&&s   A
A	r#   c           	          [        U [        [        [        US S9n[         H;  n[
        R                  " [        5         U" SS9R                  U5        S S S 5        M=     g ! , (       d  f       MO  = f)Nr'   r(   ry   rz   )	r,   r$   r%   r&   r{   rB   rC   r   	transform)r#   global_random_seeddatar~   s       r+    test_try_to_transform_before_fitr      sY    "'D 1]]>*&1;;DA +* 1**s   A!!
A0	c           	          [        U SSSUS S9n[         H?  nU" SSS9nSn[        R                  " [        US9   UR                  U5        S S S 5        MA     g ! , (       d  f       MS  = f)	Nr5   r6   r$   r%   r&   r'   r(   ry   r;   )rT   rA   z~eps=0.100000 and n_samples=1000 lead to a target dimension of 5920 which is larger than the original space with n_features=100)match)r,   r{   rB   rC   rD   r|   )r#   r   r   r~   rpexpected_msgs         r+   .test_too_many_samples_to_find_a_safe_embeddingr      sm    "'D 16s; 	
 ]]:\:FF4L ;: 1 ;:s   A
A(	c           	      ^   [        U SSSSS S9nSn[        USS9nUR                  5       nUS	:g  nX4   n[         Hp  nU" S
USS9nUR	                  U5      n[        USS9nUR                  5       nX   nX-  n	U	R                  5       SU-   :  d   eSU-
  U	R                  5       :  a  Mp   e   g )N   i  i:  r   r   r>   T)squaredr<   ry   )rT   rA   r'   rI   )r,   r   ravelr{   fit_transformmaxmin)
r#   r   rA   original_distancesnon_identicalr~   r   	projectedprojected_distancesdistances_ratios
             r+   (test_random_projection_embedding_qualityr     s    "D C,T4@+113&#-M ,:06sK$$T*	1)TJ1779 2@-B
 ""$q3w...3w,,....! 1r-   c           	      b   [        U [        [        [        SS S9n[        U [        [        [        SSS9n[         H  nU" SSSS9nUR                  U5        [        UR                  U5      [        R                  5      (       d   e[        UR                  U5      [        R                  5      (       d   eU" SSSS9nUR                  U5      n[        UR                  U5      [        R                  5      (       d   e[        R                  " UR                  U5      5      (       a  M   e   g )Nr   r   csrr4   T)rT   dense_outputr'   F)r,   r$   r%   r&   r   r|   
isinstancer   r   ndarrayr0   r1   )r#   
dense_datasparse_dataSparseRandomProjr   s        r+   +test_SparseRandomProj_output_representationr   7  s   (J *K 7 2DqQ
z",,z2BJJ????",,{3RZZ@@@@ 2EPQRVVJ",,z2BJJ???? {{2<<45555 7r-   c           	         [        U [        [        [        US S9n[         GH  nU" SSSS9R                  U5      nUR                  S:X  d   eUR                  S:X  d   eU[        ;   a)  UR                  S:X  d   e[        UR                  SS5        UR                  R                  S[        4:X  d   eUR                  U5      nUR                  [        S4:X  d   eUR                  U5      n[        XV5        U" SSS	9nUR!                  U5      n[        XX5        ["        R$                  " [&        5         UR                  US S 2S
S24   5        S S S 5        U[        ;   d  GMF  U" SSSS9nUR!                  U5      n	U	R                  [        S4:X  d   eUR                  R                  S[        4:X  d   eUR                  R(                  S:  d   eSUR                  R(                  :  a  GM   e   g ! , (       d  f       N= f)Nr   ry   r   rJ   )rT   r'   rA   r7   gQ?rH   )r'   rA   rI   rW   r6   gMbP?)rT   rc   r'   s   U   )r,   r$   r%   r&   r{   r|   rT   n_components_r   rc   r   density_components_r   r   r   r   rB   rC   rD   nnz)
r#   r   r   r~   r   projected_1projected_2rp2projected_3r   s
             r+   2test_correct_RandomProjection_dimensions_embeddingr   [  s    #'D 106sKOOPTU &(((3&&&99::'''T15~~##Z'8888ll4(  Y$4444 ll4(;4 A37''-;4 ]]:&LLa1f& '
 99!sEPQRB((.I??y#&6666>>''C+<<<<>>%%+++*****M 16 '&s   7G88
H	c           	          SnSn[        US-  5      n[        U UUUUS S9n[         H>  n[        R                  " [
        5         U" US-   S9R                  U5        S S S 5        M@     g ! , (       d  f       MR  = f)N   rW      r   rI   rz   )intr,   r{   rB   warnsr   r|   )r#   r   r%   r$   r&   r   r~   s          r+   1test_warning_n_components_greater_than_n_featuresr     sx     JIZ!^$J"'D 1\\34*q.9==dC 54 144s   A**
A9	c           	      6   SnSn[        US-  5      n[        U UUUUS S9n[        U UUUUSS9n[         Ha  nU" SSS9R                  U5      nU" SSS9R                  U5      n	[	        [        UR                  5      [        U	R                  5      5        Mc     g )	Nr   rW   r   r   r   rG   rI   )rT   r'   )r   r,   r{   r|   r   r3   r   )
r#   r   r%   r$   r&   r   r   r~   rp_dense	rp_sparses
             r+   test_works_with_sparse_datar     s    JIZ!^$J('J *'K 1#CGG
S$!!DHHU	!H(()793H3H+I	
 1r-   c                  $    [        SSS9S:X  d   eg)zqTest Johnson-Lindenstrauss for small eps.

Regression test for #17111: before #19374, 32-bit systems would fail.
r6   h㈵>r@   l   JWN)r   rL   r-   r+   "test_johnson_lindenstrauss_min_dimr     s    
 )$7<GGGr-   random_projection_clsc           	      Z   [        U [        [        [        US S9nU" SS9nUR	                  U5        UR                  5       nUR                  R                  5       n[        R                  " [        UR                  5       Vs/ s H  ov U 3PM
     sn[        S9n[        XX5        g s  snf )Nr   rH   rz   )dtype)r,   r$   r%   r&   r|   get_feature_names_out__name__lowerr   arrayranger   objectr   )	r#   r   r   r   random_projection	names_outclass_name_loweriexpected_names_outs	            r+   (test_random_projection_feature_names_outr     s    
 #'D .1=$!779I,55;;=+01B1P1P+QR+QaaS	!+QR
 y5	 	Ss   B(r$   )rH   	   r4      r5   r%   compute_inverse_componentsTFc           	      ~   SnU" UUUS9n[        U UUX-  S-  S-   US S9n[        U UUX-  S-  S-   USS9n	X4 H  n
[        R                  " 5          [        R                  " SS[        S	9  UR                  U
5      nS S S 5        U(       a2  [        US
5      (       d   eUR                  nUR                  X&4:X  d   eUR                  W5      nUR                  U
R                  :X  d   eUR                  U5      n[        US5      (       a  UR                  5       n[        XSSS9  M     g ! , (       d  f       N= f)Nr4   )rT   r   r'   r6   rI   )r&   r'   r(   r   ignorez>The number of components is higher than the number of features)messagecategoryinverse_components_r"   gHz>g|=)rtolatol)r,   warningscatch_warningsfilterwarningsr   r   hasattrr   r   inverse_transformr   r"   r   )r#   r$   r%   r   r   r   rT   r   X_denseX_csrXr   inv_componentsprojected_backprojected_agains                  r+   test_inverse_transformr     s^    L-!#=' &)S014'G $)S014'E $$&##T2 *77:I ' &,.CDDDD.BBN!''J+EEEE*<<YG##qww...+55nE9i((!))+I	EJ- &&s   ,D..
D<	zinput_dtype, expected_dtypec                    [         R                  R                  S5      nUR                  SS5      nU " SS9nUR	                  UR                  U5      5      nUR                  R                  U:X  d   eUR                  U:X  d   eg )N*        r   rZ   )r   r   r   randr   astyper   r   )r   input_dtypeexpected_dtyper)   r   r   transformeds          r+   "test_random_projection_dtype_matchr   #  sw     ))


#CTA	A	.B""188K#89K>>>111...r-   c                    Sn[         R                  R                  S5      nUR                  SS5      nU " SS9nU " SS9nUR	                  UR                  [         R                  5      5      nUR	                  UR                  [         R                  5      5      n[        XvUS9  [        UR                  UR                  5        g )Nr   r   r   r   r   rZ   )r   )r   r   r   r   r   r   float32float64r   r   r   )r   r   r)   r   rp_32rp_64projection_32projection_64s           r+   ,test_random_projection_numerical_consistencyr   :  s     D
))


#CTA!q1E!q1E''(<=M''(<=MMt< !2!2E4E4EFr-   )Nr   )Hrh   r   typingr   r   numpyr   rB   scipy.sparsesparser0   sklearn.exceptionsr   r   sklearn.metricsr   sklearn.random_projectionr   r	   r
   r   r   sklearn.utils._testingr   r   r   r   r   sklearn.utils.fixesr   r   __annotations__r   all_random_matrixr   r   r{   r,   r3   r$   r%   r   r&   markparametrizerE   rM   rU   rX   r`   rd   rf   rk   rp   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   int32int64r   r   rL   r-   r+   <module>r     s5         H /   /'<&= $s) =&=%> c >,/FF )?(@ DI @(@'A 49 A14MM  ":  # 	:Z'%/0
 
sc3Z 
cS#J
cS#J::
4
9E *;<1 =1 *BC7 D7F1
rF .9B :B .9 :* .9"/ :"/J .9 6 : 6F .91+ :1+h .9D :D( .9
 :
:H .902FG6 H :6. .9&:;';<02FG5e}E7K F H = < :
7Kt 02FG!	RZZ 	RZZ 	2::	2::	
/ H
/ 02FGG HGr-   