
    {Kgْ              
       j   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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%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ejb                  je                  de+e,z   e-z   e/z         d        Z3d Z4d Z5ejb                  je                  dejl                  ejn                  ejp                  ejr                  f      d        Z:ejb                  je                  dejl                  ejn                  ejp                  ejr                  f      d        Z;ejb                  je                  dd      d        Z<ejb                  je                  dg d      d        Z=ejb                  je                  dejp                  ejr                  f      ejb                  je                  de-      d               Z>d Z?d Z@d ZAd ZBejb                  je                  de.e/z         d        ZCd  ZDejb                  je                  d!d"d#g      d$        ZEd% ZFd& ZGejb                  je                  d'g d(      ejb                  je                  d)g d(      ejb                  je                  dg d*      ejb                  je                  d+ eHd,            d-                             ZId. ZJejb                  je                  d/ ej                  g d0ejl                  1       ej                  d2d,gejn                  1      g ej                  ejn                        f ej                  g d0ejl                  1       ej                  d2d,gejr                  1      g ej                  ejr                        f ej                  g d0ejl                  1       ej                  d3d4geM1      g ej                  eM      fg      d5        ZNd6 ZO ej                         d7        ZQejb                  je                  dejp                  ejr                  g      d8        ZRejb                  je                  d9g d:      ejb                  je                  d;g d<      ejb                  je                  d=g d>      d?                      ZSejb                  je                  dejp                  ejr                  g      d@        ZTdA ZUdB ZVedC        ZWdD ZXdE ZYdF ZZdG Z[ejb                  je                  dHej                  ge-dIge-D  cg c]  } | j                   c} z   J      ejb                  je                  dKej                  ge-dIge-D  cg c]  } | j                   c} z   J      dL               Z]ejb                  je                  de-      dM        Z^ejb                  je                  dNej                  ge-dIge-D  cg c]  } | j                   c} z   J      dO        Z_ejb                  je                  dPdQdRg      dS        Z`dT Zayc c} w c c} w c c} w )U    N)linalgsparse)eigh)eigsh)expit)make_low_rank_matrixmake_sparse_spd_matrix)gen_batches)_init_arpack_v0)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log_logistic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   
   r)      size)      )r+      )nprandomRandomStaterandintr   )r'   rngXs      d/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr8   3   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   r)   r*   r,   )Nr   r.   axis)	r1   r2   r3   r4   onesshaper&   r    r   )r5   xweightsr<   modescoremode2score2s           r7   test_uniform_weightsrE   @   sy    
))


"CBW%AggaggGAtne%at<v4'5&) r9   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   r)   r,   r+   r.   r;   )r1   r2   r3   r4   random_sampler>   r    r   r   ravelsum)mode_resultr5   r?   wrA   rB   s         r7   test_random_weightsrO   N   s     K
))


"CKi0A!''"AAa!eHa!eHMH11-KD%t[)ekkmQq"1"uX\\!_=r9   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 )NrI     r+   r)              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrZ   fdecimal)r1   float32rP   r   astyper>   r   svdr   kindfloat64r   dotr#   )rP   rV   rW   rankkrf   r6   UsVt
normalizerUasaVacsr_containers                  r7   'test_randomized_svd_low_rank_all_dtypesrw   `   s    IJD
ABJJ&aAGHHUOE 		 fUf  77y*---- zz!51HAq" 	
U#A	U#A	5u	%B*
#qZa

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

 ,Ma A (1!JBB zzS xx5(((xx5(((xx5(((xx}}+++xx}}+++xx}}+++%4"Ud)WE! ,A +r9   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*   )      ?       rT         @rP   r,   r   r/   module)n_components	selection)r/   r|   r{   )   r/   valueN)r1   r2   r3   diagarrayr   qrnormalr>   Tr   r   pytestraisesNotImplementedError)rP   r5   r6   rand_roteigvalseigvecss         r7   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rn   )r)   2   rI         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   )rZ   r~      )r   r   n_iterrZ      ra   )r   r   n_oversamplesrZ   rc   r   r.   )subset_by_indexNrG   re   r   LA)whichtolmaxiterv0r)      )r	   r   r   argsortr>   r   r1   
zeros_liker   r   r   r   )rn   rW   r6   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r7   (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 r9   zn,rank))r)   rS   rH   )rI   P   )rR   r)   )rR      )rR   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   rZ   r   r;   rG   re   N)r1   r2   r3   randnr   r   r   r   normr=   r>   r   )nrm   r5   r6   ASVA_reconstructs           r7   &test_randomized_eigsh_reconst_low_rankr     s    $ !8O8 ))


#C		!TA	ACCA QTDDAqbiinnQQn79IJaccAgrwwrwwqww/?'@A
NQSS(M mQ:r9   rv   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 )Nry   rI   r   r+   Fr[   r/   r.   r;   T)squaredr}   )r1   r2   r3   r   rg   rh   rL   r   r   sqrtint32int64indptrr   rP   )rP   rv   r6   	precisionsq_normcsr_index_dtypeXcsrs          r7   test_row_normsr   4  sP    			b!''S1A

			U#A!tjjaj GgyD'A9Mbggg.	!iHHHbhh/Qe, bhh&++,,_5,IDK<<..U.KDL||!!_444{{  O333!'9T4+H)T!"'''"2IdOYO 0r9   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 )NrI   rR   r+   r)   皙?r   rU   Fr]   r_   noner`   ra   r   rc   rZ   g{Gz?rb   r0   re   	r   r>   r   ri   r   r1   absmaxr   
rV   rW   rm   rn   r6   r   rp   rr   rt   saps
             r7   'test_randomized_svd_low_rank_with_noiser   P  s    IJD
A 		A 77y*---- jj%0GAq!2
 "qzPQ
2q
 vvaebj!%%'$... #qZa
	3
 	AbqE32# 3r9   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 )NrI   rR   r+   r)   rz   r   rU   Fr]   r   r   r   r0   re   r   r   s
             r7   !test_randomized_svd_infinite_rankr   y  s    IJD
A 		A 77y*---- jj%0GAq!2
 "qzPQ
2q
 vvaebj!%%'#--- #qzPQ
	3 	AbqE32% 3r9   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 )NrI   rR   r   r)   g      ?r   rU   r0   F)r   	transposerZ   Tr_   r]   re   r/   )r   r>   r   r   ri   r   r1   rl   )rV   rW   rm   rn   r6   U1s1V1U2s2V2U3s3V3U4s4V4s                    r7   )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r9   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 )Nry   rI   rR   r   rX   rZ   r0   r   r/   r,   r   r   fro)ordr   )r`   ra   r_   )r+   r)   r      )r1   r2   r3   r   r4   r>   r   rl   r   r   r   r   )r5   r6   r   ro   rp   rq   r   error_2error_20rr   ierrors               r7   .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$%+++*
!'1
1b bggajnnR())++aU+A%+5HAq" AEE"''!*..,--AKKu-Ew////  +r9   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)Nry   r   r   r)   r   r+   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.matchr.   r   )r   rc   )r1   r2   r3   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r'   r5   r6   r   warn_msgs        r7   #test_randomized_svd_sparse_warningsr     s     ))


#CRBSIALAMTT%%	
 
 
f44H	Eq,qVT 
F	E	Es   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   r)   Fr]   u_based_decisionrG   re   T)
r1   r2   r3   r   r   ri   r   r   rl   r   )rsrV   rW   r6   ro   r   rq   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r7   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!Dr9   zn_samples, n_features)r0   r   )r   r0   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 )NFr]   Tr   r   r;   r.   )r1   r2   r3   r   r   ri   r   argmaxr   aranger>   all)rV   rW   global_random_seedr   r6   ro   r   rq   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rows               r7   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Nr9   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       @rT   rz   r/   T)   	flip_signrZ   r)   )r1   r   r   ranger   rl   r   eye)au1r   v1seedu2r   v2s           r7   test_randomized_svd_sign_flipr  (  s    
3*sCj)*A12FJBBb	#AqDtL
BB#B#BFF27B/3BFF244,bffQi8BFF244,bffQi8 r9   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   r;   r.   )r1   r   r   r   )uvu_basedv_baseds       r7   max_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive9  so    
 66!9==a=(AEEqEM9>>@66!9==a=(AEEqEM9>>@r9   r   r)   r   r0   Tr   r  )r  r   rZ   )r1   r   reshaper   )	r  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r7   ,test_randomized_svd_sign_flip_with_transposer  4  s    
  ))F

#
#B
+C -S!tRSTIq).y)DGWN7; =KQ$$Q=9a!9 / ":GW N7;wr9   r   )r   rI   ,  m)r)   r   r   r  r+   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_driverrZ   gesvdgMbP?)atolrtol)r1   r2   r3   randr   r>   r   )r   r   rn   r  r5   r6   r  r   vt1r  r   vt2s               r7   !test_randomized_svd_lapack_driverr*  U  s     ))


%CAA !AqQKBC AqQKBC 88rxxB.88rxxB.99		!!!C140r9   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r.   r/   r0   r   r+   rG   rS   )r.   r   rG   )r.   r   rS   )r.   r+   rG   )r.   r+   rS   )r/   r   rG   )r/   r   rS   )r/   r+   rG   )r/   r+   rS   )r0   r   rG   )r0   r   rS   )r0   r+   rG   )r0   r+   rS   r0   )r1   r   r   r   r   newaxis)axestrue_outoutr?   s       r7   test_cartesianr1  o  s     HHY1a&!1288QF3CDDxx	
H" D/Cx% 			!AqBJJ'A49r9   zarrays, output_dtyper,  r}   r   r?   yc                 <    t        |       }|j                  |k(  sJ y)z8Check that the cartesian product works with mixed types.N)r   rP   )arraysoutput_dtypeoutputs      r7   test_cartesian_mix_typesr7    s     & vF<<<'''r9   c                     d } t        j                  ddd      }d}t        j                  t        |      5  t        t        |       | |             d d d        t        j                  ddg      }t        j                  t        |      5  t        t        |      d	d
g       d d d        y # 1 sw Y   \xY w# 1 sw Y   y xY w)Nc                 >    t        j                  t        |             S )N)r1   logr   )r?   s    r7   naive_log_logisticz1test_logistic_sigmoid.<locals>.naive_log_logistic  s    vveAhr9   r/   r   z0`log_logistic` is deprecated and will be removedr   g      Yg      Y@ir   )r1   linspacer   r   FutureWarningr   r   r   )r;  r?   r   	extreme_xs       r7   test_logistic_sigmoidr@    s      	B2AAH	m8	4!,q/3Ea3HI 
5 &%)I	m8	4!,y"9D!9E 
5	4	 
5	4 
5	4s   B/B;/B8;Cc                  @    t         j                  j                  d      S )Nry   )r1   r2   r3    r9   r7   r5   r5     s    99  $$r9   c                 \   d}| j                  dd      j                  |      |z  }| j                  |j                  d         |z  }t        |ddd|      \  }}}t	        j
                  ||d      }t	        j
                  |dz  |d      |dz  z
  }	t        ||       t        ||	       y )Nr)     r   r   sample_weightr@   r<   r/   )r'  rh   r>   r   r1   averager   )
r5   rP   multr6   rF  meanvarr   expected_meanexpected_vars
             r7   2test_incremental_weighted_mean_and_variance_simplerN    s    Dr!!%(4/AHHQWWQZ(4/M,Q1a}ULD#qJJq-a@M::adMB]TUEUULm,\*r9   rJ  )r       cAg    crK  )r.   :0yE>g     j@zweight_loc, weight_scale))r   r.   )r   rP  )r.   rP  )r)   r.   )rO  r.   c                    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 )Nc           
          | 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   r.   r)   r   r/   )r   r   r   rE  ư>)r%  )r>   r
   r   r   )
r6   rF  rL  rM  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r7   _assertz<test_incremental_weighted_mean_and_variance.<locals>._assert  s    GGAJa2gk16A:qAvz1EJ3:0I$Q
37PeH#"/"684	8_ 4 I}5Hl> Fr9   )rI   r   r   )locscaler-   rG  r/   r;   )r   r   r1   rH  r=   rJ  rK  )rJ  rK  
weight_locweight_scaler5   rY  r-   weightr6   rL  rM  ones_weights               r7   +test_incremental_weighted_mean_and_variancer`    s    ? 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<8r9   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     @rc  rc  rc       @re  re  re  r/   r/   r/   r/   r}   r0   r      rh  rh  rh    rj  rj  rj  r  r  r  r  rh  rj  r  rE  )r1   r   r   r=   rh   nanr   r   )rP   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr6   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r7   6test_incremental_weighted_mean_and_variance_ignore_nanry    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)r9   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  rh  rj  r  r/   r   r;   r.   r}   rG   )
r1   r   r   rJ  rK  fullr>   r   r   r   )
r   idxX1X2rm  rn  old_sample_countfinal_meansfinal_variancesfinal_counts
             r7   )test_incremental_variance_update_formulasr    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0r9   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 )Nrb  rd  rf  r}   rg  ri  rk  rh  rj  r  )r1   r   r   rl  r   r   )rm  rn  r  r6   rr  rs  rt  ru  rv  rw  rx  s              r7   -test_incremental_mean_and_variance_ignore_nanr  1  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)r9   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   r;   )rK  )r   s    r7   np_varz=test_incremental_variance_numerical_stability.<locals>.np_varQ  s    uu!u}r9   c                     | j                   d   }| dz  j                  d      |z  }| j                  d      |z  dz  }||z
  S )Nr   r/   r;   )r>   rL   )r6   r   exp_x2expx_2s       r7   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_varV  sK    GGAJQ$#a'%%Q%-!#)r9   c                     | j                  d      }| j                         }t        j                   ||z
  dz  d      S )Nr   r;   r/   )rJ  r\   r1   )r6   rJ  Ys      r7   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_var_  s5    vv1v~FFHwwDQQ//r9   c                 p    |dz   }|t        |      z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr.   )float)r?   rU  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r7   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updateg  sm    014)E2F,GG//)m2KKM)9}\!125IIJ 	 -/CCCr9   r   r/   i'  g    חAr}   gh㈵>r   r;   rS  r.   )r1   r   rk   r:  r{  vstackr   r   zerosr  r>   rJ  r   r   r  r   r   )r  r  r  r  r   rW   rV   x1x2A0A1r   rJ  rK  r   r   s                   r7   -test_incremental_variance_numerical_stabilityr  M  si   
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;1"QT(D#qIc1  
??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(,,....r9   c                  v   t         j                  j                  d      } | j                  dd      }|j                  \  }}dD ]s  }t        j
                  d|j                  d   |      }|d   |j                  d   k7  rt        j                  ||g      }t        |d d |dd        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        ||        v y )Nr   r   r)   )   r   %   r   r   r.   r;   r}   rG   )r1   r2   r3   r   r>   r   hstackziprJ  rK  r{  r   r   r   r   )r5   r6   rV   rW   
batch_sizestepsr   jrX  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r7   test_incremental_variance_ddofr    s   
))


%C		"bAGGIz"
		!QWWQZ49
"IIui01Ecr
E!"I.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,?' / #r9   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$   r+   r.   r;   r   )r1   r2   r3   r   r   r   r   r   signr  r>   r-  )datamax_abs_rowsdata_flippedmax_rowssignss        r7   test_vector_sign_flipr    s    99  $**1a0D99RVVD\2L248LyyA.H|X.GGDtzz!}-|;<=Et\E!RZZ-,@@Ar9   c                     t         j                  j                  d      } | j                  dd      }t        j                  |      }t        j
                  |d      j                  d      }t        t        |      ||z         y )Nr   r0   r+   r.   r;   )r   r.   )	r1   r2   r3   r   exprL   r  r   r   )r5   r6   exp_X	sum_exp_Xs       r7   test_softmaxr    s`    
))


"C		!QAFF1IEu1%--g6Igaj%)*;<r9   c                     t        t        g d      t        j                  g d             t        j                  j                  d      j                  d      } t        j                  t              5  t        | dd       d d d        t        j                  j                  d      j                  dd      }t        t        |d	      t        j                  |d	             t        t        |d
	      t        j                  |d
	             t        t        |d	      t        j                  |d	             y # 1 sw Y   xY w)Nr,  r   i )r&  r%  r  rD  )r+   r+   r+   r,   r;   r.   r/   )r   r   r1   cumsumr2   r3   r'  r   r   RuntimeWarningr4   )rr   s     r7   test_stable_cumsumr    s    }Y/91EF
		a %%f-A	n	%aaa( 
& 			b!))$Y)?A}QQ/111EF}QQ/111EF}QQ/111EF 
&	%s   4E  E	A_containerdense)idsB_containerc                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      } ||      }t        ||d      }t        ||       y )Nr      r)   )r)   r   Tdense_outputr1   r2   r3   rJ   rl   r   r   )r  r  r5   r   Bexpectedactuals          r7   test_safe_sparse_dot_2dr    sq     ))


"C(#A(#Avva|HAAAAQ5FFH%r9   c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       |j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       y )Nr   )r/   r0   r   r+   rG   )rG   rS   )r/   r0   )r   r+   r0   rG   r  )rv   r5   r   r  r  r  s         r7   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%r9   	containerc                 x   t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      }t         | |      |      }t        ||       |j                  d      }t        j                  ||      }t        | | |            }t        ||       y )Nr   r)   r  )r)   r  r  )r  r5   r  r   r  r  s         r7   test_safe_sparse_dot_2d_1dr    s     ))


"C2A 	(#Avva|HYq\1-FFH% 	(#Avva|HQ	!-FFH%r9   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  r)   r   )r   rZ   r   r  )	r1   r2   r3   r   rl   r   issparsetoarrayr   )r  r5   r   r  r  r  s         r7   !test_safe_sparse_dot_dense_outputr    s    
))


"Cb"c<Ab"c<AuuQxHQ=F??6"<'7888##% 2r9   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 rD  r}   ia  r   )class_countsn_drawsr5   i`  r   N)r1   r   r   r   r   )r6   rets     r7   test_approximate_moder  *  s:     	%bhh/A
Eq
AC
 sUCL)r9   )bnumpyr1   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   scipy.specialr   sklearn.datasetsr   r	   sklearn.utilsr
   sklearn.utils._arpackr   sklearn.utils._testingr   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parametrizer8   rE   rO   r   r   rg   rk   rw   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r1  r   rP   objectr7  r@  fixturer5   rN  r`  ry  r  r  r  r  r  r  r  r   r  r  r  r  r  )r  s   0r7   <module>r     s4        %  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	
"(#"(F % % 2::rzz":;	+ <	+ 0/ Q#9 0 1
#9L 2::rzz":;!* <!*H14*8 E/ E/P@@B=
G XX		HIY''HH  
 XX		HIY''HH  
&& .9& :&( XX		HIY''HH  
&
&" $73 83 *c I
 IP Is   "X&(X+X0