
    Ugْ              
       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 d dlmZmZ d dlmZ d dlmZ d d	lmZmZmZmZmZmZ d d
lmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ej1        2                    de+e,z   e-z   e/z             d             Z3d Z4d Z5ej1        2                    dej6        ej7        ej8        ej9        f          d             Z:ej1        2                    dej6        ej7        ej8        ej9        f          d             Z;ej1        2                    dd          d             Z<ej1        2                    dg d          d             Z=ej1        2                    dej8        ej9        f          ej1        2                    de-          d                         Z>d Z?d Z@d ZAd ZBej1        2                    de.e/z             d             ZCd  ZDej1        2                    d!d"d#g          d$             ZEd% ZFd& ZGej1        2                    d'g d(          ej1        2                    d)g d(          ej1        2                    dg d*          ej1        2                    d+ eHd,                    d-                                                 ZId. ZJej1        2                    d/ ejK        g d0ej6        1           ejK        d2d,gej7        1          g ejL        ej7                  f ejK        g d0ej6        1           ejK        d2d,gej9        1          g ejL        ej9                  f ejK        g d0ej6        1           ejK        d3d4geM1          g ejL        eM          fg          d5             ZNd6 ZO ejP                    d7             ZQej1        2                    dej8        ej9        g          d8             ZRej1        2                    d9g d:          ej1        2                    d;g d<          ej1        2                    d=g d>          d?                                     ZSej1        2                    dej8        ej9        g          d@             ZTdA ZUdB ZVedC             ZWdD ZXdE ZYdF ZZdG Z[ej1        2                    dHejK        ge-dIgdJ e-D             z   K          ej1        2                    dLejK        ge-dIgdM e-D             z   K          dN                         Z\ej1        2                    de-          dO             Z]ej1        2                    dPejK        ge-dIgdQ e-D             z   K          dR             Z^ej1        2                    dSdTdUg          dV             Z_dW Z`dS )X    N)linalgsparse)eigh)eigsh)expit)make_low_rank_matrixmake_sparse_spd_matrix)gen_batches)_init_arpack_v0)assert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalskip_if_32bit)_approximate_mode_deterministic_vector_sign_flip_incremental_mean_and_var_randomized_eigsh_safe_accumulator_op	cartesiandensitylog_logisticrandomized_svd	row_normssafe_sparse_dotsoftmaxstable_cumsumsvd_flipweighted_mode)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS_modesparse_containerc                     t           j                            d          }|                    dd          }d|d<   d|d<   t	           | |                    t	          |          k    sJ d S )Nr   
   r)      size)      )r+      )nprandomRandomStaterandintr   )r'   rngXs      _/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr8   3   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   r)   r*   r,   )Nr   r.   axis)	r1   r2   r3   r4   onesshaper&   r    r   )r5   xweightsr<   modescoremode2score2s           r7   test_uniform_weightsrE   @   s    
)


"
"CBW%%AgagG * *Atnne%at<<<v4'''5&))))* *r9   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   r)   r,   r+   r.   r;   )r1   r2   r3   r4   random_sampler>   r    r   r   ravelsum)mode_resultr5   r?   wrA   rB   s         r7   test_random_weightsrO   N   s     K
)


"
"CKi00A!'""AAaaa!eHaaa!eHHHMHHH11---KD%t[)))ekkmmQqqq"1"uX\\!__=====r9   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 )NrI     r+   r)              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrZ   fdecimal)r1   float32rP   r   astyper>   r   svdr   kindfloat64r   dotr#   )rP   rV   rW   rankkrf   r6   UsVt
normalizerUasaVacsr_containers                  r7   'test_randomized_svd_low_rank_all_dtypesrw   `   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r9   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*   )      ?       rT         @rP   r,   r   r/   module)n_components	selection)r/   r|   r{   )   r/   valueN)r1   r2   r3   diagarrayr   qrnormalr>   Tr   r   pytestraisesNotImplementedError)rP   r5   r6   rand_roteigvalseigvecss         r7   test_randomized_eigshr      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rn   )r)   2   rI         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   )rZ   r~      )r   r   n_iterrZ      ra   )r   r   n_oversamplesrZ   rc   r   r.   )subset_by_indexNrG   re   r   LA)whichtolmaxiterv0r)      )r	   r   r   argsortr>   r   r1   
zeros_liker   r   r   r   )rn   rW   r6   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r7   (test_randomized_eigsh_compared_to_othersr      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 ~r9   zn,rank))r)   rS   rH   )rI   P   )rR   r)   )rR      )rR   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   rZ   r   r;   rG   re   N)r1   r2   r3   randnr   r   r   r   normr=   r>   r   )nrm   r5   r6   ASVA_reconstructs           r7   &test_randomized_eigsh_reconst_low_rankr     s    $ !8888 )


#
#C		!TA	ACA QTDDDDAqbinnQQn779I9IJJJacAgrwrwqw/?/?'@'@AAA

NQS(M mQ::::::r9   rv   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 )Nry   rI   r   r+   Fr[   r/   r.   r;   T)squaredr}   )r1   r2   r3   r   rg   rh   rL   r   r   sqrtint32int64indptrr   rP   )rP   rv   r6   	precisionsq_normcsr_index_dtypeXcsrs          r7   test_row_normsr   4  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r9   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 )NrI   rR   r+   r)   皙?r   rU   Fr]   r_   noner`   ra   r   rc   rZ   g{Gz?rb   r0   re   	r   r>   r   ri   r   r1   absmaxr   
rV   rW   rm   rn   r6   r   rp   rr   rt   saps
             r7   'test_randomized_svd_low_rank_with_noiser   P  s.   IJD
A 		 	 	A 7y*----- j%000GAq!2 3 3
 "qzPQ
 
 
2q
 vaebj!!%%''$.... #qZa
 
 
	3
 	AbqbE322222#3 3r9   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 )NrI   rR   r+   r)   rz   r   rU   Fr]   r   r   r   r0   re   r   r   s
             r7   !test_randomized_svd_infinite_rankr   y  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 3r9   c            
         d} d}d}d}t          | ||dd          }|j        | |fk    sJ t          ||dd	d
          \  }}}t          ||ddd
          \  }}	}
t          ||ddd
          \  }}}t          j        |d	          \  }}}t          ||d |         d           t          |	|d |         d           t          ||d |         d           t          t          j        ||          t          j        |d d d |f         |d |d d f                   d           t          t          j        ||
          t          j        |d d d |f         |d |d d f                   d           t          |	|           d S )NrI   rR   r   r)   g      ?r   rU   r0   F)r   	transposerZ   Tr_   r]   re   r/   )r   r>   r   r   ri   r   r1   rl   )rV   rW   rm   rn   r6   U1s1V1U2s2V2U3s3V3U4s4V4s                    r7   )test_randomized_svd_transpose_consistencyr     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r9   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 )Nry   rI   rR   r   rX   rZ   r0   r   r/   r,   r   r   fro)ordr   )r`   ra   r_   )r+   r)   r      )r1   r2   r3   r   r4   r>   r   rl   r   r   r   r   )r5   r6   r   ro   rp   rq   r   error_2error_20rr   ierrors               r7   .test_randomized_svd_power_iteration_normalizerr     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 0r9   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 )Nry   r   r   r)   r   r+   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.matchr.   r   )r   rc   )r1   r2   r3   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r'   r5   r6   r   warn_msgs        r7   #test_randomized_svd_sparse_warningsr     s    )


#
#CRBS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   r)   Fr]   u_based_decisionrG   re   T)
r1   r2   r3   r   r   ri   r   r   rl   r   )rsrV   rW   r6   ro   r   rq   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r7   test_svd_flipr      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Dr9   zn_samples, n_features)r0   r   )r   r0   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 )NFr]   Tr   r   r;   r.   )r1   r2   r3   r   r   ri   r   argmaxr   aranger>   all)rV   rW   global_random_seedr   r6   ro   r   rq   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rows               r7   test_svd_flip_max_abs_colsr    s%   			1	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Nr9   c                  .   t          j        ddgddgg          } t          | ddd          \  }}}t          d          D ]}t          | dd|          \  }}}t	          ||           t	          ||           t	          t          j        ||z  |          |            t	          t          j        |j        |          t          j        d                     t	          t          j        |j        |          t          j        d                     d S )	Ng       @rT   rz   r/   T)   	flip_signrZ   r)   )r1   r   r   ranger   rl   r   eye)au1r   v1seedu2r   v2s           r7   test_randomized_svd_sign_flipr  (  s   
3*sCj)**A12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 9r9   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   r;   r.   )r1   r   r   r   )uvu_basedv_baseds       r7   max_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive9  s    
 6!99==a=((AEEqEMM9>>@@6!99==a=((AEEqEMM9>>@@r9   r   r)   r   r0   Tr   r  )r  r   rZ   )r1   r   reshaper   )	r  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r7   ,test_randomized_svd_sign_flip_with_transposer  4  s    
      )F


#
#B
+
+C -S!tRSTTTIq)..y)DDGWNNN =KQ$$Q= = =9a!9 /. ": GW NNNr9   r   )r   rI   ,  m)r)   r   r   r  r+   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_driverrZ   gesvdgMbP?)atolrtol)r1   r2   r3   randr   r>   r   )r   r   rn   r  r5   r6   r  r   vt1r  r   vt2s               r7   !test_randomized_svd_lapack_driverr*  U  s     )


%
%CAA !AqQQQKBC AqQQQKBC 8rxB....8rxB....9	!!!!C14000000r9   c                     t          j        g d          t          j        ddg          t          j        ddg          f} t          j        g dg dg dg d	g d
g dg dg dg dg dg dg dg          }t          |           }t          ||           t          j        d          }t          |d d t           j        f         t          |f                     d S )Nr.   r/   r0   r   r+   rG   rS   )r.   r   rG   )r.   r   rS   )r.   r+   rG   )r.   r+   rS   )r/   r   rG   )r/   r   rS   )r/   r+   rG   )r/   r+   rS   )r0   r   rG   )r0   r   rS   )r0   r+   rG   )r0   r+   rS   r0   )r1   r   r   r   r   newaxis)axestrue_outoutr?   s       r7   test_cartesianr1  o  s     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9r9   zarrays, output_dtyper,  r}   r   r?   yc                 >    t          |           }|j        |k    sJ dS )z8Check that the cartesian product works with mixed types.N)r   rP   )arraysoutput_dtypeoutputs      r7   test_cartesian_mix_typesr7    s*    & vF<<''''''r9   c                     d } t          j        ddd          }d}t          j        t          |          5  t          t          |           | |                     d d d            n# 1 swxY w Y   t          j        ddg          }t          j        t          |          5  t          t          |          d	d
g           d d d            d S # 1 swxY w Y   d S )Nc                 D    t          j        t          |                     S )N)r1   logr   )r?   s    r7   naive_log_logisticz1test_logistic_sigmoid.<locals>.naive_log_logistic  s    veAhhr9   r/   r   z0`log_logistic` is deprecated and will be removedr   g      Yg      Y@ir   )r1   linspacer   r   FutureWarningr   r   r   )r;  r?   r   	extreme_xs       r7   test_logistic_sigmoidr@    s         	B2AAH	m8	4	4	4 J J!,q//3E3Ea3H3HIIIJ J J J J J J J J J J J J J J &%))I	m8	4	4	4 F F!,y"9"9D!9EEEF F F F F F F F F F F F F F F F F Fs#   'A**A.1A.& CCCc                  @    t           j                            d          S )Nry   )r1   r2   r3    r9   r7   r5   r5     s    9  $$$r9   c                    d}|                      dd                              |          |z  }|                      |j        d                   |z  }t          |ddd|          \  }}}t	          j        ||d          }t	          j        |dz  |d          |dz  z
  }	t          ||           t          ||	           d S )Nr)     r   r   sample_weightr@   r<   r/   )r'  rh   r>   r   r1   averager   )
r5   rP   multr6   rF  meanvarr   expected_meanexpected_vars
             r7   2test_incremental_weighted_mean_and_variance_simplerN    s    Dr!!%((4/AHHQWQZ((4/M,Q1a}UUULD#qJq-a@@@M:adMBBB]TUEUULm,,,\*****r9   rJ  )r       cAg    crK  )r.   :0yE>g     j@zweight_loc, weight_scale))r   r.   )r   rP  )r.   rP  )r)   r.   )rO  r.   c                    d }d}|                     |||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 )Nc           
         | 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   r.   r)   r   r/   )r   r   r   rE  ư>)r%  )r>   r
   r   r   )
r6   rF  rL  rM  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r7   _assertz<test_incremental_weighted_mean_and_variance.<locals>._assert  s    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>>>>>	? 	?r9   )rI   r   r   )locscaler-   rG  r/   r;   )r   r   r1   rH  r=   rJ  rK  )rJ  rK  
weight_locweight_scaler5   rY  r-   weightr6   rL  rM  ones_weights               r7   +test_incremental_weighted_mean_and_variancer`    s   ? ? ? DZZJlaZ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8r9   c           	         t          j        g d          }t          j        g d          }t          j        g dt           j                  }t          j        d          }t          j        d          }t          j        g dg dg d	g                              |           }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     @rc  rc  rc       @re  re  re  r/   r/   r/   r/   r}   r0   r      rh  rh  rh    rj  rj  rj  r  r  r  r  rh  rj  r  rE  )r1   r   r   r=   rh   nanr   r   )rP   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr6   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r7   6test_incremental_weighted_mean_and_variance_ignore_nanry    s   5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)))))r9   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  rh  rj  r  r/   r   r;   r.   r}   rG   )
r1   r   r   rJ  rK  fullr>   r   r   r   )
r   idxX1X2rm  rn  old_sample_countfinal_meansfinal_variancesfinal_counts
             r7   )test_incremental_variance_update_formulasr    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0r9   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 )Nrb  rd  rf  r}   rg  ri  rk  rh  rj  r  )r1   r   r   rl  r   r   )rm  rn  r  r6   rr  rs  rt  ru  rv  rw  rx  s              r7   -test_incremental_mean_and_variance_ignore_nanr  1  s?   5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)))))r9   c                     d } d }d }d }d}d}d}t          j        dt           j        	          }t          j        d
t           j        	          }t          j        |dz  |f|t           j        	          }	t          j        |dz  |f|t           j        	          }
t          j        |	|
f          }t          j         | |           ||          z
                                            |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   r;   )rK  )r   s    r7   np_varz=test_incremental_variance_numerical_stability.<locals>.np_varQ  s    uu!u}}r9   c                     | j         d         }| dz                      d          |z  }|                     d          |z  dz  }||z
  S )Nr   r/   r;   )r>   rL   )r6   r   exp_x2expx_2s       r7   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_varV  sN    GAJQ$##a'%%Q%--!#)r9   c                     |                      d          }|                                 }t          j         ||z
  dz  d          S )Nr   r;   r/   )rJ  r\   r1   )r6   rJ  Ys      r7   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_var_  s=    vv1v~~FFHHwDQQ////r9   c                 x    |dz   }|t          |          z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr.   )float)r?   rU  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r7   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updateg  sp    014)E2F,G,GG//)m2KKM)9}\!125IIJ 	 -/CCCr9   r   r/   i'  g    חAr}   gh㈵>r   r;   rS  r.   )r1   r   rk   r:  r{  vstackr   r   zerosr  r>   rJ  r   r   r  r   r   )r  r  r  r  r   rW   rV   x1x2A0A1r   rJ  rK  r   r   s                   r7   -test_incremental_variance_numerical_stabilityr  M  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((,,........r9   c                     t           j                            d          } |                     dd          }|j        \  }}dD ]}t          j        d|j        d         |          }|d         |j        d         k    rt          j        ||g          }t          |d d         |dd                    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   r)   )   r   %   r   r   r.   r;   r}   rG   )r1   r2   r3   r   r>   r   hstackziprJ  rK  r{  r   r   r   r   )r5   r6   rV   rW   
batch_sizestepsr   jrX  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r7   test_incremental_variance_ddofr    s   
)


%
%C		"bAGIz" @ @
	!QWQZ449
""Iui011Ecrc
E!""I.. 	@ 	@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,????'	@@ @r9   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$   r+   r.   r;   r   )r1   r2   r3   r   r   r   r   r   signr  r>   r-  )datamax_abs_rowsdata_flippedmax_rowssignss        r7   test_vector_sign_flipr    s    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Ar9   c                  *   t           j                            d          } |                     dd          }t          j        |          }t          j        |d                              d          }t          t          |          ||z             d S )Nr   r0   r+   r.   r;   )r   r.   )	r1   r2   r3   r   exprL   r  r   r   )r5   r6   exp_X	sum_exp_Xs       r7   test_softmaxr    sx    
)


"
"C		!QAF1IIEu1%%%--g66Igajj%)*;<<<<<r9   c                     t          t          g d          t          j        g d                     t          j                            d                              d          } t          j        t                    5  t          | dd           d d d            n# 1 swxY w Y   t          j                            d          
                    dd          }t          t          |d	          t          j        |d	                     t          t          |d
	          t          j        |d
	                     t          t          |d	          t          j        |d	                     d S )Nr,  r   i )r&  r%  r  rD  )r+   r+   r+   r,   r;   r.   r/   )r   r   r1   cumsumr2   r3   r'  r   r   RuntimeWarningr4   )rr   s     r7   test_stable_cumsumr    s}   }YYY//9991E1EFFF
	a  %%f--A	n	%	% ) )aaa(((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 		b!!))$Y)??A}QQ///111E1E1EFFF}QQ///111E1E1EFFF}QQ///111E1E1EFFFFFs   ?BB"%B"A_containerdensec                     g | ]	}|j         
S rB  r   .0	containers     r7   
<listcomp>r        HHHIY'HHHr9   )idsB_containerc                     g | ]	}|j         
S rB  r  r  s     r7   r  r    r  r9   c                 2   t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          } ||          }t          ||d          }t          ||           d S )Nr      r)   )r)   r   Tdense_outputr1   r2   r3   rJ   rl   r   r   )r  r  r5   r   Bexpectedactuals          r7   test_safe_sparse_dot_2dr    s     )


"
"C(##A(##Ava||HAAAAQ555FFH%%%%%r9   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           |                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           d S )Nr   )r/   r0   r   r+   rG   )rG   rS   )r/   r0   )r   r+   r0   rG   r  )rv   r5   r   r  r  r  s         r7   test_safe_sparse_dot_ndr    s    
)


"
"C 	/**A&!!Ava||HaAQ""FFH%%% 	&!!A,''Ava||HaAQ""FFH%%%%%r9   r  c                     g | ]	}|j         
S rB  r  r  s     r7   r  r    r  r9   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          }t           | |          |          }t          ||           |                    d          }t          j        ||          }t          | | |                    }t          ||           d S )Nr   r)   r  )r)   r  r  )r  r5   r  r   r  r  s         r7   test_safe_sparse_dot_2d_1dr    s     )


"
"C2A 	(##Ava||HYYq\\1--FFH%%% 	(##Ava||HQ		!--FFH%%%%%r9   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  r)   r   )r   rZ   r   r  )	r1   r2   r3   r   rl   r   issparsetoarrayr   )r  r5   r   r  r  r  s         r7   !test_safe_sparse_dot_dense_outputr    s    
)


"
"Cb"c<<<Ab"c<<<AuuQxxHQ===F?6""<'78888 &##%% 22222r9   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 rD  r}   ia  r   )class_countsn_drawsr5   i`  r   N)r1   r   r   r   r   )r6   rets     r7   test_approximate_moder  *  sN     	%bh///A
Eq
A
A
AC
 sUCL)))))r9   )anumpyr1   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   scipy.specialr   sklearn.datasetsr   r	   sklearn.utilsr
   sklearn.utils._arpackr   sklearn.utils._testingr   r   r   r   r   r   sklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    sklearn.utils.fixesr!   r"   r#   r$   r%   r&   markparametrizer8   rE   rO   r   r   rg   rk   rw   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r1  r   rP   objectr7  r@  fixturer5   rN  r`  ry  r  r  r  r  r  r  r  r  r  r  r  r  rB  r9   r7   <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	
 "( (# "(F F F % % % 2:rz":;;	+ 	+ <;	+ 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= = =
G 
G 
G 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 * * * * *r9   