
    /ii.              
          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j;        <                    de5e6z   e7z   e9z             d             Z=d Z>d Z?ej;        <                    dej@        ejA        ejB        ejC        f          d             ZDej;        <                    dej@        ejA        ejB        ejC        f          d             ZEej;        <                    dd          d             ZFej;        <                    dg d          d             ZGej;        <                    dejB        ejC        f          ej;        <                    de7          d                         ZHd ZId ZJd ZKd  ZLej;        <                    de8e9z             d!             ZMd" ZNej;        <                    d#d$d%g          d&             ZOd' ZPd( ZQej;        <                    d)g d*          ej;        <                    d+g d*          ej;        <                    dg d,          ej;        <                    d- eRd.                    d/                                                 ZSd0 ZTej;        <                    d1 ejU        g d2ej@        3           ejU        d4d.gejA        3          g ejV        ejA                  f ejU        g d2ej@        3           ejU        d4d.gejC        3          g ejV        ejC                  f ejU        g d2ej@        3           ejU        d5d6geW3          g ejV        eW          fg          d7             ZXej;        <                    dejB        ejC        g          ej;        <                    d8d9          d:                         ZYej;        <                    d; e            e<          d=             ZZej;        <                    d>g d?          ej;        <                    d@g dA          ej;        <                    dBg dC          dD                                     Z[ej;        <                    dejB        ejC        g          dE             Z\dF Z]dG Z^e#dH             Z_dI Z`dJ ZadK ZbdL Zcej;        <                    dMejU        ge7dNgdO e7D             z   <          ej;        <                    dPejU        ge7dNgdQ e7D             z   <          dR                         Zdej;        <                    de7          dS             Zeej;        <                    dTejU        ge7dNgdU e7D             z   <          dV             Zfej;        <                    dWdXdYg          dZ             Zgd[ Zhej;        <                    d; e            e<          d\             Ziej;        <                    d; e            e<          d]             ZjdS )^    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                            d          }|                    dd          }d|d<   d|d<   t	           | |                    t	          |          k    sJ d S )Nr   
   r1      size)      )r3      )nprandomRandomStaterandintr    )r/   rngXs      f/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr@   >   sq    
 )


"
"CBW%%AAdGAdG##A&&''71::555555    c                  >   t           j                            d          } |                     dd          }t          j        |j                  }dD ]J}t          ||          \  }}t          |||          \  }}t          ||           t          ||           Kd S )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gagG * *Atnne%at<<<v4'''5&))))* *rA   c                     d} t           j                            d          }|                    | d          }|                    |j                  }| |d d d df<   |d d d dfxx         dz  cc<   t          ||d          \  }}t          ||            t          |	                                |d d d df         
                    d                     d S )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00A!'""AAaaa!eHaaa!eHHHMHHH11---KD%t[)))ekkmmQqqq"1"uX\\!__=====rA   dtypec           
      Z   d}d}d}d}| t           j        k    rdnd}t          j        |           } t          |||dd                              | d	
          }|j        ||fk    sJ t          j        |d	          \  }}}	|                    | d	
          }|                    | d	
          }|	                    | d	
          }	dD ]}
t          |||
d          \  }}}| j	        dk    r(|j        | k    sJ |j        | k    sJ |j        | k    sJ nE|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    r(|j        | k    sJ |j        | k    sJ |j        | k    sJ n6|j        j	        dk    sJ |j        j	        dk    sJ |j        j	        dk    sJ t          |d |         |d |         |           d S )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   sn    IJD
ABJ&&aaAGHUOOE 		 	 	 fUf  7y*----- z!5111HAq" 	
U##A	U##A	5u	%	%B* 0F 0F
#qZa
 
 

B :8u$$$$8u$$$$8u$$$$$8rz))))8rz))))8rz))))xIq>))))xA4xAz?**** 	AbqbE2w7777 	F1QQQU8RAAAY''B	
 	
 	
 	

 , 	F 	FMa  A (1!  JBB zS  x5((((x5((((x5(((((x}++++x}++++x}++++%4%"UdU)WEEEEE!	FA0F 0FrA   c                 8   t           j                            d          }t          j        t          j        g d|                     }t           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           dS # 1 swxY w Y   dS )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      sk    )


#
#C
...e<<<==Ay||CJJAGJ4455a8H1xz!A )hOOOGW=D    gT{333=F"""" 
*	+	+ @ @!!w????@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   /D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          \  }}|                                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     rt          |d          }t          || ddd|          \  }}|                                ddd         }	||	         }t          ||d           |dd|	f         }t          ||
          \  }}t          ||d           dS dS )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      sr    Jz:::A )	Xbq  GW /	#'  J
 &*	JNJN;& & &"NN $$&&ttt,G#G,N#AAAwJ/N A4''''g~qAAAAj.!DDDD J?2222w'')J':..JGQZ44MJ <<NAg~qAAAAj.!DDDD 	:~~Za888).q!Tb*
 *
 *
& !((**44R40'0!.."MMMM'7
3$^Z@@!..!LLLLLL ~rA   zn,rank))r1   r[   rP   )rQ   P   )rZ   r1   )rZ      )rZ   i  c                 .   || k     sJ t           j                            d          }|                    | |          }||j        z  }t          |||          \  }}t          t           j                            |d          t          j	        |j
                             t          |j        |z  t          j        t          j	        |j
                                       |t          j        |          z  |j        z  }t          ||d           dS )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    $ !8888 )


#
#C		!TA	ACA QTDDDDAqbinnQQn779I9IJJJacAgrwrwqw/?/?'@'@AAA

NQS(M mQ::::::rA   r~   c                 j   t           j                            d                              dd          }| t           j        u rd}nd}|                    | d          }|dz                      d	          }t          |t          |d
          |           t          t          j	        |          t          |          |           t           j
        t           j        fD ]} |||           }|t           j        u rB|j                            |d          |_        |j                            |d          |_        |j        j        |k    sJ |j        j        |k    sJ t          |t          |d
          |           t          t          j	        |          t          |          |           d S )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   ?  s    		b!!''S11A
				U##A!tjjaj  GgyD'A'A'A9MMMbgg..	!iHHHHbh/ 
P 
P}Qe,,, bh&&+,,_5,IIDK<..U.KKDL|!_4444{ O3333!'9T4+H+H+H)TTT!"''"2"2IdOOYOOOO
P 
PrA   c                     d} d}d}d}t          | ||dd          }|j        | |fk    sJ t          j        |d	          \  }}}d
D ]}t	          ||d|d          \  }}}t          j        |d |         |z
                                            dk    sJ t	          |||d          \  }}	}t          |d |         |	d           d S )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 7y*----- j%000GAq!2 3 3
 "qzPQ
 
 
2q
 vaebj!!%%''$.... #qZa
 
 
	3
 	AbqbE322222#3 3rA   c                     d} d}d}d}t          | ||dd          }|j        | |fk    sJ t          j        |d	          \  }}}d
D ]}t	          ||d|d          \  }}}t          j        |d |         |z
                                            dk    sJ t	          ||d|d          \  }}	}t          |d |         |	d           d S )NrQ   rZ   r3   r1   r   r   r]   Fre   r   r   r   r8   rm   r   r   s
             r?   !test_randomized_svd_infinite_rankr     s1   IJD
A 		 	 	A 7y*----- j%000GAq!2 3 3
 "qzPQ
 
 
2q
 vaebj!!%%''#---- #qzPQ
 
 
	3 	AbqbE322222%3 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          |	|           d S )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     s   IJD
A	 	 	A 7y*-----1Q%aPPPJBB1Q$QOOOJBB1Q&qQQQJBBAU333JBBBrrFA....BrrFA....BrrFA....r2r!!!RaR%y"RaRU)(D(DaPPPPr2r!!!RaR%y"RaRU)(D(DaPPPP BrA   c            	         t           j                            d          } t          ddd|           }|d|                     dd|j        	          z  z  }d}t          ||dd
d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }t          ||dd
d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }t          j        ||z
            dk    sJ dD ]}	t          ||d|	d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }dD ]}
t          |||
|	d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }dt          j        ||z
            k    sJ d S )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     sf    )


#
#CS#bsKKKAS[[AAG[,,	,,AL 	<fST  HAq" 	
AEE"'!**..$$%%%Ak!'''G	<vTU  HAq" 	
AEE"'!**..$$%%%A{1%(((H6'H$%%++++* 0 0
!'1
 
 
1b bgajjnnR(()))+aU+++ 
	0 
	0A%+5  HAq" AEE"'!**..,,---AKu---Ew///////
	00 0rA   c                 P   t           j                            d          }t          ddd|          }d} | |          }d                    | j                  }t          j        t          j	        |          5  t          ||d	d
           d d d            d S # 1 swxY w Y   d S )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IIIALAMTT%	
 	
 
 
f4H	E	E	E U Uq,qVTTTTU U U U U U U U U U U U U U U U U Us   :BB"Bc                     t           j                            d          } d}d}|                     ||          }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           d S )
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    sq   			t	$	$BIJ
J''A z!5111HAq"ae444FBrAvr**Aq9999 
Bz"E222HAq"ad333FBrAvr**B::::  2===GWw{G44b!DDDD2>>>GWw{G44b!DDDDDDrA   zn_samples, n_features)r8   r   )r   r8   c                    t           j                            |          }|                    | |          }t	          j        |d          \  }}}t          ||d          \  }}t          j        t          j        |          d          }	||	t          j	        |j
        d                   f         dk                                    sJ t          ||d          \  }}
t          j        t          j        |
          d          }|
t          j	        |
j
        d                   |f         dk                                    sJ d S )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	2	2B
J''Az!5111HAq"QT222EB!#26"::A!>!>!>)29RXa[+A+AABaGLLNNNNNQU333EAr!#26"::A!>!>!>ry!%%'AABaGLLNNNN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                     d S )	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FFFJBBb		 9 9#AqDtLLL
BB###B###BF27B//333BF24,,bfQii888BF24,,bfQii88889 9rA   c                     d } t          j        d                              dd          }t          |ddd          \  }}} | ||          \  }}|sJ |rJ t          |dddd	          \  }}} | ||          \  }}|sJ |rJ d S )
Nc                 R   t          j        |                               d          |                     d          k                                    }t          j        |                              d          |                    d          k                                    }||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  s    
 6!99==a=((AEEqEMM9>>@@6!99==a=((AEEqEMM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TTIq)..y)DDGWNNN =KQ$$Q= = =9a!9 /. ": GW NNNrA   r   )r   rQ   ,  m)r1   r   r   r  r3   c                    t           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           d S )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QQQKBC AqQQQKBC 8rxB....8rxB....9	!!!!C1400000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                     d S )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     HYYY1a&!1!128QF3C3CDDxIIIIIIIIIIIIIIIIIIIIIIII	
 H" D//Cx%%% 		!AqBJ'A499999rA   zarrays, output_dtyper5  r   r   rG   yc                 >    t          |           }|j        |k    sJ dS )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                            d          }d}|                    dd                              |           |z  }|                    |j        d                   |z  }|r|                                n|}t          |ddd|          \  }}}	t          j        ||d          }
t          j        |dz  |d          |
dz  z
  }t          ||
           t          ||           d S )	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HHQWQZ((4/M	%AB,RAqVVVLD#qJq-a@@@M:adMBBB]TUEUULm,,,\*****rA   zarray_namespace, device, dtype)idsc                    t          | |          }t          j                            d          }d}|                    dd                              |          |z  }|                    |j        d                                       |          |z  }t          |ddd|          \  }}	}
|                    ||          }|                    ||          }t          d	          5  t          |ddd|          \  }}}
d d d            n# 1 swxY w Y   t          |          t          |          k    sJ |j        t          ||          k    sJ t          |          t          |          k    sJ |j        t          ||          k    sJ t          ||
          }t          ||
          }t          ||           t          |	|           d S )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\    s#    
ov	6	6B
)


#
#CDr!!%((4/AHHQWQZ((//66=M,Q1a}UUULD#q::a:''Dzz-z??	4	0	0	0 
 
6!Q)9
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
   L$6$66666=6r&IIIIIII<#5#55555<5bHHHHHHHB///Gv"---FD'"""C     s   *DDDrK  )r       cAg    crL  )r6   :0yE>g     j@zweight_loc, weight_scale))r   r6   )r   r^  )r6   r^  )r1   r6   )r]  r6   c                 F   t           j                            d          }d }d}|                    |||d                   }|                    | ||          }t	          t           j        ||d          }	t	          t           j        ||	z
  dz  |d          }
 ||||	|
           |                    | ||          }t          j        |d                   }t	          t           j        |d          }	t	          t           j        |d          }
 ||||	|
           d S )	Nr   c           
         | j         d         }d|dz  dz   |dz  dz   |dz  dz   |fD ]a}d\  }}}t          ||          D ]&}	t          | |	         |||||	                   \  }}}'t          ||           t          ||d	           bd S )
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    GAJa2gk16A:qAvz1E 	? 	?J3:0I$Q
33  7PeH#"/"68 8 84	8__ I}55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    s0    )


#
#C? ? ? DZZJlaZIIF 	

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

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

t3T
22A'$q'""K(!!<<<M':::LGA{M<8888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                              |           }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          ||
           d S )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5566IH===>>MXlll"(;;;Nwqzz71::
			3335I5I5IJ	 	fUmm  H"&#s#VS#s##rvs##sBF#		
  fUmm 
 %>	9m^CS% % %!G[' 1J*1 1 1-K+ K)))O[111K)))))rA   c                  H   t          j        g dg dg dg dg          j        } d}| d |d d f         }| |d d d f         }|                    d          }|                    d          }t          j        |j        d         |j        d         t           j                  }t          ||||          \  }}}	t          ||                     d          d           t          ||                     d          d           t          |	| j        d                    d S )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  s8    	%%%%%%%%%%%%		
	 	   C	
4C47B	
3447BQIFFFNNMwrx{BHQKrxHHH0I
I}&61 1-K+ QVVV^^Q777A:::QWQZ00000rA   c            	      4   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          |
|           d S )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5566IH===>>MxBH===
&&&(<(<(<>R>R>RSTTAH"&#s#VS#s##rvs##sBF#		
 E %>	9m%5% %!G[' 1Jy-)91 1-K+ K)))O[11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
                                            |k    sJ |	dd d f         t          j        |          |dz  }}}t          |
j
        d                   D ]} ||
|d d f         |||          \  }}}||j
        d         k    sJ t          j        |                    d          |z
                                            dk    sJ t          j         | |          |z
                                            |k    sJ |	dd d f         t          j        |          }}t          j        ||dz  t           j        	          }t          |
j
        d                   D ]B}t          |
|d d f                             d|
j
        d         f          |||          \  }}}Ct          ||j
        d                    t!          |                    d          |           |t          j         | |          |z
                                            k    sJ d S )Nc                 .    |                      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                      d          |z  }|                     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  sN    GAJQ$##a'%%Q%--!#)rA   c                     |                      d          }|                                 }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}  s=    vv1v~~FFHHwDQQ////rA   c                 x    |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  sp    014)E2F,G,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  s     
  0 0 0D D D CJI	#RZ	(	(	(B	BJ	'	'	'B	)q.*-r	D	D	DB	)q.*-r	D	D	DB
	2r(A 6&&))ll1oo-..2244s::::
 ad8RXj119>q#D28A; J J11"QT(D#qIIc11
????6!&&a&..4'((,,..55556&&))c/""&&((3.... 1aaa4"(:..#D

IN"(;;;A28A; 
 
0q!!!tHa!-..c1
 
c11 q!'!*%%%aff!fnnd333q		C((,,........rA   c                     t           j                            d          } |                     dd          }|j        \  }}dD ]}t          j        d|j        d         |          }|d         |j        d         k    rt          j        ||g          }t          j        |          D ]!\  }}|||d d f         }|dk    rq|	                    d          }	|
                    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          ||           #d S )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GIz" @ @
	!QWQZ449
""Iui011E&u-- 	@ 	@DAqac111fIEAvv$)JJAJ$6$6!(-		q	(9(9%$)KN!!wu{1~u{1~RXVVV2,.C\  QWM"$9;LA.!wq!u1555#%6!BQB%a#8#8#8  13CQGGG 57KQOOO0,????'	@@ @rA   c                     t           j                            d                              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             d S )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    9  $$**1a00D9RVD\\222L2488LyA...H|X...GDtz!}--|;<==Et\E!!!RZ-,@@AAAAArA   c                  *   t           j                            d          } |                     dd          }t          j        |          }t          j        |d                              d          }t          t          |          ||z             d S )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    sx    
)


"
"C		!QAF1IIEu1%%%--g66Igajj%)*;<<<<<rA   c                      t          j        t          d          5  t          g d           d d d            d S # 1 swxY w Y   d S )Nzstable_cumsum.+is deprecatedr   r5  )r   r   FutureWarningr&    rA   r?   test_stable_cumsum_deprecationr    s    	m+I	J	J	J ! !iii   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   ;??A_containerdensec                     g | ]	}|j         
S r  r   .0	containers     r?   
<listcomp>r        HHHIY'HHHrA   B_containerc                     g | ]	}|j         
S r  r  r  s     r?   r  r    r  rA   c                 2   t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          } ||          }t          ||d          }t          ||           d S )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    s     )


"
"C(##A(##Ava||HAAAAQ555FFH%%%%%rA   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           |                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           d S )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va||HaAQ""FFH%%% 	&!!A,''Ava||HaAQ""FFH%%%%%rA   r  c                     g | ]	}|j         
S r  r  r  s     r?   r  r    r  rA   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          }t           | |          |          }t          ||           |                    d          }t          j        ||          }t          | | |                    }t          ||           d S )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va||HYYq\\1--FFH%%% 	(##Ava||HQ		!--FFH%%%%%rA   r  TFc                 t   t           j                            d          }t          j        ddd|          }t          j        ddd|          }|                    |          }t          |||           }t          j        |          |  k    sJ | r|                                }t          ||           d S )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uuQxxHQ===F?6""<'78888 &##%% 22222rA   c                      t          j        ddgt           j                  } t          | dd          }t	          |ddg           d	S )
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  @  sN     	%bh///A
Eq
A
A
AC
 sUCL)))))rA   c                 D   t          | |          }t          j                            d          }|                    d                              |          }|                    ||          }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            d S # 1 swxY w Y   d S )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  s    
ov	6	6B
)


"
"C


!!((//A::a:''DLI%%441D	4	0	0	0 
H 
H*1lKKKdE*4ANNNdET""1%."+====T""1%."+====U##A&/2;>>>>)$33TEEEE)$33TEEEE)%44e$GGGG
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
H 
Hs   C<FFFc                 (   t          | |          }t          j                            d          }|                    d                              |          }|                    ||          }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            d S # 1 swxY w Y   d S )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  su    
ov	6	6B
)


"
"C


!!((//A::a:''DDFI%%441D	4	0	0	0 F F&qtFQRSSS&t$vTUVVVT""1%."+====)$33TEEEEF F F F F F F F F F F F F F F F F Fs   A,DDD)kr  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  rA   r?   <module>r     s
                                  % % % % % % " " " " " " I I I I I I I I % % % % % % 1 1 1 1 1 1                                                                    "                ^#n4~E 6 6	 6* * *> > >$ 28RXrz2:"NOOLF LF POLF^ 28RXrz2:"NOO@ @ PO@, 566DM DM 76DMN   
 
; ;
 
;4 2:rz":;;.99P P :9 <;P4&3 &3 &3R&3 &3 &3R     @*0 *0 *0Z +^n-LMMU U NMU E E E2 0662BCCO O DCO	9 	9 	9  B nnn--nnn--lll++q**1 1 +* ,+ .- .-1,: : :<  RXiiirx000("(Aq62R2R2RSBHRX	

 RXiiirx000("(Aq62T2T2TUBHRZ  	

 RXiiirx000("(C:V2T2T2TUBHV	
 "( (# "( 2:rz":;;M22+ + 32 <;+ $--//'   
! ! 
!@ 00// Q Q Q #9 #9  0/ 10
#9L 2:rz":;;!* !* <;!*H1 1 14* * *8 E/ E/ E/P@ @ @@B B B= = =! ! !
 X		HHHHHH   
 X		HHHHHH   
& &  & .99& & :9&( X		HHHHHH   
& & 
&" $773 3 873 * * *" $--//'   
H H 
H, $--//'   
F F 
F F FrA   