
    0Ph              
       >   d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZ d d	lmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ej.        /                    de(e)z   e*z   e,z             d             Z0d Z1d Z2ej.        /                    dej3        ej4        ej5        ej6        f          d             Z7ej.        /                    dej3        ej4        ej5        ej6        f          d             Z8ej.        /                    dd          d             Z9ej.        /                    dg d          d             Z:ej.        /                    dej5        ej6        f          ej.        /                    de*          d                         Z;d Z<d Z=d Z>d Z?ej.        /                    de+e,z             d             Z@d ZAej.        /                    d d!d"g          d#             ZBd$ ZCd% ZDej.        /                    d&g d'          ej.        /                    d(g d'          ej.        /                    dg d)          ej.        /                    d* eEd+                    d,                                                 ZFd- ZGej.        /                    d. ejH        g d/ej3        0           ejH        d1d+gej4        0          g ejI        ej4                  f ejH        g d/ej3        0           ejH        d1d+gej6        0          g ejI        ej6                  f ejH        g d/ej3        0           ejH        d2d3geJ0          g ejI        eJ          fg          d4             ZK ejL                    d5             ZMej.        /                    dej5        ej6        g          d6             ZNej.        /                    d7g d8          ej.        /                    d9g d:          ej.        /                    d;g d<          d=                                     ZOej.        /                    dej5        ej6        g          d>             ZPd? ZQd@ ZRedA             ZSdB ZTdC ZUdD ZVdE ZWej.        /                    dFejH        ge*dGgdH e*D             z   I          ej.        /                    dJejH        ge*dGgdK e*D             z   I          dL                         ZXej.        /                    de*          dM             ZYej.        /                    dNejH        ge*dGgdO e*D             z   I          dP             ZZej.        /                    dQdRdSg          dT             Z[dU Z\dS )V    N)linalgsparse)eigh)eigsh)make_low_rank_matrixmake_sparse_spd_matrix)gen_batches)_init_arpack_v0)assert_allcloseassert_allclose_dense_sparseassert_almost_equalassert_array_almost_equalassert_array_equalskip_if_32bit)_approximate_mode_deterministic_vector_sign_flip_incremental_mean_and_var_randomized_eigsh_safe_accumulator_op	cartesiandensityrandomized_svd	row_normssafe_sparse_dotsoftmaxstable_cumsumsvd_flipweighted_mode)COO_CONTAINERSCSC_CONTAINERSCSR_CONTAINERSDOK_CONTAINERSLIL_CONTAINERS_modesparse_containerc                     t           j                            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/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr6   /   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)	r/   r0   r1   r2   onesshaper$   r   r   )r3   xweightsr:   modescoremode2score2s           r5   test_uniform_weightsrC   <   s    
)


"
"CBW%%AgagG * *Atnne%at<<<v4'''5&))))* *r7   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,   r9   )r/   r0   r1   r2   random_sampler<   r   r   r   ravelsum)mode_resultr3   r=   wr?   r@   s         r5   test_random_weightsrM   J   s     K
)


"
"CKi00A!'""AAaaa!eHaaa!eHHHMHHH11---KD%t[)))ekkmmQqqq"1"uX\\!__=====r7   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 )NrG     r)   r'              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrX   fdecimal)r/   float32rN   r   astyper<   r   svdr   kindfloat64r   dotr!   )rN   rT   rU   rankkrd   r4   UsVt
normalizerUasaVacsr_containers                  r5   'test_randomized_svd_low_rank_all_dtypesru   \   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r7   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*   )      ?       rR         @rN   r*   r   r-   module)n_components	selection)r-   rz   ry   )   r-   valueN)r/   r0   r1   diagarrayr   qrnormalr<   Tr   r   pytestraisesNotImplementedError)rN   r3   r4   rand_roteigvalseigvecss         r5   test_randomized_eigshr      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rl   )r'   2   rG         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   )rX   r|      )r}   r~   n_iterrX      r_   )r}   r   n_oversamplesrX   ra   r~   r,   )subset_by_indexNrE   rc   r   LA)whichtolmaxiterv0r'      )r   r   r   argsortr<   r   r/   
zeros_liker   r   r
   r   )rl   rU   r4   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r5   (test_randomized_eigsh_compared_to_othersr      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 ~r7   zn,rank))r'   rQ   rF   )rG   P   )rP   r'   )rP      )rP   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}   rX   r   r9   rE   rc   N)r/   r0   r1   randnr   r   r   r   normr;   r<   r   )nrk   r3   r4   ASVA_reconstructs           r5   &test_randomized_eigsh_reconst_low_rankr     s    $ !8888 )


#
#C		!TA	ACA QTDDDDAqbinnQQn779I9IJJJacAgrwrwqw/?/?'@'@AAA

NQS(M mQ::::::r7   rt   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 )Nrw   rG   r   r)   FrY   r-   r,   r9   T)squaredr{   )r/   r0   r1   r   re   rf   rJ   r   r   sqrtint32int64indptrr   rN   )rN   rt   r4   	precisionsq_normcsr_index_dtypeXcsrs          r5   test_row_normsr   0  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r7   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 )NrG   rP   r)   r'   皙?r   rS   Fr[   r]   noner^   r_   r   ra   rX   g{Gz?r`   r.   rc   	r   r<   r   rg   r   r/   absmaxr   
rT   rU   rk   rl   r4   r   rn   rp   rr   saps
             r5   'test_randomized_svd_low_rank_with_noiser   L  s.   IJD
A 		 	 	A 7y*----- j%000GAq!2 3 3
 "qzPQ
 
 
2q
 vaebj!!%%''$.... #qZa
 
 
	3
 	AbqbE322222#3 3r7   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 )NrG   rP   r)   r'   rx   r   rS   Fr[   r   r   r   r.   rc   r   r   s
             r5   !test_randomized_svd_infinite_rankr   u  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 3r7   c            
         d} d}d}d}t          | ||dd          }|j        | |fk    sJ t          ||dd	d
          \  }}}t          ||ddd
          \  }}	}
t          ||ddd
          \  }}}t          j        |d	          \  }}}t          ||d |         d           t          |	|d |         d           t          ||d |         d           t          t          j        ||          t          j        |d d d |f         |d |d d f                   d           t          t          j        ||
          t          j        |d d d |f         |d |d d f                   d           t          |	|           d S )NrG   rP   r   r'   g      ?r   rS   r.   F)r   	transposerX   Tr]   r[   rc   r-   )r   r<   r   r   rg   r   r/   rj   )rT   rU   rk   rl   r4   U1s1V1U2s2V2U3s3V3U4s4V4s                    r5   )test_randomized_svd_transpose_consistencyr     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r7   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 )Nrw   rG   rP   r   rV   rX   r.   r   r-   r*   r   r   fro)ordr   )r^   r_   r]   )r)   r'   r      )r/   r0   r1   r   r2   r<   r   rj   r   r   r   r   )r3   r4   r}   rm   rn   ro   r   error_2error_20rp   ierrors               r5   .test_randomized_svd_power_iteration_normalizerr     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 0r7   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 )Nrw   r   r   r'   r   r)   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.)matchr,   r   )r   ra   )r/   r0   r1   r   format__name__r   warnsr   SparseEfficiencyWarningr   )r%   r3   r4   r}   warn_msgs        r5   #test_randomized_svd_sparse_warningsr     s    )


#
#CRBS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_decisionrE   rc   T)
r/   r0   r1   r   r   rg   r   r   rj   r   )rsrT   rU   r4   rm   r   ro   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r5   test_svd_flipr     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Dr7   zn_samples, n_features)r.   r   )r   r.   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   r9   r,   )r/   r0   r1   r   r   rg   r   argmaxr   aranger<   all)rT   rU   global_random_seedr   r4   rm   r   ro   r   max_abs_U1_row_idx_for_colr   max_abs_V2_col_idx_for_rows               r5   test_svd_flip_max_abs_colsr     s%   			1	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Nr7   c                  .   t          j        ddgddgg          } t          | ddd          \  }}}t          d          D ]}t          | dd|          \  }}}t	          ||           t	          ||           t	          t          j        ||z  |          |            t	          t          j        |j        |          t          j        d                     t	          t          j        |j        |          t          j        d                     d S )	Ng       @rR   rx   r-   T)   	flip_signrX   r'   )r/   r   r   ranger   rj   r   eye)au1r   v1seedu2r   v2s           r5   test_randomized_svd_sign_flipr  $  s   
3*sCj)**A12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 9r7   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   r9   r,   )r/   r   r   r   )uvu_basedv_baseds       r5   max_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive5  s    
 6!99==a=((AEEqEMM9>>@@6!99==a=((AEEqEMM9>>@@r7   r   r'   r   r.   Tr   r  )r  r   rX   )r/   r   reshaper   )	r  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r5   ,test_randomized_svd_sign_flip_with_transposer  0  s    
      )F


#
#B
+
+C -S!tRSTTTIq)..y)DDGWNNN =KQ$$Q= = =9a!9 /. ": GW NNNr7   r   )r   rG   ,  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_driverrX   gesvdgMbP?)atolrtol)r/   r0   r1   randr   r<   r   )r   r  rl   r
  r3   r4   r  r   vt1r  r   vt2s               r5   !test_randomized_svd_lapack_driverr'  Q  s     )


%
%CAA !AqQQQKBC AqQQQKBC 8rxB....8rxB....9	!!!!C14000000r7   c                     t          j        g d          t          j        ddg          t          j        ddg          f} t          j        g dg dg dg d	g d
g dg dg dg dg dg dg dg          }t          |           }t          ||           t          j        d          }t          |d d t           j        f         t          |f                     d S )Nr,   r-   r.   r   r)   rE   rQ   )r,   r   rE   )r,   r   rQ   )r,   r)   rE   )r,   r)   rQ   )r-   r   rE   )r-   r   rQ   )r-   r)   rE   )r-   r)   rQ   )r.   r   rE   )r.   r   rQ   )r.   r)   rE   )r.   r)   rQ   r.   )r/   r   r   r   r   newaxis)axestrue_outoutr=   s       r5   test_cartesianr.  k  s     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9r7   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   rN   )arraysoutput_dtypeoutputs      r5   test_cartesian_mix_typesr4    s*    & vF<<''''''r7   c                  @    t           j                            d          S )Nrw   )r/   r0   r1    r7   r5   r3   r3     s    9  $$$r7   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$  rf   r<   r   r/   averager   )
r3   rN   multr4   r:  meanvarr   expected_meanexpected_vars
             r5   2test_incremental_weighted_mean_and_variance_simplerB    s    Dr!!%((4/AHHQWQZ((4/M,Q1a}UUULD#qJq-a@@@M:adMBBB]TUEUULm,,,\*****r7   r>  )r       cAg    cr?  )r,   :0yE>g     j@zweight_loc, weight_scale))r   r,   )r   rD  )r,   rD  )r'   r,   )rC  r,   c                    d }d}|                     |||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   r9  ư>)r"  )r<   r	   r   r   )
r4   r:  r@  rA  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r5   _assertz<test_incremental_weighted_mean_and_variance.<locals>._assert  s    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>>>>>	? 	?r7   )rG   r   r   )locscaler+   r;  r-   r9   )r   r   r/   r<  r;   r>  r?  )r>  r?  
weight_locweight_scaler3   rM  r+   weightr4   r@  rA  ones_weights               r5   +test_incremental_weighted_mean_and_variancerT    s   ? ? ? DZZJlaZ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8r7   c           	         t          j        g d          }t          j        g d          }t          j        g dt           j                  }t          j        d          }t          j        d          }t          j        g dg dg d	g                              |           }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     @rW  rW  rW       @rY  rY  rY  r-   r-   r-   r-   r{   r.   r      r\  r\  r\    r^  r^  r^  r  r  r  r  r\  r^  r  r9  )r/   r   r   r;   rf   nanr   r   )rN   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr4   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r5   6test_incremental_weighted_mean_and_variance_ignore_nanrm    s   5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)))))r7   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  r\  r^  r  r-   r   r9   r,   r{   rE   )
r/   r   r   r>  r?  fullr<   r   r   r   )
r   idxX1X2ra  rb  old_sample_countfinal_meansfinal_variancesfinal_counts
             r5   )test_incremental_variance_update_formulasrw    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0r7   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 )NrV  rX  rZ  r{   r[  r]  r_  r\  r^  r  )r/   r   r   r`  r   r   )ra  rb  rs  r4   rf  rg  rh  ri  rj  rk  rl  s              r5   -test_incremental_mean_and_variance_ignore_nanry    s?   5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)))))r7   c                     d } d }d }d }d}d}d}t          j        dt           j        	          }t          j        d
t           j        	          }t          j        |dz  |f|t           j        	          }	t          j        |dz  |f|t           j        	          }
t          j        |	|
f          }t          j         | |           ||          z
                                            |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   r9   )r?  )r   s    r5   np_varz=test_incremental_variance_numerical_stability.<locals>.np_var=  s    uu!u}}r7   c                     | j         d         }| dz                      d          |z  }|                     d          |z  dz  }||z
  S )Nr   r-   r9   )r<   rJ   )r4   r   exp_x2expx_2s       r5   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_varB  sN    GAJQ$##a'%%Q%--!#)r7   c                     |                      d          }|                                 }t          j         ||z
  dz  d          S )Nr   r9   r-   )r>  rZ   r/   )r4   r>  Ys      r5   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_varK  s=    vv1v~~FFHHwDQQ////r7   c                 x    |dz   }|t          |          z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr,   )float)r=   rI  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r5   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updateS  sp    014)E2F,G,GG//)m2KKM)9}\!125IIJ 	 -/CCCr7   r   r-   i'  g    חAr{   gh㈵>r   r9   rG  r,   )r/   r   ri   logro  vstackr   r   zerosr  r<   r>  r   r   r  r   r   )r|  r  r  r  r   rU   rT   x1x2A0A1r   r>  r?  r   r   s                   r5   -test_incremental_variance_numerical_stabilityr  9  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((,,........r7   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,   r9   r{   rE   )r/   r0   r1   r   r<   r   hstackzipr>  r?  ro  r   r   r   r   )r3   r4   rT   rU   
batch_sizestepsr   jrL  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r5   test_incremental_variance_ddofr    s   
)


%
%C		"bA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,????'	@@ @r7   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,   r9   r   )r/   r0   r1   r   r   r   r   r   signr  r<   r*  )datamax_abs_rowsdata_flippedmax_rowssignss        r5   test_vector_sign_flipr    s    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Ar7   c                  *   t           j                            d          } |                     dd          }t          j        |          }t          j        |d                              d          }t          t          |          ||z             d S )Nr   r.   r)   r,   r9   )r   r,   )	r/   r0   r1   r   exprJ   r  r   r   )r3   r4   exp_X	sum_exp_Xs       r5   test_softmaxr    sx    
)


"
"C		!QAF1IIEu1%%%--g66Igajj%)*;<<<<<r7   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  r8  )r)   r)   r)   r*   r9   r,   r-   )r   r   r/   cumsumr0   r1   r$  r   r   RuntimeWarningr2   )rr   s     r5   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 r6  r   .0	containers     r5   
<listcomp>r        HHHIY'HHHr7   )idsB_containerc                     g | ]	}|j         
S r6  r  r  s     r5   r  r    r  r7   c                 2   t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          } ||          }t          ||d          }t          ||           d S )Nr      r'   )r'   r   Tdense_outputr/   r0   r1   rH   rj   r   r   )r  r  r3   r   Bexpectedactuals          r5   test_safe_sparse_dot_2dr    s     )


"
"C(##A(##Ava||HAAAAQ555FFH%%%%%r7   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           |                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           d S )Nr   )r-   r.   r   r)   rE   )rE   rQ   )r-   r.   )r   r)   r.   rE   r  )rt   r3   r   r  r  r  s         r5   test_safe_sparse_dot_ndr    s    
)


"
"C 	/**A&!!Ava||HaAQ""FFH%%% 	&!!A,''Ava||HaAQ""FFH%%%%%r7   r  c                     g | ]	}|j         
S r6  r  r  s     r5   r  r    r  r7   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          }t           | |          |          }t          ||           |                    d          }t          j        ||          }t          | | |                    }t          ||           d S )Nr   r'   r  )r'   r  r  )r  r3   r  r   r  r  s         r5   test_safe_sparse_dot_2d_1dr    s     )


"
"C2A 	(##Ava||HYYq\\1--FFH%%% 	(##Ava||HQ		!--FFH%%%%%r7   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   rX   r   r  )	r/   r0   r1   r   rj   r   issparsetoarrayr   )r  r3   r   r  r  r  s         r5   !test_safe_sparse_dot_dense_outputr    s    
)


"
"Cb"c<<<Ab"c<<<AuuQxxHQ===F?6""<'78888 &##%% 22222r7   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 r8  r{   ia  r   )class_countsn_drawsr3   i`  r   N)r/   r   r   r   r   )r4   rets     r5   test_approximate_moder    sN     	%bh///A
Eq
A
A
AC
 sUCL)))))r7   )]numpyr/   r   scipyr   r   scipy.linalgr   scipy.sparse.linalgr   sklearn.datasetsr   r   sklearn.utilsr	   sklearn.utils._arpackr
   sklearn.utils._testingr   r   r   r   r   r   sklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.utils.fixesr   r    r!   r"   r#   r$   markparametrizer6   rC   rM   r   r   re   ri   ru   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r'  r.  r   rN   objectr4  fixturer3   rB  rT  rm  rw  ry  r  r  r  r  r  r  r  r  r  r  r6  r7   r5   <module>r     sR	                              % % % % % % 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":;;	+ 	+ <;	+ 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 * * * * *r7   