
    >[g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jV                  jY                  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jV                  jY                  d!e!      d"        Z3ejV                  jY                  d!e      d#        Z4d$ Z5d% Z6d& Z7ejV                  jY                  d'e      d(        Z8ejV                  jY                  d'e      d)        Z9ejV                  jY                  d'e      d*        Z:ejV                  jY                  d'e      d+        Z;ejV                  jY                  d'e      d,        Z<ejV                  jY                  d'e      d-        Z=ejV                  jY                  d'e      d.        Z>d/ Z?ejV                  jY                  d'e      ejV                  jY                  d0e$      d1               Z@ejV                  jY                  d'e      ejV                  jY                  d2d3      ejV                  jY                  d4d3      ejV                  jY                  d0e$      ejV                  jY                  d5d6d7g      d8                                    ZAejV                  jY                  d0e$      ejV                  jY                  d9ej                  ej                  fej                  ej                  fej                  ej                  fej                  ej                  ff      d:               ZFejV                  jY                  d0e$      d;        ZGy)=    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                    t         j                  j                  |      } | |j                  |      |j	                  ||      |j	                  ||      ff||f      }||j                  |      S |j                         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           _/var/www/html/bid-api/venv/lib/python3.12/site-packages/sklearn/tests/test_random_projection.pymake_sparse_random_datar,   $   s     ))


-CIIj!IJ7JZ8	
 *%	H    //!!    c                 P    t        j                  |       s| S | j                         S N)spissparser"   )matrixs    r+   densifyr3   A   s     ;;v~~r-   )
     g      Y@zn_samples, epsd   n   ?皙?Z   皙?        2   i皙?c                 z    t        j                  t              5  t        | |       d d d        y # 1 sw Y   y xY w)Neps)pytestraises
ValueErrorr   )r$   rA   s     r+   test_invalid_jl_domainrE   Q   s&     
z	"%iS9 
#	"	"s   1:c                     t        j                  t              5  t        ddgz  ddgz         d d d        t        t        j
                  j                  ddd	      t	        j                  dd
             y # 1 sw Y   KxY w)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   A::Bc                     g d}|D ]0  \  }}t        j                  t              5   | ||       d d d        2 y # 1 sw Y   =xY w)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   s;    8F$* j]]:&,
3 '& %+&&s	   
;A	c                 T    g d}|D ]  \  }} | ||      j                   ||fk(  rJ  y )N))rI      )rW   rI   )rW   rW   )rI   rI   r   rQ   s       r+   check_size_generatedrX   q   sA    -F$* j\:6<<A
 
 	
 
 %+r-   c                     t         | ddd            }t        dt        j                  |      d       t        dt        j                  j                  |      d       y )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                     d\  }}dD ]/  }t        j                  t              5   | |||       d d d        1 y # 1 sw Y   <xY w)N)rW   r4   )g      r<   r9   densityrP   )rR   rT   r%   rc   s       r+   %check_input_with_sparse_random_matrixrd      s=    $L*#]]:&,
GD '& $&&s	   ;A	rR   c                 F    t        |        t        |        t        |        y r/   )rU   rX   r`   )rR   s    r+   $test_basic_property_of_random_matrixrf      s     #=1'!-0r-   c                 ^    t        |        t        j                  | d      }t        |       y )Nr[   rb   )rd   	functoolspartialr`   )rR   random_matrix_denses     r+   +test_basic_property_of_sparse_random_matrixrk      s&    )-8#++M3G!"56r-   c                      d} d}t        | |d      }t        dt        j                  |      d       t        t        j                  |d      d| z  d       y )	Nr6   r5   r   rZ   r<   rH   rI   ddof)r
   r   r   r\   var)rT   r%   r_   s      r+   test_gaussian_random_matrixrp      sL     LJjqIAc2771:q1bffQQ/\1A1Er-   c            
      N   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 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        y )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      sJ   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                      d} g dg}t         D ]<  }t        j                  t              5   ||       j	                  |       d d d        > y # 1 sw Y   IxY w)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                     t        | t        t        t        |d       }t        D ]<  }t        j                  t              5   |d      j                  |       d d d        > y # 1 sw Y   IxY w)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$$A-	c                     t        | ddd|d       }t        D ]C  } |dd      }d}t        j                  t        |      5  |j                  |       d d d        E y # 1 sw Y   PxY w)	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                 t   t        | ddddd       }d}t        |d      }|j                         }|d	k7  }||   }t        D ]u  } |d
|d      }|j	                  |      }t        |d      }|j                         }||   }||z  }	|	j                         d|z   k  sJ d|z
  |	j                         k  ruJ  y )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 ,M:06sK$$T*	1)TJ1779 2-@-0BB
 ""$q3w...3w,,....! 1r-   c                 L   t        | t        t        t        dd       }t        | t        t        t        dd      }t        D ]  } |ddd      }|j                  |       t        |j                  |      t        j                        sJ t        |j                  |      t        j                        sJ  |ddd      }|j                  |      }t        |j                  |      t        j                        sJ t        j                  |j                  |            rJ  y )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 7r-   c                    t        | t        t        t        |d       }t        D ]  } |ddd      j                  |      }|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                  |      }|j                  t        dfk(  sJ |j                  |      }t        ||        |dd	      }|j!                  |      }t        ||       t#        j$                  t&              5  |j                  |d d d
df          d d d        |t        v sC |ddd      }|j!                  |      }	|	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  rJ  y # 1 sw Y   xY w)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   :G55G>	c                     d}d}t        |dz        }t        | ||||d       }t        D ]?  }t        j                  t
              5   ||dz         j                  |       d d d        A y # 1 sw Y   LxY w)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--A6	c                 J   d}d}t        |dz        }t        | ||||d       }t        | ||||d      }t        D ]f  } |dd      j                  |      } |dd      j                  |      }	t	        t        |j                        t        |	j                               h y )	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                  (    t        dd      dk(  sJ y)zyTest 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                 h   t        | t        t        t        |d       } |d      }|j	                  |       |j                         }|j                  j                         }t        j                  t        |j                        D cg c]  }| | 
 c}t              }t        ||       y c c}w )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"45	 	Ss   B/r$   )rH   	   r4      r5   r%   compute_inverse_componentsTFc                 r   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        	       |j                  |
      }d d d        |r-t        |d
      sJ |j                  }|j                  ||fk(  sJ |j                        }|j                  |
j                  k(  sJ |j                  |      }t        |d      r|j                         }t        ||dd        y # 1 sw Y   xY w)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     sb    L-!#=' &z)S014'G $z)S014'E u$$&##T2 *77:I ' &,.CDDD.BBN!''J+EEEE*<<YG##qww...+55nE9i(!))+I	?EJ- &&s   .D--D6	zinput_dtype, expected_dtypec                    t         j                  j                  d      }|j                  dd      } | d      }|j	                  |j                  |            }|j                  j                  |k(  sJ |j                  |k(  sJ y )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                    d}t         j                  j                  d      }|j                  dd      } | d      } | d      }|j	                  |j                  t         j                              }|j	                  |j                  t         j                              }t        |||       t        |j                  |j                         y )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M=t< !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-   