
    ri.              
          d dl Z d dlZd dlZd dlmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ d dl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 d dlmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ejv                  jy                  de5e6z   e7z   e9z         d        Z=d Z>d Z?ejv                  jy                  dej                  ej                  ej                  ej                  f      d        ZDejv                  jy                  dej                  ej                  ej                  ej                  f      d        ZEejv                  jy                  dd      d        ZFejv                  jy                  dg d      d        ZGejv                  jy                  dej                  ej                  f      ejv                  jy                  de7      d               ZHd ZId ZJd ZKd  ZLejv                  jy                  de8e9z         d!        ZMd" ZNejv                  jy                  d#d$d%g      d&        ZOd' ZPd( ZQejv                  jy                  d)g d*      ejv                  jy                  d+g d*      ejv                  jy                  dg d,      ejv                  jy                  d- eRd.            d/                             ZSd0 ZTejv                  jy                  d1 ej                  g d2ej                  3       ej                  d4d.gej                  3      g ej                  ej                        f ej                  g d2ej                  3       ej                  d4d.gej                  3      g ej                  ej                        f ej                  g d2ej                  3       ej                  d5d6geW3      g ej                  eW      fg      d7        ZXejv                  jy                  dej                  ej                  g      ejv                  jy                  d8d9      d:               ZYejv                  jy                  d; e       e<      d=        ZZejv                  jy                  d>g d?      ejv                  jy                  d@g dA      ejv                  jy                  dBg dC      dD                      Z[ejv                  jy                  dej                  ej                  g      dE        Z\dF Z]dG Z^e#dH        Z_dI Z`dJ ZadK ZbdL Zcejv                  jy                  dMej                  ge7dNge7D  cg c]  } | j                   c} z   <      ejv                  jy                  dOej                  ge7dNge7D  cg c]  } | j                   c} z   <      dP               Zeejv                  jy                  de7      dQ        Zfejv                  jy                  dRej                  ge7dNge7D  cg c]  } | j                   c} z   <      dS        Zgejv                  jy                  dTdUdVg      dW        ZhdX Ziejv                  jy                  d; e       e<      dY        Zjejv                  jy                  d; e       e<      dZ        Zkyc c} w c c} w c c} w )[    N)linalgsparse)eigh)eigsh)config_context)make_low_rank_matrixmake_sparse_spd_matrix)gen_batches)_init_arpack_v0)_convert_to_numpy_get_namespace_device_dtype_ids_max_precision_float_dtypeget_namespace)yield_namespace_device_dtype_combinationsdevice)_array_api_for_testsassert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalskip_if_32bit)_approximate_mode_deterministic_vector_sign_flip_incremental_mean_and_var_randomized_eigsh_safe_accumulator_op	cartesiandensityrandomized_range_finderrandomized_svd	row_normssafe_sparse_dotsoftmaxstable_cumsumsvd_flipweighted_mode)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS_modesparse_containerc                     t         j                  j                  d      }|j                  dd      }d|d<   d|d<   t	         | |            t	        |      k(  sJ y )Nr   
   r1      size)      )r3      )nprandomRandomStaterandintr    )r/   rngXs      ^/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr@   >   sY    
 ))


"CBW%AAdGAdG#A&'71:555    c                  $   t         j                  j                  d      } | j                  dd      }t        j                  |j
                        }dD ]:  }t        ||      \  }}t        |||      \  }}t        ||       t        ||       < y )Nr   r1   r2   r4   )Nr   r6   axis)	r9   r:   r;   r<   onesshaper.   r(   r   )r=   xweightsrD   modescoremode2score2s           r?   test_uniform_weightsrM   K   s~    
))


"CBW%AggaggG *Atne%at<v4'5&)*rA   c                  |   d} t         j                  j                  d      }|j                  | d      }|j	                  |j
                        }| |d d d df<   |d d d dfxx   dz  cc<   t        ||d      \  }}t        ||        t        |j                         |d d d df   j                  d             y )N   r   d   r1   r4   r3   r6   rC   )r9   r:   r;   r<   random_samplerF   r(   r   r   ravelsum)mode_resultr=   rG   wrI   rJ   s         r?   test_random_weightsrW   Y   s     K
))


"CKi0A!''"AAa!eHa!eHMH11-KD%t[)ekkmQq"1"uX\\!_=rA   dtypec           
         d}d}d}d}| t         j                  k(  rdnd}t        j                  |       } t        |||dd      j	                  | d	
      }|j
                  ||fk(  sJ t        j                  |d	      \  }}}	|j	                  | d	
      }|j	                  | d	
      }|	j	                  | d	
      }	dD ]  }
t        |||
d      \  }}}| j                  dk(  r3|j                  | k(  sJ |j                  | k(  sJ |j                  | k(  s_J |j                  t         j                  k(  sJ |j                  t         j                  k(  sJ |j                  t         j                  k(  sJ |j
                  ||fk(  sJ |j
                  |fk(  sJ |j
                  ||fk(  sJ t        |d | ||       t        t        j                  |d d d |f   |	d |d d f         t        j                  ||      |       t        D ]  } ||      }t        |||
d      \  }}}| j                  dk(  r3|j                  | k(  sJ |j                  | k(  sJ |j                  | k(  sSJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ |j                  j                  dk(  sJ t        |d | |d | |         y )NrQ     r3   r1              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrb   fdecimal)r9   float32rX   r   astyperF   r   svdr"   kindfloat64r   dotr+   )rX   r^   r_   rankkrn   r>   UsVt
normalizerUasaVacsr_containers                  r?   'test_randomized_svd_low_rank_all_dtypesr   k   s    IJD
ABJJ&aAGHHUOE 		 fUf  77y*---- zz!51HAq" 	
U#A	U#A	5u	%B* 0F
#qZa

B ::88u$$$88u$$$88u$$$88rzz)))88rzz)))88rzz)))xxIq>)))xxA4xxAz?*** 	AbqE2w7 	FF1QU8RAY'B	

 , 	FMa A (1!JBB zzS xx5(((xx5(((xx5(((xx}}+++xx}}+++xx}}+++%4"Ud)WE!	FA0FrA   c                 0   t         j                  j                  d      }t        j                  t        j                  g d|             }t         j
                  j                  |j                  |j                              d   }||z  |j                  z  }t        |dd      \  }}|j                  d	k(  sJ t        |d
dg       |j                  dk(  sJ t        j                  t              5  t        |dd       ddd       y# 1 sw Y   yxY w)z@Test that `_randomized_eigsh` returns the appropriate components*   )      ?       r\         @rX   r4   r   r7   module)n_components	selection)r7   r   r   )   r7   valueN)r9   r:   r;   diagarrayr   qrnormalrF   Tr   r   pytestraisesNotImplementedError)rX   r=   r>   rand_roteigvalseigvecss         r?   test_randomized_eigshr      s     ))


#C
.e<=Ayy||CJJAGGJ45a8H1xzz!A )hOGW==D   gT{3==F""" 
*	+ @!!w?@ @ @s   4DDrv   )r1   2   rQ         c           	      (   d}t        |d      }t        || ddd      \  }}t        || ddddd	      \  }}t        ||| z
  |d
z
  f      \  }}|j                         ddd   }	||	   }|dd|	f   }|j                  | fk(  sJ t        ||d       t        ||d       |j                  || fk(  sJ t        j                  |      j                  }
t        ||
      \  }}t        ||
      \  }}t        ||
      \  }}t        ||d       t        ||d       | |k  rqt        |d      }t        || ddd|      \  }}|j                         ddd   }	||	   }t        ||d       |dd|	f   }t        ||
      \  }}t        ||d       yy)a&  Check that `_randomized_eigsh` is similar to other `eigsh`

    Tests that for a random PSD matrix, `_randomized_eigsh` provides results
    comparable to LAPACK (scipy.linalg.eigh) and ARPACK
    (scipy.sparse.linalg.eigsh).

    Note: some versions of ARPACK do not support k=n_features.
    r   r   rb   r      )r   r   n_iterrb      ri   )r   r   n_oversamplesrb   rk   r   r6   )subset_by_indexNrO   rm   r   LA)whichtolmaxiterv0r1      )r	   r   r   argsortrF   r   r9   
zeros_liker   r'   r   r   )rv   r_   r>   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r?   (test_randomized_eigsh_compared_to_othersr      s    Jz:A )	XbqGW /	#'J
 &*	JNJN;&"NN $$&tt,G#G,N#AwJ/N A4'''g~qAj.!D J?222w'))J':.JGQZ4MJ <NAg~qAj.!D 	:~Za8).q!Tb*
& !((*4R40'0!.."M'7
3$^Z@!..!L rA   zn,rank))r1   r[   rP   )rQ   P   )rZ   r1   )rZ      )rZ   i  c                 <   || k  sJ t         j                  j                  d      }|j                  | |      }||j                  z  }t        |||      \  }}t        t         j                  j                  |d      t        j                  |j                               t        |j                  |z  t        j                  t        j                  |j                                     |t        j                  |      z  |j                  z  }t        ||d       y)a  Check that randomized_eigsh is able to reconstruct a low rank psd matrix

    Tests that the decomposition provided by `_randomized_eigsh` leads to
    orthonormal eigenvectors, and that a low rank PSD matrix can be effectively
    reconstructed with good accuracy using it.
    E   )r   rb   r   rC   rO   rm   N)r9   r:   r;   randnr   r   r   r   normrE   rF   r   )nru   r=   r>   ASVA_reconstructs           r?   &test_randomized_eigsh_reconst_low_rankr     s    $ !8O8 ))


#C		!TA	ACCA QTDDAqbiinnQQn79IJaccAgrwwrwwqww/?'@A
NQSS(M mQ:rA   r~   c                 Z   t         j                  j                  d      j                  dd      }| t         j                  u rd}nd}|j                  | d      }|dz  j                  d	      }t        |t        |d
      |       t        t        j                  |      t        |      |       t         j                  t         j                  fD ]  } |||       }|t         j                  u rD|j                  j                  |d      |_        |j                  j                  |d      |_        |j                  j                  |k(  sJ |j                  j                  |k(  sJ t        |t        |d
      |       t        t        j                  |      t        |      |        y )Nr   rQ   r   r3   Frc   r7   r6   rC   T)squaredr   )r9   r:   r;   r   ro   rp   rT   r   r#   sqrtint32int64indptrr   rX   )rX   r~   r>   	precisionsq_normcsr_index_dtypeXcsrs          r?   test_row_normsr   ?  sW    			b!''S1A

			U#A!tjjaj GgyD'A9Mbggg.	!iHHHbhh/ 
PQe, bhh&++,,_5,IDK<<..U.KDL||!!_444{{  O333!'9T4+H)T!"'''"2IdOYO
PrA   c                  j   d} d}d}d}t        | ||dd      }|j                  | |fk(  sJ t        j                  |d	      \  }}}d
D ]h  }t	        ||d|d      \  }}}t        j                  |d | |z
        j                         dkD  sJ t	        |||d      \  }}	}t        |d | |	d       j y )NrQ   rZ   r3   r1   皙?r   r]   Fre   rg   nonerh   ri   r   rk   rb   g{Gz?rj   r8   rm   	r   rF   r   rq   r"   r9   absmaxr   
r^   r_   ru   rv   r>   r   rx   rz   r|   saps
             r?   'test_randomized_svd_low_rank_with_noiser   [  s    IJD
A 		A 77y*---- jj%0GAq!2 3
 "qzPQ
2q
 vvaebj!%%'$... #qZa
	3
 	AbqE32#3rA   c                  l   d} d}d}d}t        | ||dd      }|j                  | |fk(  sJ t        j                  |d	      \  }}}d
D ]i  }t	        ||d|d      \  }}}t        j                  |d | |z
        j                         dkD  sJ t	        ||d|d      \  }}	}t        |d | |	d       k y )NrQ   rZ   r3   r1   r   r   r]   Fre   r   r   r   r8   rm   r   r   s
             r?   !test_randomized_svd_infinite_rankr     s    IJD
A 		A 77y*---- jj%0GAq!2 3
 "qzPQ
2q
 vvaebj!%%'#--- #qzPQ
	3 	AbqE32%3rA   c            
         d} d}d}d}t        | ||dd      }|j                  | |fk(  sJ t        ||dd	d
      \  }}}t        ||ddd
      \  }}	}
t        ||ddd
      \  }}}t        j                  |d	      \  }}}t        ||d | d       t        |	|d | d       t        ||d | d       t        t        j                  ||      t        j                  |d d d |f   |d |d d f         d       t        t        j                  ||
      t        j                  |d d d |f   |d |d d f         d       t        |	|       y )NrQ   rZ   r   r1   g      ?r   r]   r8   F)r   	transposerb   Trg   re   rm   r7   )r   rF   r"   r   rq   r   r9   rt   )r^   r_   ru   rv   r>   U1s1V1U2s2V2U3s3V3U4s4V4s                    r?   )test_randomized_svd_transpose_consistencyr     sZ   IJD
A	A 77y*----1Q%aPJBB1Q$QOJBB1Q&qQJBBAU3JBBBrFA.BrFA.BrFA.r2r!RaR%y"RaRU)(DaPr2r!RaR%y"RaRU)(DaP BrA   c            	      D   t         j                  j                  d      } t        ddd|       }|d| j	                  dd|j
                  	      z  z  }d}t        ||dd
d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }t        ||dd
d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }t        j                  ||z
        dkD  sJ dD ]  }	t        ||d|	d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }dD ]  }
t        |||
|	d      \  }}}||j                  t        j                  |      j                  |            z
  }t        j                  |d      }dt        j                  ||z
        kD  rJ   y )Nr   rQ   rZ   r   r`   rb   r8   r   r7   r4   r   r   fro)ordr   )rh   ri   rg   )r3   r1   r      )r9   r:   r;   r   r<   rF   r"   rt   r   r   r   r   )r=   r>   r   rw   rx   ry   r   error_2error_20rz   ierrors               r?   .test_randomized_svd_power_iteration_normalizerr     s    ))


#CS#bsKAS[[AAGG[,	,,AL 	<fSTHAq" 	
AEE"''!*..$%%Akk!'G	<vTUHAq" 	
AEE"''!*..$%%A{{1%(H66'H$%+++* 0
!'1
1b bggajnnR())++aU+ 
	0A%+5HAq" AEE"''!*..,--AKKu-Ew////
	00rA   c                 <   t         j                  j                  d      }t        ddd|      }d} | |      }dj	                  | j
                        }t        j                  t        j                  |      5  t        ||d	d
       d d d        y # 1 sw Y   y xY w)Nr   r   r   r1   r   r3   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.matchr6   r   )r   rk   )r9   r:   r;   r   format__name__r   warnsr   SparseEfficiencyWarningr"   )r/   r=   r>   r   warn_msgs        r?   #test_randomized_svd_sparse_warningsr     s     ))


#CRBSIALAMTT%%	
 
 
f44H	E Uq,qVTU U Us   9BBc                     t         j                  j                  d      } d}d}| j                  ||      }t	        j
                  |d      \  }}}t        ||d      \  }}t        t        j                  ||z  |      |d       |j                  }	t	        j
                  |	d      \  }}}t        ||d	      \  }
}t        t        j                  |
|z  |      |	d       t        ||d	      \  }}t        t        j                  ||z  |      |	d       t        ||d      \  }}t        t        j                  ||z  |      |	d       y )
N  r   r1   Fre   u_based_decisionrO   rm   T)
r9   r:   r;   r   r   rq   r'   r   rt   r   )rsr^   r_   r>   rw   r   ry   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r?   test_svd_flipr    s!   			t	$BIJ
J'A zz!51HAq"ae4FBrAvr*Aq9 
Bzz"E2HAq"ad3FBrAvr*B:  2=GWw{G4b!D2>GWw{G4b!DrA   zn_samples, n_features)r8   r   )r   r8   c                 p   t         j                  j                  |      }|j                  | |      }t	        j
                  |d      \  }}}t        ||d      \  }}t        j                  t        j                  |      d      }	||	t        j                  |j                  d         f   dk\  j                         sJ t        ||d      \  }}
t        j                  t        j                  |
      d      }|
t        j                  |
j                  d         |f   dk\  j                         sJ y )NFre   Tr   r   rC   r6   )r9   r:   r;   r   r   rq   r'   argmaxr   arangerF   all)r^   r_   global_random_seedr   r>   rw   r   ry   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rows               r?   test_svd_flip_max_abs_colsr  $  s    			1	2B
J'Azz!51HAq"QT2EB!#266":A!>)299RXXa[+AABaGLLNNNQU3EAr!#266":A!>ryy!%'AABaGLLNNNrA   c                     t        j                  ddgddgg      } t        | ddd      \  }}}t        d      D ]  }t        | dd|      \  }}}t	        ||       t	        ||       t	        t        j
                  ||z  |      |        t	        t        j
                  |j                  |      t        j                  d             t	        t        j
                  |j                  |      t        j                  d              y )	Ng       @r\   r   r7   T)   	flip_signrb   r1   )r9   r   r"   ranger   rt   r   eye)au1r   v1seedu2r   v2s           r?   test_randomized_svd_sign_flipr  3  s    
3*sCj)*A12FJBBb	 9#AqDtL
BB#B#BFF27B/3BFF244,bffQi8BFF244,bffQi89rA   c                      d } t        j                  d      j                  dd      }t        |ddd      \  }}} | ||      \  }}|sJ |rJ t        |dddd	      \  }}} | ||      \  }}|sJ |rJ y )
Nc                 "   t        j                  |       j                  d      | j                  d      k(  j                         }t        j                  |      j                  d      |j                  d      k(  j                         }||fS )z
        returns bool tuple indicating if the values maximising np.abs
        are positive across all rows for u and across all columns for v.
        r   rC   r6   )r9   r   r   r  )uvu_basedv_baseds       r?   max_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiveD  so    
 66!9==a=(AEEqEM9>>@66!9==a=(AEEqEM9>>@rA   r   r1   r   r8   Tr   r  )r  r   rb   )r9   r  reshaper"   )	r   mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r?   ,test_randomized_svd_sign_flip_with_transposer'  ?  s    
  ))F

#
#B
+C -S!tRSTIq).y)DGWN7; =KQ$$Q=9a!9 / ":GW N7;wrA   r   )r   rQ   ,  m)r1   r   r   r  r3   c                    t         j                  j                  |      }|j                  | |      }t	        ||dd      \  }}}t	        ||dd      \  }	}
}|j
                  |	j
                  k(  sJ t        ||	dd       |j
                  |
j
                  k(  sJ t        ||
dd       |j
                  |j
                  k(  sJ t        ||dd       y )Ngesddr   )svd_lapack_driverrb   gesvdgMbP?)atolrtol)r9   r:   r;   randr"   rF   r   )r   r)  rv   r  r=   r>   r  r   vt1r  r   vt2s               r?   !test_randomized_svd_lapack_driverr3  `  s     ))


%CAA !AqQKBC AqQKBC 88rxxB.88rxxB.99		!!!C140rA   c                     t        j                  g d      t        j                  ddg      t        j                  ddg      f} t        j                  g dg dg dg d	g d
g dg dg dg dg dg dg dg      }t        |       }t        ||       t        j                  d      }t        |d d t         j
                  f   t        |f             y )Nr6   r7   r8   r   r3   rO   r[   )r6   r   rO   )r6   r   r[   )r6   r3   rO   )r6   r3   r[   )r7   r   rO   )r7   r   r[   )r7   r3   rO   )r7   r3   r[   )r8   r   rO   )r8   r   r[   )r8   r3   rO   )r8   r3   r[   r8   )r9   r   r   r   r  newaxis)axestrue_outoutrG   s       r?   test_cartesianr:  z  s     HHY1a&!1288QF3CDDxx	
H" D/Cx% 			!AqBJJ'A49rA   zarrays, output_dtyper5  r   r   rG   yc                 <    t        |       }|j                  |k(  sJ y)z8Check that the cartesian product works with mixed types.N)r   rX   )arraysoutput_dtypeoutputs      r?   test_cartesian_mix_typesr@    s     & vF<<<'''rA   as_list)TFc                    t         j                  j                  d      }d}|j                  dd      j	                  |       |z  }|j                  |j
                  d         |z  }|r|j                         n|}t        |ddd|      \  }}}	t        j                  ||d      }
t        j                  |dz  |d      |
dz  z
  }t        ||
       t        ||       y )	Nr   r1     r   r   sample_weightrH   rD   r7   )
r9   r:   r;   r0  rp   rF   tolistr   averager   )rX   rA  r=   multr>   rE  X1meanvarr   expected_meanexpected_vars               r?   2test_incremental_weighted_mean_and_variance_simplerO    s     ))


#CDr!!%(4/AHHQWWQZ(4/MAB,RAqVLD#qJJq-a@M::adMB]TUEUULm,\*rA   zarray_namespace, device, dtype)idsc                    t        | |      }t        j                  j                  d      }d}|j	                  dd      j                  |      |z  }|j	                  |j                  d         j                  |      |z  }t        |ddd|      \  }}	}
|j                  ||      }|j                  ||      }t        d	      5  t        |ddd|      \  }}}
d d d        t              t        |      k(  sJ |j                  t        ||      k(  sJ t              t        |      k(  sJ |j                  t        ||      k(  sJ t        ||
      }t        ||
      }t        ||       t        |	|       y # 1 sw Y   xY w)Nr   r1   rC  r   r   rD  r   Tarray_api_dispatch)xp)r   r9   r:   r;   r0  rp   rF   r   asarrayr   array_devicerX   r   r   r   )array_namespacer   rX   rT  r=   rI  r>   rE  rK  rL  r   X_xpsample_weight_xpmean_xpvar_xps                  r?   5test_incremental_weighted_mean_and_variance_array_apir\    sx    
ov	6B
))


#CDr!!%(4/AHHQWWQZ(//6=M,Q1a}ULD#q::a:'Dzz-z?	4	0 
6!Q)9

  L$6666==6r&IIII<#5555<<5bHHHHB/Gv"-FD'"C !
 
s   FFrK  )r       cAg    crL  )r6   :0yE>g     j@zweight_loc, weight_scale))r   r6   )r   r^  )r6   r^  )r1   r6   )r]  r6   c                    t         j                  j                  d      }d }d}|j                  |||d         }|j                  | ||      }t	        t         j
                  ||d      }	t	        t         j
                  ||	z
  dz  |d      }
 ||||	|
       |j                  | ||      }t        j                  |d         }t	        t         j                  |d      }	t	        t         j                  |d      }
 ||||	|
       y )	Nr   c           
          | j                   d   }d|dz  dz   |dz  dz   |dz  dz   |fD ]M  }d\  }}}t        ||      D ]  }	t        | |	   |||||	         \  }}} t        ||       t        ||d	       O y )
Nr   r6   r1   r   r7   )r   r   r   rD  ư>r.  )rF   r
   r   r   )
r>   rE  rM  rN  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r?   _assertz<test_incremental_weighted_mean_and_variance.<locals>._assert  s    GGAJa2gk16A:qAvz1E 	?J3:0I$Q
3 7PeH#"/"684	8_ I}5Hl>	?rA   )rQ   r   r   )locscaler5   rF  r7   rC   )	r9   r:   r;   r   r   rH  rE   rK  rL  )rK  rL  
weight_locweight_scaler=   rh  r5   weightr>   rM  rN  ones_weights               r?   +test_incremental_weighted_mean_and_variancero    s     ))


#C? DZZJlaZIF 	

t3T
2A(QQOM'


Q&1,f1L Av}l3 	

t3T
2A''$q'"K(!!<M':LA{M<8rA   c           	         t        j                  g d      }t        j                  g d      }t        j                  g dt         j                        }t        j                  d      }t        j                  d      }t        j                  g dg dg d	g      j	                  |       }t        j                  d
t         j
                  d
d
gt         j
                  d
ddgddt         j
                  dgdddt         j
                  gg      j	                  |       }t        |||||      \  }}	}
t        |||||      \  }}}t        ||       t        ||	       t        ||
       y )N     @rr  rr  rr       @rt  rt  rt  r7   r7   r7   r7   r   r8   r      rw  rw  rw    ry  ry  ry  r(  r(  r(  r(  rw  ry  r(  rD  )r9   r   r   rE   rp   nanr   r   )rX   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr>   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r?   6test_incremental_weighted_mean_and_variance_ignore_nanr    s;   56IHH=>MXXl"((;Nwwqz771:
	35IJ	fUm  HH"&&#s#VVS#s##rvvs##sBFF#		
 fUm 
 %>	9m^CS%!G[' 1J*1-K+ K)O[1K)rA   c                     t        j                  g dg dg dg dg      j                  } d}| d |d d f   }| |d d d f   }|j                  d      }|j	                  d      }t        j
                  |j                  d   |j                  d   t         j                        }t        ||||      \  }}}	t        || j                  d      d       t        || j	                  d      d       t        |	| j                  d          y )N)iX  i  rw  ry  r(  r7   r   rC   r6   r   rO   )
r9   r   r   rK  rL  fullrF   r   r   r   )
r   idxrJ  X2r|  r}  old_sample_countfinal_meansfinal_variancesfinal_counts
             r?   )test_incremental_variance_update_formulasr  5  s     	%%%%		
	 a  C	
4C47B	
347BQIFFFNMwwrxx{BHHQKrxxH0I
I}&61-K+ QVVV^Q7A:QWWQZ0rA   c            	      <   t        j                  g d      } t        j                  g d      }t        j                  g dt         j                        }t        j                  g dg dg dg      }t        j                  dt         j                  ddgt         j                  dd	d	gd	d	t         j                  d
gd
d
d
t         j                  gg      }t	        || ||      \  }}}t	        || ||      \  }}	}
t        ||       t        |	|       t        |
|       y )Nrq  rs  ru  r   rv  rx  rz  rw  ry  r(  )r9   r   r   r{  r   r   )r|  r}  r  r>   r  r  r  r  r  r  r  s              r?   -test_incremental_mean_and_variance_ignore_nanr  O  s    56IHH=>MxxBHH=
&(<>RSTAHH"&&#s#VVS#s##rvvs##sBFF#		
E %>	9m%5%!G[' 1Jy-)91-K+ K)O[1K)rA   c                     d } d }d }d }d}d}d}t        j                  dt         j                  	      }t        j                  d
t         j                  	      }t        j                  |dz  |f|t         j                  	      }	t        j                  |dz  |f|t         j                  	      }
t        j
                  |	|
f      }t        j                   | |       ||      z
        j                         |kD  sJ |	dd d f   t        j                  |      |dz  }}}t        |
j                  d         D ]  } ||
|d d f   |||      \  }}} ||j                  d   k(  sJ t        j                  |j                  d      |z
        j                         dkD  sJ t        j                   | |      |z
        j                         |kD  sJ |	dd d f   t        j                  |      }}t        j                  ||dz  t         j                  	      }t        |
j                  d         D ]9  }t        |
|d d f   j                  d|
j                  d   f      |||      \  }}}; t        ||j                  d          t!        |j                  d      |       |t        j                   | |      |z
        j                         kD  sJ y )Nc                 &    | j                  d      S )Nr   rC   )rL  )r   s    r?   np_varz=test_incremental_variance_numerical_stability.<locals>.np_varo  s    uu!u}rA   c                     | j                   d   }| dz  j                  d      |z  }| j                  d      |z  dz  }||z
  S )Nr   r7   rC   )rF   rT   )r>   r   exp_x2expx_2s       r?   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_vart  sK    GGAJQ$#a'%%Q%-!#)rA   c                     | j                  d      }| j                         }t        j                   ||z
  dz  d      S )Nr   rC   r7   )rK  rd   r9   )r>   rK  Ys      r?   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_var}  s5    vv1v~FFHwwDQQ//rA   c                 p    |dz   }|t        |      z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr6   )float)rG   rd  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r?   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_update  sm    014)E2F,GG//)m2KKM)9}\!125IIJ 	 -/CCCrA   r   r7   i'  g    חAr   h㈵>r   rC   ra  r6   )r9   r   rs   logr  vstackr   r   zerosr  rF   rK  r   r   r!  r   r   )r  r  r  r  r   r_   r^   x1x2A0A1r   rK  rL  r   r   s                   r?   -test_incremental_variance_numerical_stabilityr  k  su   
0D CJI	#RZZ	(B	BJJ	'B	)q.*-r	DB	)q.*-r	DB
		2r(A 66&)l1o-.224s:::
 ad8RXXj19>q#D288A; J1"QT(D#qIc1J
??66!&&a&.4'(,,.55566&)c/"&&(3... 1a4"((:.#D

IN"((;A288A; 
0q!tHa!-.c1
c1
 q!''!*%aff!fnd3q	C(,,....rA   c                  |   t         j                  j                  d      } | j                  dd      }|j                  \  }}dD ]v  }t        j
                  d|j                  d   |      }|d   |j                  d   k7  rt        j                  ||g      }t        j                  |      D ]
  \  }}|||d d f   }|dk(  rt|j                  d      }	|j                  d      }
|j                  d   }t        j                  |j                  d   |j                  d   t         j                  	      }n&t        |	
      }|\  }	}
}||j                  d   z  }t        j                  |d | d      }t        j                  |d | d      }t        |	|d
       t        |
|d
       t        ||        y y )Nr   r   r1   )   r   %   r   r   rC   r6   r   rO   )r9   r:   r;   r   rF   r  hstack	itertoolspairwiserK  rL  r  r   r   r   r   )r=   r>   r^   r_   
batch_sizestepsr   jrg  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r?   test_incremental_variance_ddofr    s   
))


%C		"bAGGIz" @
		!QWWQZ49
"IIui01E&&u- 	@DAqac1fIEAv$)JJAJ$6!(-		q	(9%$)KKN!!wwu{{1~u{{1~RXXV2,.C\ QWM"$9;LA.!wwq!u15#%66!BQ%a#8  13CQG 57KQO0,?'	@@rA   c                     t         j                  j                  d      j                  dd      } t        j                  t        j
                  |       d      }t        |       }t        j                  |d      }t        ||       t        j                  | t        | j                  d         |f         }t        | ||d d t         j                  f   z         y )N$   r3   r6   rC   r   )r9   r:   r;   r   r  r   r   r   signr  rF   r6  )datamax_abs_rowsdata_flippedmax_rowssignss        r?   test_vector_sign_flipr    s    99  $**1a0D99RVVD\2L248LyyA.H|X.GGDtzz!}-|;<=Et\E!RZZ-,@@ArA   c                     t         j                  j                  d      } | j                  dd      }t        j                  |      }t        j
                  |d      j                  d      }t        t        |      ||z         y )Nr   r8   r3   r6   rC   )r   r6   )	r9   r:   r;   r   exprT   r!  r   r%   )r=   r>   exp_X	sum_exp_Xs       r?   test_softmaxr    s`    
))


"C		!QAFF1IEu1%--g6Igaj%)*;<rA   c                  ~    t        j                  t        d      5  t        g d       d d d        y # 1 sw Y   y xY w)Nzstable_cumsum.+is deprecatedr   r5  )r   r   FutureWarningr&    rA   r?   test_stable_cumsum_deprecationr    s.    	m+I	J !i ! ! !s   3<A_containerdenseB_containerc                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      } ||      }t        ||d      }t        ||       y )Nr      r1   )r1   r   Tdense_outputr9   r:   r;   rR   rt   r$   r   )r  r  r=   r   Bexpectedactuals          r?   test_safe_sparse_dot_2dr    sq     ))


"C(#A(#Avva|HAAAAQ5FFH%rA   c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       |j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       y )Nr   )r7   r8   r   r3   rO   )rO   r[   )r7   r8   )r   r3   r8   rO   r  )r~   r=   r   r  r  r  s         r?   test_safe_sparse_dot_ndr    s    
))


"C 	/*A&!Avva|HaAQ"FFH% 	&!A,'Avva|HaAQ"FFH%rA   	containerc                 x   t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      }t         | |      |      }t        ||       |j                  d      }t        j                  ||      }t        | | |            }t        ||       y )Nr   r1   r  )r1   r  r  )r  r=   r  r   r  r  s         r?   test_safe_sparse_dot_2d_1dr    s     ))


"C2A 	(#Avva|HYq\1-FFH% 	(#Avva|HQ	!-FFH%rA   r  TFc                 V   t         j                  j                  d      }t        j                  ddd|      }t        j                  ddd|      }|j	                  |      }t        |||       }t        j                  |      |  k(  sJ | r|j                         }t        ||       y )Nr   r  r1   r   )r    rb   r   r  )	r9   r:   r;   r   rt   r$   issparsetoarrayr   )r  r=   r   r  r  r  s         r?   !test_safe_sparse_dot_dense_outputr  /  s    
))


"Cb"c<Ab"c<AuuQxHQ=F??6"<'7888##% 2rA   c                      t        j                  ddgt         j                        } t        | dd      }t	        |ddg       y	)
a  Make sure sklearn.utils.extmath._approximate_mode returns valid
    results for cases where "class_counts * n_draws" is enough
    to overflow 32-bit signed integer.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20774
    i rC  r   ia  r   )class_countsn_drawsr=   i`  r   N)r9   r   r   r   r   )r>   rets     r?   test_approximate_moder  @  s:     	%bhh/A
Eq
AC
 sUCL)rA   c                    t        | |      }t        j                  j                  d      }|j	                  d      j                  |      }|j                  ||      }d}|dk(  rdnd}t        d	      5  t        ||d
      \  }	}
}t        ||d
      \  }}}t        |      d   j                  |j                  k(  sJ t        |      d   j                  |j                  k(  sJ t        |      d   j                  |j                  k(  sJ t        t        ||      |	|       t        t        ||      |
|       t        t        ||      ||       d d d        y # 1 sw Y   y xY w)Nr   r  r4   r   r3   ro   r  TrR  r   rb  )r   r9   r:   r;   r   rp   rU  r   r"   r   r   r   r   )rW  r   rX   rT  r=   r>   rX  r   r.  u_nps_npvt_npu_xps_xpvt_xps                  r?   (test_randomized_svd_array_api_compliancer  Q  sQ    
ov	6B
))


"C


!((/A::a:'DLI%41D	4	0 
H*1lKdE*4ANdET"1%.."++===T"1%.."++===U#A&//2;;>>>)$3TE)$3TE)%4e$G
H 
H 
Hs   7C"E""E+c                    t        | |      }t        j                  j                  d      }|j	                  d      j                  |      }|j                  ||      }d}d}|dk(  rdnd}	t        d	
      5  t        |||d      }
t        |||d      }t        |      d   j                  |j                  k(  sJ t        t        ||      |
|	       d d d        y # 1 sw Y   y xY w)Nr   r  r4   r   r3   r1   ro   r  TrR  )r5   r   rb   rb  )r   r9   r:   r;   r   rp   rU  r   r!   r   r   r   r   )rW  r   rX   rT  r=   r>   rX  r5   r   r.  Q_npQ_xps               r?   1test_randomized_range_finder_array_api_compliancer  l  s     
ov	6B
))


"C


!((/A::a:'DDFI%41D	4	0 F&qtFQRS&t$vTUVT"1%.."++===)$3TEF F Fs   9AC  C))lr  numpyr9   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   sklearnr   sklearn.datasetsr   r	   sklearn.utilsr
   sklearn.utils._arpackr   sklearn.utils._array_apir   r   r   r   r   r   rV  sklearn.utils._testingr   r   r   r   r   r   r   sklearn.utils.extmathr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   sklearn.utils.fixesr)   r*   r+   r,   r-   r.   markparametrizer@   rM   rW   r   r   ro   rs   r   r   r   r   r   r   r   r   r   r   r  r  r  r'  r  r3  r:  r   rX   objectr@  rO  r\  ro  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  )r  s   0r?   <module>r	     s         % " I % 1       "  ^#n4~E6	6*>$ 288RXXrzz2::"NOLF PLF^ 288RXXrzz2::"NO@ P@, 56DM 7DMN 
;
;4 2::rzz":;.9P : <P4&3R&3R @*0Z +^n-LMU NU E2 0662BCO DO	9B n-n-l+q*1 + , . .1,:<  RXXirxx0("((Aq62RSBHHRXX	

 RXXirxx0("((Aq62TUBHHRZZ 	

 RXXirxx0("((C:V2TUBHHV	
"(#"( 2::rzz":;M2+ 3 <+ $-/'  
!
!@ 0/ Q#9 0 1
#9L 2::rzz":;!* <!*H14*8 E/ E/P@@B=!
 XX		HIY''HH  
 XX		HIY''HH  
&& .9& :&( XX		HIY''HH  
&
&" $73 83 *" $-/'  
H
H, $-/'  
F
FE I
 IP Is   *[ 0[#[
