
    e!h              
       T   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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& d d
l'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ej\                  j_                  de(e)z   e*z   e,z         d        Z0d Z1d Z2ej\                  j_                  dejf                  ejh                  ejj                  ejl                  f      d        Z7ej\                  j_                  dejf                  ejh                  ejj                  ejl                  f      d        Z8ej\                  j_                  dd      d        Z9ej\                  j_                  dg d      d        Z:ej\                  j_                  dejj                  ejl                  f      ej\                  j_                  de*      d               Z;d Z<d Z=d Z>d Z?ej\                  j_                  de+e,z         d        Z@d ZAej\                  j_                  d d!d"g      d#        ZBd$ ZCd% ZDej\                  j_                  d&g d'      ej\                  j_                  d(g d'      ej\                  j_                  dg d)      ej\                  j_                  d* eEd+            d,                             ZFd- ZGej\                  j_                  d. ej                  g d/ejf                  0       ej                  d1d+gejh                  0      g ej                  ejh                        f ej                  g d/ejf                  0       ej                  d1d+gejl                  0      g ej                  ejl                        f ej                  g d/ejf                  0       ej                  d2d3geJ0      g ej                  eJ      fg      d4        ZK ej                         d5        ZMej\                  j_                  dejj                  ejl                  g      d6        ZNej\                  j_                  d7g d8      ej\                  j_                  d9g d:      ej\                  j_                  d;g d<      d=                      ZOej\                  j_                  dejj                  ejl                  g      d>        ZPd? ZQd@ ZRedA        ZSdB ZTdC ZUdD ZVdE ZWej\                  j_                  dFej                  ge*dGge*D  cg c]  } | j                   c} z   H      ej\                  j_                  dIej                  ge*dGge*D  cg c]  } | j                   c} z   H      dJ               ZYej\                  j_                  de*      dK        ZZej\                  j_                  dLej                  ge*dGge*D  cg c]  } | j                   c} z   H      dM        Z[ej\                  j_                  dNdOdPg      dQ        Z\dR Z]yc c} w c c} w c c} w )S    N)linalgsparse)eigh)eigsh)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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      h/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr6   /   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)	r/   r0   r1   r2   onesshaper$   r   r   )r3   xweightsr:   modescoremode2score2s           r5   test_uniform_weightsrC   <   s~    
))


"CBW%AggaggG *Atne%at<v4'5&)*r7   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,   r9   )r/   r0   r1   r2   random_sampler<   r   r   r   ravelsum)mode_resultr3   r=   wr?   r@   s         r5   test_random_weightsrM   J   s     K
))


"CKi0A!''"AAa!eHa!eHMH11-KD%t[)ekkmQq"1"uX\\!_=r7   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 )NrG     r)   r'              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrX   fdecimal)r/   float32rN   r   astyper<   r   svdr   kindfloat64r   dotr!   )rN   rT   rU   rankkrd   r4   UsVt
normalizerUasaVacsr_containers                  r5   'test_randomized_svd_low_rank_all_dtypesru   \   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r7   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*   )      ?       rR         @rN   r*   r   r-   module)n_components	selection)r-   rz   ry   )   r-   valueN)r/   r0   r1   diagarrayr   qrnormalr<   Tr   r   pytestraisesNotImplementedError)rN   r3   r4   rand_roteigvalseigvecss         r5   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rl   )r'   2   rG         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   )rX   r|      )r}   r~   n_iterrX      r_   )r}   r   n_oversamplesrX   ra   r~   r,   )subset_by_indexNrE   rc   r   LA)whichtolmaxiterv0r'      )r   r   r   argsortr<   r   r/   
zeros_liker   r   r
   r   )rl   rU   r4   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r5   (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 r7   zn,rank))r'   rQ   rF   )rG   P   )rP   r'   )rP      )rP   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}   rX   r   r9   rE   rc   N)r/   r0   r1   randnr   r   r   r   normr;   r<   r   )nrk   r3   r4   ASVA_reconstructs           r5   &test_randomized_eigsh_reconst_low_rankr     s    $ !8O8 ))


#C		!TA	ACCA QTDDAqbiinnQQn79IJaccAgrwwrwwqww/?'@A
NQSS(M mQ:r7   rt   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 )Nrw   rG   r   r)   FrY   r-   r,   r9   T)squaredr{   )r/   r0   r1   r   re   rf   rJ   r   r   sqrtint32int64indptrr   rN   )rN   rt   r4   	precisionsq_normcsr_index_dtypeXcsrs          r5   test_row_normsr   0  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r7   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 )NrG   rP   r)   r'   皙?r   rS   Fr[   r]   noner^   r_   r   ra   rX   g{Gz?r`   r.   rc   	r   r<   r   rg   r   r/   absmaxr   
rT   rU   rk   rl   r4   r   rn   rp   rr   saps
             r5   'test_randomized_svd_low_rank_with_noiser   L  s    IJD
A 		A 77y*---- jj%0GAq!2 3
 "qzPQ
2q
 vvaebj!%%'$... #qZa
	3
 	AbqE32#3r7   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 )NrG   rP   r)   r'   rx   r   rS   Fr[   r   r   r   r.   rc   r   r   s
             r5   !test_randomized_svd_infinite_rankr   u  s    IJD
A 		A 77y*---- jj%0GAq!2 3
 "qzPQ
2q
 vvaebj!%%'#--- #qzPQ
	3 	AbqE32%3r7   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 )NrG   rP   r   r'   g      ?r   rS   r.   F)r   	transposerX   Tr]   r[   rc   r-   )r   r<   r   r   rg   r   r/   rj   )rT   rU   rk   rl   r4   U1s1V1U2s2V2U3s3V3U4s4V4s                    r5   )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r7   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 )Nrw   rG   rP   r   rV   rX   r.   r   r-   r*   r   r   fro)ordr   )r^   r_   r]   )r)   r'   r      )r/   r0   r1   r   r2   r<   r   rj   r   r   r   r   )r3   r4   r}   rm   rn   ro   r   error_2error_20rp   ierrors               r5   .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0r7   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)Nrw   r   r   r'   r   r)   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr,   r   )r   ra   )r/   r0   r1   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r%   r3   r4   r}   warn_msgs        r5   #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   r'   Fr[   u_based_decisionrE   rc   T)
r/   r0   r1   r   r   rg   r   r   rj   r   )rsrT   rU   r4   rm   r   ro   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r5   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!Dr7   zn_samples, n_features)r.   r   )r   r.   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   r9   r,   )r/   r0   r1   r   r   rg   r   argmaxr   aranger<   all)rT   rU   global_random_seedr   r4   rm   r   ro   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rows               r5   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Nr7   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       @rR   rx   r-   T)   	flip_signrX   r'   )r/   r   r   ranger   rj   r   eye)au1r   v1seedu2r   v2s           r5   test_randomized_svd_sign_flipr  $  s    
3*sCj)*A12FJBBb	 9#AqDtL
BB#B#BFF27B/3BFF244,bffQi8BFF244,bffQi89r7   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   r9   r,   )r/   r   r   r   )uvu_basedv_baseds       r5   max_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive5  so    
 66!9==a=(AEEqEM9>>@66!9==a=(AEEqEM9>>@r7   r   r'   r   r.   Tr   r  )r  r   rX   )r/   r   reshaper   )	r  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r5   ,test_randomized_svd_sign_flip_with_transposer  0  s    
  ))F

#
#B
+C -S!tRSTIq).y)DGWN7; =KQ$$Q=9a!9 / ":GW N7;wr7   r   )r   rG   ,  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_driverrX   gesvdgMbP?)atolrtol)r/   r0   r1   randr   r<   r   )r   r  rl   r
  r3   r4   r  r   vt1r  r   vt2s               r5   !test_randomized_svd_lapack_driverr'  Q  s     ))


%CAA !AqQKBC AqQKBC 88rxxB.88rxxB.99		!!!C140r7   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-   r.   r   r)   rE   rQ   )r,   r   rE   )r,   r   rQ   )r,   r)   rE   )r,   r)   rQ   )r-   r   rE   )r-   r   rQ   )r-   r)   rE   )r-   r)   rQ   )r.   r   rE   )r.   r   rQ   )r.   r)   rE   )r.   r)   rQ   r.   )r/   r   r   r   r   newaxis)axestrue_outoutr=   s       r5   test_cartesianr.  k  s     HHY1a&!1288QF3CDDxx	
H" D/Cx% 			!AqBJJ'A49r7   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   rN   )arraysoutput_dtypeoutputs      r5   test_cartesian_mix_typesr4    s     & vF<<<'''r7   c                  @    t         j                  j                  d      S )Nrw   )r/   r0   r1    r7   r5   r3   r3     s    99  $$r7   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$  rf   r<   r   r/   averager   )
r3   rN   multr4   r:  meanvarr   expected_meanexpected_vars
             r5   2test_incremental_weighted_mean_and_variance_simplerB    s    Dr!!%(4/AHHQWWQZ(4/M,Q1a}ULD#qJJq-a@M::adMB]TUEUULm,\*r7   r>  )r       cAg    cr?  )r,   :0yE>g     j@zweight_loc, weight_scale))r   r,   )r   rD  )r,   rD  )r'   r,   )rC  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   r9  ư>)r"  )r<   r	   r   r   )
r4   r:  r@  rA  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r5   _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>	?r7   )rG   r   r   )locscaler+   r;  r-   r9   )r   r   r/   r<  r;   r>  r?  )r>  r?  
weight_locweight_scaler3   rM  r+   weightr4   r@  rA  ones_weights               r5   +test_incremental_weighted_mean_and_variancerT    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<8r7   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     @rW  rW  rW       @rY  rY  rY  r-   r-   r-   r-   r{   r.   r      r\  r\  r\    r^  r^  r^  r  r  r  r  r\  r^  r  r9  )r/   r   r   r;   rf   nanr   r   )rN   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr4   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r5   6test_incremental_weighted_mean_and_variance_ignore_nanrm    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)r7   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  r\  r^  r  r-   r   r9   r,   r{   rE   )
r/   r   r   r>  r?  fullr<   r   r   r   )
r   idxX1X2ra  rb  old_sample_countfinal_meansfinal_variancesfinal_counts
             r5   )test_incremental_variance_update_formulasrw    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0r7   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 )NrV  rX  rZ  r{   r[  r]  r_  r\  r^  r  )r/   r   r   r`  r   r   )ra  rb  rs  r4   rf  rg  rh  ri  rj  rk  rl  s              r5   -test_incremental_mean_and_variance_ignore_nanry    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)r7   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   r9   )r?  )r   s    r5   np_varz=test_incremental_variance_numerical_stability.<locals>.np_var=  s    uu!u}r7   c                     | j                   d   }| dz  j                  d      |z  }| j                  d      |z  dz  }||z
  S )Nr   r-   r9   )r<   rJ   )r4   r   exp_x2expx_2s       r5   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_varB  sK    GGAJQ$#a'%%Q%-!#)r7   c                     | j                  d      }| j                         }t        j                   ||z
  dz  d      S )Nr   r9   r-   )r>  rZ   r/   )r4   r>  Ys      r5   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_varK  s5    vv1v~FFHwwDQQ//r7   c                 p    |dz   }|t        |      z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr,   )float)r=   rI  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r5   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updateS  sm    014)E2F,GG//)m2KKM)9}\!125IIJ 	 -/CCCr7   r   r-   i'  g    חAr{   gh㈵>r   r9   rG  r,   )r/   r   ri   logro  vstackr   r   zerosr  r<   r>  r   r   r  r   r   )r|  r  r  r  r   rU   rT   x1x2A0A1r   r>  r?  r   r   s                   r5   -test_incremental_variance_numerical_stabilityr  9  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(,,....r7   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,   r9   r{   rE   )r/   r0   r1   r   r<   r   hstackzipr>  r?  ro  r   r   r   r   )r3   r4   rT   rU   
batch_sizestepsr   jrL  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r5   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,?'	@@r7   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,   r9   r   )r/   r0   r1   r   r   r   r   r   signr  r<   r*  )datamax_abs_rowsdata_flippedmax_rowssignss        r5   test_vector_sign_flipr    s    99  $**1a0D99RVVD\2L248LyyA.H|X.GGDtzz!}-|;<=Et\E!RZZ-,@@Ar7   c                     t         j                  j                  d      } | j                  dd      }t        j                  |      }t        j
                  |d      j                  d      }t        t        |      ||z         y )Nr   r.   r)   r,   r9   )r   r,   )	r/   r0   r1   r   exprJ   r  r   r   )r3   r4   exp_X	sum_exp_Xs       r5   test_softmaxr    s`    
))


"C		!QAFF1IEu1%--g6Igaj%)*;<r7   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  r8  )r)   r)   r)   r*   r9   r,   r-   )r   r   r/   cumsumr0   r1   r$  r   r   RuntimeWarningr2   )rr   s     r5   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r/   r0   r1   rH   rj   r   r   )r  r  r3   r   Bexpectedactuals          r5   test_safe_sparse_dot_2dr    sq     ))


"C(#A(#Avva|HAAAAQ5FFH%r7   c                    t         j                  j                  d      }|j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       |j                  d      }|j                  d      }t        j                  ||      } | |      }t        ||      }t        ||       y )Nr   )r-   r.   r   r)   rE   )rE   rQ   )r-   r.   )r   r)   r.   rE   r  )rt   r3   r   r  r  r  s         r5   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%r7   	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  r3   r  r   r  r  s         r5   test_safe_sparse_dot_2d_1dr    s     ))


"C2A 	(#Avva|HYq\1-FFH% 	(#Avva|HQ	!-FFH%r7   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   rX   r   r  )	r/   r0   r1   r   rj   r   issparsetoarrayr   )r  r3   r   r  r  r  s         r5   !test_safe_sparse_dot_dense_outputr    s    
))


"Cb"c<Ab"c<AuuQxHQ=F??6"<'7888##% 2r7   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 r8  r{   ia  r   )class_countsn_drawsr3   i`  r   N)r/   r   r   r   r   )r4   rets     r5   test_approximate_moder    s:     	%bhh/A
Eq
AC
 sUCL)r7   )^numpyr/   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   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   sklearn.utils.fixesr   r    r!   r"   r#   r$   markparametrizer6   rC   rM   r   r   re   ri   ru   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r'  r.  r   rN   objectr4  fixturer3   rB  rT  rm  rw  ry  r  r  r  r  r  r   r  r  r  r  r  )r  s   0r5   <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":;	+ <	+ 0/ Q#9 0 1
#9L 2::rzz":;!* <!*H14*8 E/ E/P@@B=
G XX		HIY''HH  
 XX		HIY''HH  
&& .9& :&( XX		HIY''HH  
&
&" $73 83 *c I
 IP Is   XX X%