
    0PhL              	          U d dl Z 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mZmZ d dlmZ d dlmZmZmZmZmZ d dlmZmZmZmZ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$	 	 d=dZ%d Z&d\  Z'Z( e)e'e(z  dz            Z*ej+        ,                    dddgddgfddgddgfddgddgfg          d             Z-d Z.d Z/d Z0d  Z1d! Z2ej+        ,                    d"e!          d#             Z3ej+        ,                    d"e          d$             Z4d% Z5d& Z6d' Z7ej+        ,                    d(e          d)             Z8ej+        ,                    d(e          d*             Z9ej+        ,                    d(e          d+             Z:ej+        ,                    d(e          d,             Z;ej+        ,                    d(e          d-             Z<ej+        ,                    d(e          d.             Z=ej+        ,                    d(e          d/             Z>d0 Z?ej+        ,                    d(e          ej+        ,                    d1e$          d2                         Z@ej+        ,                    d(e          ej+        ,                    d3d4          ej+        ,                    d5d4          ej+        ,                    d1e$          ej+        ,                    d6d7d8g          d9                                                             ZAej+        ,                    d1e$          ej+        ,                    d:ejB        ejB        fejC        ejC        fejD        ejC        fejE        ejC        ff          d;                         ZFej+        ,                    d1e$          d<             ZGdS )>    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_DenseRandomProjectioncsrc                 6   t           j                            |          } | |                    |          |                    ||          |                    ||          ff||f          }||                    |          S |                                S )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           d/var/www/html/test/jupyter/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    ///!!!    c                 V    t          j        |           s| S |                                 S N)spissparser#   )matrixs    r,   densifyr4   A   s)    ;v  ~~r.   )
     g      Y@zn_samples, epsd   n   ?皙?Z   皙?        2   i皙?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%   rB   s     r,   test_invalid_jl_domainrF   Q   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   r7      r9   rA      r5   )r5   r5   r         ?)rC   rD   rE   r   r   r   r!   full r.   r,   test_input_size_jl_min_dimrN   ^   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   )rJ   )rJ   rP   )rJ   r   )rP   r   rC   rD   rE   random_matrixinputsn_componentsr&   s       r,   check_input_size_random_matrixrV   j   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))rJ      )rX   rJ   )rX   rX   )rJ   rJ   r   rR   s       r,   check_size_generatedrY   q   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'  rJ   r   r(   rH         ?)r4   r   r   meanlinalgnorm)rS   As     r,   check_zero_mean_and_unit_normra   z   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)rX   r5   )g      r=   r:   densityrQ   )rS   rU   r&   rd   s       r,   %check_input_with_sparse_random_matrixre      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	rS   c                 `    t          |            t          |            t          |            d S r0   )rV   rY   ra   )rS   s    r,   $test_basic_property_of_random_matrixrg      s4     #=111'''!-00000r.   c                 n    t          |            t          j        | d          }t          |           d S )Nr\   rc   )re   	functoolspartialra   )rS   random_matrix_denses     r,   +test_basic_property_of_sparse_random_matrixrl      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 )	Nr7   r6   r   r[   r=   rI   rJ   ddof)r
   r   r   r]   var)rU   r&   r`   s      r,   test_gaussian_random_matrixrq      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 )Nr7   i  )g333333?r\   rJ   r   )rd   r(   r\   rI   r=   rH   )decimalrn   )	r   r4   r   uniquesqrtr   r   r]   rp   )rU   r&   rd   sr`   valuess         r,   test_sparse_random_matrixrx      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   rJ   rI   rU   )all_RandomProjectionrC   rD   rE   fit)rU   fit_dataRandomProjections      r,   0test_random_projection_transformer_invalid_inputr      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	r$   c                    t          | t          t          t          |d           }t          D ]R}t          j        t                    5   |d                              |           d d d            n# 1 swxY w Y   Sd S )Nr(   r)   rz   r{   )	r-   r%   r&   r'   r|   rC   rD   r   	transform)r$   global_random_seeddatar   s       r,    test_try_to_transform_before_fitr      s    "'  D 1 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    A33A7	:A7	c                     t          | d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 )	Nr6   r7   r%   r&   r'   r(   r)   rz   r<   )rU   rB   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|   rC   rD   rE   r}   )r$   r   r   r   rpexpected_msgs         r,   .test_too_many_samples_to_find_a_safe_embeddingr      s    "'  D 1  6s;;; 	
 ]:\::: 	 	FF4LLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   	A++A/	2A/	c                    t          | dd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:  r   r   r?   T)squaredr=   rz   )rU   rB   r(   rJ   )r-   r   ravelr|   fit_transformmaxmin)
r$   r   rB   original_distancesnon_identicalr   r   	projectedprojected_distancesdistances_ratios
             r,   (test_random_projection_embedding_qualityr     s3   "  D 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                    t          | t          t          t          dd           }t          | t          t          t          dd          }t          D ]} |ddd          }|                    |           t          |                    |          t          j	                  sJ t          |                    |          t          j	                  sJ  |ddd          }|                    |          }t          |                    |          t          j	                  sJ t          j        |                    |                    sJ d S )Nr   r   r   r5   T)rU   dense_outputr(   F)r-   r%   r&   r'   r   r}   
isinstancer   r   ndarrayr1   r2   )r$   
dense_datasparse_dataSparseRandomProjr   s        r,   +test_SparseRandomProj_output_representationr   7  sU   (  J *  K 7 6 6 2DqQQQ
z",,z22BJ?????",,{33RZ@@@@@ 2EPQRRRVVJ",,z22BJ????? {2<<445555556 6r.   c                    t          | t          t          t          |d           }t          D ]} |ddd                              |          }|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 |                    |          }|j        t          dfk    sJ |                    |          }t          ||            |dd	          }|                    |          }t          ||           t#          j        t&                    5  |                    |d d d
df                    d d d            n# 1 swxY w Y   |t          v rt |ddd          }|                    |          }	|	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 )Nr   rz   r   rK   )rU   r(   rB   r8   gQ?rI   )r(   rB   rJ   rX   r7   gMbP?)rU   rd   r(   s   U   )r-   r%   r&   r'   r|   r}   rU   n_components_r   rd   r   density_components_r   r   r   r   rC   rD   rE   nnz)
r$   r   r   r   r   projected_1projected_2rp2projected_3r   s
             r,   2test_correct_RandomProjection_dimensions_embeddingr   [  s    #'  D 1 &+ &+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   "E66E:	=E:	c                    d}d}t          |dz            }t          | ||||d           }t          D ]U}t          j        t
                    5   ||dz                                 |           d d d            n# 1 swxY w Y   Vd S )N   rX      r   rJ   r{   )intr-   r|   rC   warnsr   r}   )r$   r   r&   r%   r'   r   r   s          r,   1test_warning_n_components_greater_than_n_featuresr     s    JIZ!^$$J"'  D 1 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   #A==B	B	c                    d}d}t          |dz            }t          | ||||d           }t          | ||||d          }t          D ]v} |dd                              |          } |dd                              |          }	t	          t          |j                  t          |	j                             wd S )	Nr   rX   r   r   r   rH   rJ   )rU   r(   )r   r-   r|   r}   r   r4   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CCGG
SS$$!!DDDHHUU	!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.
    r7   h㈵>rA   l   JWN)r   rM   r.   r,   "test_johnson_lindenstrauss_min_dimr     s(    
 )$777<GGGGGGr.   random_projection_clsc                 ~   t          | t          t          t          |d           } |d          }|                    |           |                                }|j                                        t          j	        fdt          |j                  D             t                    }t          ||           d S )Nr   rI   r{   c                     g | ]} | 	S rM   rM   ).0iclass_name_lowers     r,   
<listcomp>z<test_random_projection_feature_names_out.<locals>.<listcomp>  s%    RRRa	!a	!	!RRRr.   )dtype)r-   r%   r&   r'   r}   get_feature_names_out__name__lowerr   arrayranger   objectr   )r$   r   r   r   random_projection	names_outexpected_names_outr   s          @r,   (test_random_projection_feature_names_outr     s    
 #'  D .-1===$!7799I,5;;==RRRR51B1P+Q+QRRR  
 y"455555r.   r%   )rI   	   r5      r6   r&   compute_inverse_componentsTFc                    d} ||||          }t          | ||||z  dz  dz   |d           }t          | ||||z  dz  dz   |d          }	||	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 )Nr5   )rU   r   r(   r7   rJ   )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   rU   r   X_denseX_csrXr   inv_componentsprojected_backprojected_agains                  r,   test_inverse_transformr     s    L--!#='   &z)S014'  G $z)S014'  E 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   r[   )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   r[   )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.   )Nr   )Hri   r   typingr   r   numpyr   rC   scipy.sparsesparser1   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-   r4   r%   r&   r   r'   markparametrizerF   rN   rV   rY   ra   re   rg   rl   rq   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   int32int64r   r   rM   r.   r,   <module>r     s[                            H H H H H H H H / / / / / /                           / . . . . .'<&= $s) = = =&=%> c > > >,/FF )?(@ DI @ @ @(@'A 49 A A A14MM  " " " ":      # 	:SZ'%/00
 
sc3Z 
cS#J
cS#J : : :
  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 .99B B :9B .99  :9* .99"/ "/ :9"/J .99 6  6 :9 6F .991+ 1+ :91+h .99D D :9D( .99
 
 :9
:H H H .9902FGG6 6 HG :96. .99&:;;';<<02FGG5e}EE7K 7K FE HG =< <; :9
7Kt 02FGG!	RZ 	RZ 	2:	2:	 
/ 
/  HG
/ 02FGGG G HGG G Gr.   