
     h4A              	          U d dl Z d dlmZmZ d dlZd dlZd dlmZ	 d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ egZee         ed<   egZee         ed<   eez   ZegZee         ed<   egZ ee         ed<   ee z   Z!d9dZ"d Z#d\  Z$Z% e&e$e%z  dz            Z' e"e$e%e'          \  Z(Z)e
j*        +                    dg d          d             Z,d Z-d Z.d Z/d Z0d Z1e
j*        +                    de          d              Z2e
j*        +                    de          d!             Z3d" Z4d# Z5d$ Z6d% Z7d& Z8d' Z9d( Z:d) Z;d* Z<d+ Z=d, Z>e
j*        +                    d-e!          d.             Z?e
j*        +                    d/d0          e
j*        +                    d1d0          e
j*        +                    d-e!          e
j*        +                    d2d3d4g          d5                                                 Z@e
j*        +                    d-e!          e
j*        +                    d6ejA        ejA        fejB        ejB        fejC        ejB        fejD        ejB        ff          d7                         ZEe
j*        +                    d-e!          d8             ZFdS ):    N)ListAny)euclidean_distancesjohnson_lindenstrauss_min_dim)_gaussian_random_matrix)_sparse_random_matrix)SparseRandomProjection)GaussianRandomProjection)assert_allclose)assert_allclose_dense_sparse)assert_array_equal)assert_almost_equal)assert_array_almost_equal)DataDimensionalityWarningall_sparse_random_matrixall_dense_random_matrixall_SparseRandomProjectionall_DenseRandomProjectionc                 B   t           j                            |          }t          j        |                    |          |                    | |          |                    ||          ff| |f          }|                                |                                fS )Nsizeshape)	nprandomRandomStatesp
coo_matrixrandnrandinttoarraytocsr)	n_samples
n_features
n_nonzerosrandom_staterngdata_coos         `/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/tests/test_random_projection.pymake_sparse_random_datar+   #   s    
)


-
-C}IIj!!IJ77JZ88	
 *%	 	 	H x~~////    c                 V    t          j        |           s| S |                                 S N)r   issparser"   )matrixs    r*   densifyr1   2   s)    ;v  ~~r,   )
     g      Y@zn_samples, eps))d   皙?)r4           )r4   g)r         ?c                     t          j        t                    5  t          | |           d d d            d S # 1 swxY w Y   d S )Neps)pytestraises
ValueErrorr   )r$   r:   s     r*   test_invalid_jl_domainr>   C   s     
z	"	" : :%iS9999: : : : : : : : : : : : : : : : : :s   9= =c                  "   t          j        t                    5  t          ddgz  ddgz             d d d            n# 1 swxY w Y   t          t          j                            ddd	          t	          j        dd
                     d S )N   r4      g?r9      r2   )r2   r2   r   r7   )r;   r<   r=   r   r   r   r!   full r,   r*   test_input_size_jl_min_dimrE   K   s    	z	"	" @ @%a3%iQ#Y????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ "
	!Rh//RWXs5K5K     s   A  AAc                     g d}|D ]B\  }}t          j        t                    5   | ||           d d d            n# 1 swxY w Y   Cd S )N))r   r   )rB   )rB   rG   )rB   r   )rG   r   r;   r<   r=   random_matrixinputsn_componentsr%   s       r*   check_input_size_random_matrixrM   W   s    888F$* 4 4 j]:&& 	4 	4M,
333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	44 4s   >A	A	c                 P    g d}|D ]\  }} | ||          j         ||fk    sJ d S )N))rB      )rO   rB   )rO   rO   )rB   rB   r   rI   s       r*   check_size_generatedrP   ^   sb    ---F$* 
 
 j}\:66<A
 
 
 
 
 

 
r,   c                     t           | ddd                    }t          dt          j        |          d           t          dt          j                            |          d           d S )Ni'  rB   r   r'   r@         ?)r1   r   r   meanlinalgnorm)rJ   As     r*   check_zero_mean_and_unit_normrX   g   sb     	eQQ77788AaQ///c29>>!#4#4a88888r,   c                     d\  }}dD ]A}t          j        t                    5   | |||           d d d            n# 1 swxY w Y   Bd S )N)rO   r2   )g      r6   r5   densityrH   )rJ   rL   r%   r[   s       r*   %check_input_with_sparse_random_matrixr\   q   s    $L*# E E]:&& 	E 	EM,
GDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	EE Es   >A	A	rJ   c                 `    t          |            t          |            t          |            d S r.   )rM   rP   rX   )rJ   s    r*   $test_basic_property_of_random_matrixr^   y   s4     #=111'''!-00000r,   c                 n    t          |            t          j        | d          }t          |           d S )NrS   rZ   )r\   	functoolspartialrX   )rJ   random_matrix_denses     r*   +test_basic_property_of_sparse_random_matrixrc      s;    )-888#+M3GGG!"566666r,   c                      d} d}t          | |d          }t          dt          j        |          d           t          t          j        |d          d| z  d           d S )	Nr4   r3   r   rR   r6   rA   rB   ddof)r   r   r   rT   var)rL   r%   rW   s      r*   test_gaussian_random_matrixrh      sh     LJjqIIIAc271::q111bfQQ///\1A1EEEEEr,   c            
      v   d} d}dD ]}d|z  }t          | ||d          }t          |          }t          j        |          }t          j        |          t          j        |           z  |v sJ t          j        |           t          j        |           z  |v sJ |dk    rt          j        |          dk    sJ n d	|v sJ t          j        |          d
k    sJ t          t          j        |d	k              dd|z  z
  d           t          t          j        |t          j        |          t          j        |           z  k              dd|z  z  d           t          t          j        |t          j        |           t          j        |           z  k              dd|z  z  d           t          t          j        |d	k    d          dd|z  z
  dz  |z  d           t          t          j        |t          j        |          t          j        |           z  k    d          ddd|z  z  z
  dz  d|z  z  d           t          t          j        |t          j        |           t          j        |           z  k    d          ddd|z  z  z
  dz  d|z  z  d           d S )Nr4   i  )g333333?rS   rB   r   )r[   r'   rS   rA   r6   r@   )decimalre   )	r	   r1   r   uniquesqrtr   r   rT   rg   )rL   r%   r[   srW   valuess         r*   test_sparse_random_matrixro      s   LJ ,
 ,
K!*gA
 
 
 AJJ 1wqzzBGL111V;;;;

{RW\222f<<<<c>>76??a'''''&====76??a'''' 	BGAH--q1q5y!DDDDGAbgl&;&;;;<<a1q5kST	
 	
 	
 	
 	GA"'!**rw|'<'<<<==qAE{TU	
 	
 	
 	
 	BF18!444q1q5yAo6ISTUUUUF1

RW\%:%:::CCCa!e_!QU+	
 	
 	
 	

 	F1bgl&;&;;;!DDDa!e_!QU+	
 	
 	
 	
 	
Q,
 ,
r,   c                      d} g dg}t           D ]R}t          j        t                    5   ||                               |           d d d            n# 1 swxY w Y   Sd S )Nauto)r   rB   rA   rL   )all_RandomProjectionr;   r<   r=   fit)rL   fit_dataRandomProjections      r*   0test_random_projection_transformer_invalid_inputrw      s    L		{H0 F F]:&& 	F 	F,777;;HEEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	FF Fs    AA	A	c                      t           D ]W} t          j        t                    5   | d                              t
                     d d d            n# 1 swxY w Y   Xd S )Nrq   rr   )rs   r;   r<   r=   	transformdata)rv   s    r*    test_try_to_transform_before_fitr{      s    0 B B]:&& 	B 	B&111;;DAAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	BB Bs   %AA	A	c                      t          ddd          \  } }t          D ]Y} |dd          }d}t          j        t          |          5  |                    |            d d d            n# 1 swxY w Y   Zd S )Nr3   r4   rq   g?)rL   r:   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+   rs   r;   r<   r=   rt   )rz   _rv   rpexpected_msgs        r*   .test_too_many_samples_to_find_a_safe_embeddingr      s    %dC66GD!0  6s;;; 	
 ]:\::: 	 	FF4LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   A**A.	1A.	c                     t          ddd          \  } }d}t          | d          }|                                }|dk    }||         }t          D ]} |d|d	
          }|                    |           }t          |d          }|                                }||         }||z  }	|	                                d|z   k     sJ d|z
  |	                                k     sJ d S )N   i  i:  g?T)squaredr6   rq   r   )rL   r:   r'   rB   )r+   r   ravelrs   fit_transformmaxmin)
rz   r~   r:   original_distancesnon_identicalrv   r   	projectedprojected_distancesdistances_ratios
             r*   (test_random_projection_embedding_qualityr      s    %au55GD!
C,T4@@@+1133&#-M ,M:0 / /6sKKK$$T**	1)TJJJ17799 2-@-0BB
 ""$$q3w....3w,,.......!/ /r,   c                  p   t           D ],}  | ddd          }|                    t                     t          |                    t                    t
          j                  sJ t          j        t                    }t          |                    |          t
          j                  sJ  | ddd          }|                    t                    }t          |                    t                    t
          j                  sJ t          j	        |                    |                    sJ .d S )Nr2   Tr   )rL   dense_outputr'   F)
r   rt   rz   
isinstancery   r   ndarrayr   
csr_matrixr/   )SparseRandomProjr   sparse_datas      r*   +test_SparseRandomProj_output_representationr     s   6 6 6 2DqQQQ
t",,t,,bj99999mD))",,{33RZ@@@@@ 2EPQRRRVVD\\",,t,,bj99999 {2<<44555555#6 6r,   c                     t           D ]}  | ddd                              t                    }|j        dk    sJ |j        dk    sJ | t
          v r#|j        dk    sJ t          |j        dd           |j	        j
        dt          fk    sJ |                    t                    }|j
        t          dfk    sJ |                    t                    }t          ||            | dd          }|                    t                    }t          ||           t!          j        t$                    5  |                    t          d d d	d
f                    d d d            n# 1 swxY w Y   | t
          v ry | ddd          }|                    t                    }|j
        t          dfk    sJ |j	        j
        dt          fk    sJ |j	        j        dk     sJ d|j	        j        k     sJ d S )Nrq   r   r7   )rL   r'   r:   n   gQ?rA   )r'   r:   rB   rO   r4   gMbP?)rL   r[   r'   s   U   )rs   rt   rz   rL   n_components_r   r[   r   density_components_r   r%   ry   r$   r   r   r;   r<   r=   nnz)rv   r   projected_1projected_2rp2projected_3r   s          r*   2test_correct_RandomProjection_dimensions_embeddingr      sc   0 &+ &+6sKKKOOPTUU &((((3&&&&999:''''T1555~#Z'88888ll4(( Y$44444 ll4((;444 A3777''--;444 ]:&& 	' 	'LLaaa1f&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 999!!sEPQRRRB((..I?y#&66666>'C+<<<<<>%++++*****M&+ &+s   8'E++E/	2E/	c                     d} t          d| t          | dz                      \  }}t          D ]U}t          j        t
                    5   || dz                                 |           d d d            n# 1 swxY w Y   Vd S )N   rO      rB   rr   )r+   intrs   r;   warnsr   rt   )r%   rz   r~   rv   s       r*   1test_warning_n_components_greater_than_n_featuresr   J  s    J%aSa5H5HIIGD!0 D D\344 	D 	D*q.999==dCCC	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	D 	DD Ds   	#A88A<	?A<	c                  r   d} t          d| t          | dz                      \  }}t          D ]} |dd                              |          } |dd                              t	          j        |                    }t          t          |j                  t          |j                             d S )Nr   rO   r   r@   rB   )rL   r'   )	r+   r   rs   rt   r   r   r   r1   r   )r%   rz   r~   rv   rp_dense	rp_sparses         r*   test_works_with_sparse_datar   S  s    J%aSa5H5HIIGD!0 
 
##CCCGGMM$$!!DDDHHM$
 
	 	"H())793H+I+I	
 	
 	
 	

 
r,   c                  4    t          dd          dk    sJ dS )zyTest Johnson-Lindenstrauss for small eps.

    Regression test for #17111: before #19374, 32-bit systems would fail.
    r4   h㈵>r9   l   JWNr   rD   r,   r*   "test_johnson_lindenstrauss_min_dimr   a  s(    
 )$777<GGGGGGr,   random_projection_clsc                 @    | d          }|                     t                     |                                }| j                                        t          j        fdt          |j                  D             t                    }t          ||           d S )NrA   rr   c                     g | ]} | 	S rD   rD   ).0iclass_name_lowers     r*   
<listcomp>z<test_random_projection_feature_names_out.<locals>.<listcomp>p  s%    RRRa	!a	!	!RRRr,   )dtype)rt   rz   get_feature_names_out__name__lowerr   arrayranger   objectr   )r   random_projection	names_outexpected_names_outr   s       @r*   (test_random_projection_feature_names_outr   i  s    --1===$!7799I,5;;==RRRR51B1P+Q+QRRR  
 y"455555r,   r$   )rA   	   r2      r3   r%   compute_inverse_componentsTFc                 d   d} ||||          }t          | || |z  dz  dz   |          \  }}||fD ]}	t          j                    5  t          j        ddt                     |                    |	          }
d d d            n# 1 swxY w Y   |r(t          |d	          sJ |j        }|j        ||fk    sJ |	                    |
          }|j        |	j        k    sJ |
                    |          }t          |
d
          r|
                                }
t          |
|dd           d S )Nr2   )rL   r   r'   r4   rB   rR   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_transformry   r"   r   )r$   r%   r   r   global_random_seedrL   r   X_denseX_csrXr   inv_componentsprojected_backprojected_agains                 r*   test_inverse_transformr   w  s    L--!#='   -J#%)'	  NGU u K K$&& 	; 	;#T2    *77::I	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; & 	F,.CDDDDD.BN!'J+EEEEE*<<YGG#qw....+55nEE9i(( 	,!))++I	?EJJJJJ-K Ks   	2BB	B	zinput_dtype, expected_dtypec                    t           j                            d          }|                    dd          } | d          }|                    |                    |                    }|j        j        |k    sJ |j        |k    sJ d S )N*        r   rR   )r   r   r   randr   astyper   r   )r   input_dtypeexpected_dtyper(   r   r   transformeds          r*   "test_random_projection_dtype_matchr     s     )


#
#CTA		A	.	.	.B""188K#8#899K>>1111......r,   c                    d}t           j                            d          }|                    dd          } | d          } | d          }|                    |                    t           j                            }|                    |                    t           j                            }t          |||           t          |j
        |j
                   d S )Nr   r   r   r   r   rR   )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111E!!q111E''(<(<==M''(<(<==MM=t<<<< !2E4EFFFFFr,   )r   )Gr`   typingr   r   r   numpyr   scipy.sparsesparser   r;   sklearn.metricsr   sklearn.random_projectionr   r   r	   r
   r   sklearn.utils._testingr   r   r   r   r   sklearn.exceptionsr   r   __annotations__r   all_random_matrixr   r   rs   r+   r1   r$   r%   r   r&   rz   data_csrmarkparametrizer>   rE   rM   rP   rX   r\   r^   rc   rh   ro   rw   r{   r   r   r   r   r   r   r   r   r   r   r   int32int64r   r   rD   r,   r*   <module>r      s8                            / / / / / / C C C C C C = = = = = = ; ; ; ; ; ; < < < < < < > > > > > > 2 2 2 2 2 2 ? ? ? ? ? ? 5 5 5 5 5 5 6 6 6 6 6 6 < < < < < < 8 8 8 8 8 8'<&= $s) = = =&=%> c > > >,/FF )?(@ DI @ @ @(@'A 49 A A A14MM 
0 0 0 0      # 	:SZ'%/00
((J
KKh EEE : : :
  4 4 4
 
 
9 9 9E E E *;<<1 1 =<1 *BCC7 7 DC7F F F1
 1
 1
rF F FB B B  / / /<6 6 6*'+ '+ '+TD D D
 
 
H H H 02FGG
6 
6 HG
6 &:;;';<<02FGG5e}EE,K ,K FE HG =< <;,K^ 02FGG!	RZ 	RZ 	2:	2:	 
/ 
/  HG
/ 02FGGG G HGG G Gr,   