
     h              
       &
   d dl Zd dlmZ d dlmZ d dlmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZ d d	lmZ d d
l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m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  d dlm!Z! d dlm"Z" d dl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 Z*d Z+d Z,d Z-d  Z.e	j/        0                    d!ej1        ej2        ej3        ej4        f          d"             Z5e	j/        0                    d!ej1        ej2        ej3        ej4        f          d#             Z6e	j/        0                    d$d%          d&             Z7e	j/        0                    d'g d(          d)             Z8e	j/        0                    d!ej3        ej4        f          d*             Z9d+ Z:d, Z;d- Z<d. Z=d/ Z>d0 Z?d1 Z@d2 ZAe	j/        0                    d3g d4          e	j/        0                    d5g d4          e	j/        0                    d$g d6          e	j/        0                    d7 eBd8                    d9                                                 ZCd: ZDe	j/        0                    d; ejE        g d<ej1        =           ejE        d>d8gej2        =          g ejF        ej2                  f ejE        g d<ej1        =           ejE        d>d8gej4        =          g ejF        ej4                  f ejE        g d<ej1        =           ejE        d?d@geG=          g ejF        eG          fg          dA             ZHdB ZI e	jJ                    dC             ZKe	j/        0                    d!ej3        ej4        g          dD             ZLe	j/        0                    dEg dF          e	j/        0                    dGg dH          e	j/        0                    dIg dJ          dK                                     ZMe	j/        0                    d!ej3        ej4        g          dL             ZNdM ZOdN ZPedO             ZQdP ZRdQ ZSdR ZTdS ZUe	j/        0                    dTejE        ejV        gdUdVgW          e	j/        0                    dXejE        ejV        gdUdVgW          dY                         ZWdZ ZXe	j/        0                    dTejE        ejV        gdUdVgW          d[             ZYe	j/        0                    d\d]d^g          d_             ZZdS )`    N)sparse)linalg)eigsh)expit)gen_batches)_init_arpack_v0)assert_almost_equal)assert_allclose)assert_allclose_dense_sparse)assert_array_equal)assert_array_almost_equal)skip_if_32bit)_mode_eigh)density_safe_accumulator_op)randomized_svd_randomized_eigsh)	row_norms)weighted_mode)	cartesian)log_logistic)svd_flip)_incremental_mean_and_var)_deterministic_vector_sign_flip)softmax)stable_cumsum)safe_sparse_dot)make_low_rank_matrixmake_sparse_spd_matrixc                  |   t           j                            d          } |                     dd          }d|d<   d|d<   t	          j        |          }t	          j        |          }t	          j        |          }t	          j        |          }||||fD ]$}t          |          t          |          k    sJ %d S )Nr   
   r"      size)      )r$      )
nprandomRandomStaterandintr   
csr_matrix
csc_matrix
coo_matrix
lil_matrixr   )rngXX_csrX_cscX_cooX_lilX_s          \/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/sklearn/utils/tests/test_extmath.pytest_densityr:   &   s    
)


"
"CBW%%AAdGAdGa  Ea  Ea  Ea  EeUE* ) )r{{gajj((((() )    c                      t          j        g dg dg          } t          j        t          d          5  t          | d           ddd           dS # 1 swxY w Y   dS )zGCheck that future warning is raised when user enters keyword arguments.r'   r(   r)   )   r$      z^Additional keyword arguments are deprecated in version 1.2 and will be removed in version 1.4.matchr'   )aN)r*   arraypytestwarnsFutureWarningr   )
test_arrays    r9   test_density_deprecated_kwargsrH   5   s    999iii011J	'
 
 
 ! ! 	
a    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   AAA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*   r+   r,   r-   onesshaper   r   r   )r2   xweightsrK   modescoremode2score2s           r9   test_uniform_weightsrT   B   s    
)


"
"CBW%%AgagG * *Atnne%at<<<v4'''5&))))* *r;   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 )Nr?   r   d   r"   r%   r$   r'   rJ   )r*   r+   r,   r-   random_samplerM   r   r   r   ravelsum)mode_resultr2   rN   wrP   rQ   s         r9   test_random_weightsr]   P   s     K
)


"
"CKi00A!'""AAaaa!eHaaa!eHHHMHHH11---KD%t[)))ekkmmQqqq"1"uX\\!__=====r;   c           
      X   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          j        |          }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 )NrW     r$   r"              r   	n_samples
n_featureseffective_ranktail_strengthrandom_stateFcopyfull_matrices)autoLUQRpower_iteration_normalizerrg   fdecimal)r*   float32dtyper   astyperM   r   svdr   kindfloat64r	   dotr   r.   )ru   rc   rd   rankkrs   r3   UsVt
normalizerUasaVas                 r9   check_randomized_svd_low_rankr   b   sV   IJD
ABJ&&aaAGHUOOE 		 	 	 fUf  7y*----- z!5111HAq" 	
U##A	U##A	5u	%	%B* /B /B
#qZa
 
 

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

 a   $qZa
 
 

B :8u$$$$8u$$$$8u$$$$$8=C''''8=C''''8=C''''AeteHb$iAAAAA_/B /Br;   ru   c                 $    t          |            d S N)r   ru   s    r9   'test_randomized_svd_low_rank_all_dtypesr      s    !%(((((r;   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*   )      ?       ra         @r   r%   r   r(   module)n_components	selection)r(   r   r   )r>   r(   valueN)r*   r+   r,   diagrC   r   qrnormalrM   Tr   r   rD   raisesNotImplementedError)ru   r2   r3   rand_roteigvalseigvecss         r9   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r|   )r"   2   rW         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   )rg   r      )r   r   n_iterrg      rn   )r   r   n_oversamplesrg   rp   r   r'   )subset_by_indexNr?   rr   r>   LA)whichtolmaxiterv0r"      )r    r   r   argsortrM   r   r*   
zeros_liker   r   r   r   )r|   rd   r3   r   r   
eigvals_qr
eigvecs_qreigvals_lapackeigvecs_lapackindices
dummy_vecs_r   eigvals_arpackeigvecs_arpacks                  r9   (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 ~r;   zn,rank))r"   r`   rV   )rW   P   )r_   r"   )r_      )r_   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   rg   r   rJ   r?   rr   N)r*   r+   r,   randnr   r   r   r   normrL   rM   r   )nr{   r2   r3   ASVA_reconstructs           r9   &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::::::r;   c                 |   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        ||           }|t           j        u rB|j                            |d          |_        |j                            |d          |_        |j        j        |k    sJ |j        j        |k    sJ t          |t          |d
          |           t          t          j	        |          t          |          |           d S )Nr   rW   r>   r$   Frh   r(   r'   rJ   T)squaredr   )r*   r+   r,   r   rt   rv   rZ   r   r   sqrtint32int64r   r.   indptrr   ru   )ru   r3   	precisionsq_normcsr_index_dtypeXcsrs         r9   test_row_normsr   9  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 %000 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r;   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 )NrW   r_   r$   r"   皙?r   rb   Frj   rl   nonerm   rn   r   rp   rg   g{Gz?ro   r)   rr   	r   rM   r   rw   r   r*   absmaxr	   
rc   rd   r{   r|   r3   r   r~   r   r   saps
             r9   'test_randomized_svd_low_rank_with_noiser   T  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 3r;   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 )NrW   r_   r$   r"   r   r   rb   Frj   r   r   r   r)   rr   r   r   s
             r9   !test_randomized_svd_infinite_rankr   }  s1   IJD
A 		 	 	A 7y*----- j%000GAq!2 3 3
 "qzPQ
 
 
2q
 vaebj!!%%''#---- #qzPQ
 
 
	3 	AbqbE322222%3 3r;   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 )NrW   r_   r>   r"   g      ?r   rb   r)   F)r   	transposerg   Trl   rj   rr   r(   )r   rM   r   r   rw   r	   r*   rz   )rc   rd   r{   r|   r3   U1s1V1U2s2V2U3s3V3U4s4V4s                    r9   )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r;   c            	         t           j                            d          } t          ddd|           }|d|                     dd|j        	          z  z  }d}t          ||dd
d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }t          ||dd
d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }t          j        ||z
            dk    sJ dD ]}	t          ||d|	d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }dD ]}
t          |||
|	d          \  }}}||                    t          j        |                              |                    z
  }t          j
        |d          }dt          j        ||z
            k    sJ d S )Nr   rW   r_   r   re   rg   r)   r   r(   r%   r   r   fro)ordr   )rm   rn   rl   )r$   r"   r      )r*   r+   r,   r   r-   rM   r   rz   r   r   r   r   )r2   r3   r   r}   r~   r   r   error_2error_20r   ierrors               r9   .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 0r;   c                     t           j                            d          } t          ddd|           }d}t          j        t          j        fD ]r} ||          }d                    |j                  }t          j
        t          j        |          5  t          ||d	d
           d d d            n# 1 swxY w Y   sd S )Nr   r   r   r"   r   r$   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.r@   r'   r   )r   rp   )r*   r+   r,   r   r   r1   
dok_matrixformat__name__rD   rE   SparseEfficiencyWarningr   )r2   r3   r   clswarn_msgs        r9   #test_randomized_svd_sparse_warningsr     s   
)


#
#CRBSIIIAL!6#45 Y YCFF,,2F3<,@,@ 	 \&8III 	Y 	Y1l1QWXXXX	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	Y 	YY Ys   B44B8	;B8	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"   Frj   )u_based_decisionr?   rr   T)
r*   r+   r,   r   r   rw   r   r	   rz   r   )rsrc   rd   r3   r}   r   r   r   r   XTr   r   U_flip1V_flip1U_flip2V_flip2s                   r9   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Dr;   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       @ra   r   r(   T)   	flip_signrg   r"   )r*   rC   r   ranger	   rz   r   eye)rB   u1r   v1seedu2r   v2s           r9   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 9r;   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   rJ   r'   )r*   r   r   all)uvu_basedv_baseds       r9   max_loading_is_positivezMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positive,  s    
 6!99==a=((AEEqEMM9>>@@6!99==a=((AEEqEMM9>>@@r;   r   r"   r   r)   Tr   r	  )r
  r   rg   )r*   arangereshaper   )	r  mat	u_flippedr   	v_flippedr  r  u_flipped_with_transposev_flipped_with_transposes	            r9   ,test_randomized_svd_sign_flip_with_transposer"  '  s    
      )F


#
#B
+
+C -S!tRSTTTIq)..y)DDGWNN7; =KQ$$Q= = =9a!9 /. ": GW NN7;r;   r   )r   rW   ,  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_driverrg   gesvdgMbP?)atolrtol)r*   r+   r,   randr   rM   r
   )r   r$  r|   r  r2   r3   r  r   vt1r  r   vt2s               r9   !test_randomized_svd_lapack_driverr.  H  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0r;   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 )Nr=   r>   r$   r?   r`   )r'   r>   r?   )r'   r>   r`   )r'   r$   r?   )r'   r$   r`   )r(   r>   r?   )r(   r>   r`   )r(   r$   r?   )r(   r$   r`   )r)   r>   r?   )r)   r>   r`   )r)   r$   r?   )r)   r$   r`   r)   )r*   rC   r   r   r  newaxis)axestrue_outoutrN   s       r9   test_cartesianr4  b  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9r;   zarrays, output_dtyper=   r   r>   rN   yc                 >    t          |           }|j        |k    sJ dS )z8Check that the cartesian product works with mixed types.N)r   ru   )arraysoutput_dtypeoutputs      r9   test_cartesian_mix_typesr:    s*    & vF<<''''''r;   c                      d } t          j        ddd          }t          t          |           | |                     t          j        ddg          }t          t          |          ddg           d S )	Nc                 D    t          j        t          |                     S r   )r*   logr   )rN   s    r9   naive_log_logisticz1test_logistic_sigmoid.<locals>.naive_log_logistic  s    veAhhr;   r(   r   g      Yg      Y@ir   )r*   linspacer   r   rC   )r>  rN   	extreme_xs      r9   test_logistic_sigmoidrB    s}          	B2Al1oo/A/A!/D/DEEE&%))Il955ayAAAAAr;   c                  @    t           j                            d          S )Nr   )r*   r+   r,    r;   r9   r2   r2     s    9  $$$r;   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rO   rK   r(   )r+  rv   rM   r   r*   averager	   )
r2   ru   multr3   rH  meanvarr   expected_meanexpected_vars
             r9   2test_incremental_weighted_mean_and_variance_simplerP    s    Dr!!%((4/AHHQWQZ((4/M,Q1a}UUULD#qJq-a@@@M

1a4Q777-:JJ  m,,,\*****r;   rL  )r       cAg    crM  )r'   :0yE>g     j@zweight_loc, weight_scale))r   r'   )r   rR  )r'   rR  )r"   r'   )rQ  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   rG  ư>)r)  )rM   r   r   r
   )
r3   rH  rN  rO  r   
chunk_size	last_meanlast_weight_sumlast_varbatchs
             r9   _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>>>>>	? 	?r;   )rW   r   r   )locscaler&   rI  r(   rJ   )r   r   r*   rJ  rL   rL  rM  )rL  rM  
weight_locweight_scaler2   r[  r&   weightr3   rN  rO  ones_weights               r9   +test_incremental_weighted_mean_and_variancerb    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8r;   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     @re  re  re       @rg  rg  rg  r(   r(   r(   r(   r   r)   r>      rj  rj  rj    rl  rl  rl  r#  r#  r#  r#  rj  rl  r#  rG  )r*   rC   r   rL   rv   nanr   r
   )ru   	old_meansold_variancesold_weight_sumsample_weights_Xsample_weights_X_nanr3   X_nanX_meansX_variancesX_countX_nan_meansX_nan_variancesX_nan_counts                 r9   6test_incremental_weighted_mean_and_variance_ignore_nanr{    s   55566IH===>>MXlll"(;;;Nwqzz71::
			3335I5I5IJ	 	fUmm  H"&#s#VS#s##rvs##sBF#		
  fUmm 
 %>	9m^CS% % %!G[' 1J*1 1 1-K+ K)))O[111K)))))r;   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  rj  rl  r#  r(   r   rJ   r'   r   r?   )
r*   rC   r   rL  rM  fullrM   r   r   r	   )
r   idxX1X2ro  rp  old_sample_countfinal_meansfinal_variancesfinal_counts
             r9   )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0r;   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 )Nrd  rf  rh  r   ri  rk  rm  rj  rl  r#  )r*   rC   r   rn  r   r
   )ro  rp  r  r3   rt  ru  rv  rw  rx  ry  rz  s              r9   -test_incremental_mean_and_variance_ignore_nanr  #  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)))))r;   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   rJ   )rM  )r   s    r9   np_varz=test_incremental_variance_numerical_stability.<locals>.np_varC  s    uu!u}}r;   c                     | j         d         }| dz                      d          |z  }|                     d          |z  dz  }||z
  S )Nr   r(   rJ   )rM   rZ   )r3   r   exp_x2expx_2s       r9   one_pass_varzCtest_incremental_variance_numerical_stability.<locals>.one_pass_varH  sN    GAJQ$##a'%%Q%--!#)r;   c                     |                      d          }|                                 }t          j         ||z
  dz  d          S )Nr   rJ   r(   )rL  ri   r*   )r3   rL  Ys      r9   two_pass_varzCtest_incremental_variance_numerical_stability.<locals>.two_pass_varQ  s=    vv1v~~FFHHwDQQ////r;   c                 x    |dz   }|t          |          z  }| |z  ||z  z   }||z  | |z
  | |z
  z  |z  z   }|||fS )Nr'   )float)rN   rW  last_variancelast_sample_countupdated_sample_countsamples_ratioupdated_meanupdated_variances           r9   naive_mean_variance_updatezQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updateY  sp    014)E2F,G,GG//)m2KKM)9}\!125IIJ 	 -/CCCr;   r   r(   i'  g    חAr   gh㈵>r   rJ   rU  r'   )r*   rC   ry   r=  r}  vstackr   r   zerosr  rM   rL  r   r   r  r   r   )r  r  r  r  r   rd   rc   x1x2A0A1r   rL  rM  r   r   s                   r9   -test_incremental_variance_numerical_stabilityr  ?  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((,,........r;   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'   rJ   r   r?   )r*   r+   r,   r   rM   r  hstackziprL  rM  r}  r   r   r	   r   )r2   r3   rc   rd   
batch_sizestepsr   jrZ  incremental_meansincremental_variancesincremental_countsample_countresultcalculated_meanscalculated_variancess                   r9   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,????'	@@ @r;   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'   rJ   r   )r*   r+   r,   r   argmaxr   r   r   signr  rM   r0  )datamax_abs_rowsdata_flippedmax_rowssignss        r9   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Ar;   c                  *   t           j                            d          } |                     dd          }t          j        |          }t          j        |d                              d          }t          t          |          ||z             d S )Nr   r)   r$   r'   rJ   )r   r'   )	r*   r+   r,   r   exprZ   r  r   r   )r2   r3   exp_X	sum_exp_Xs       r9   test_softmaxr    sx    
)


"
"C		!QAF1IIEu1%%%--g66Igajj%)*;<<<<<r;   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  rF  )r$   r$   r$   r%   rJ   r'   r(   )r   r   r*   cumsumr+   r,   r+  rD   rE   RuntimeWarningr-   )rr   s     r9   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_array_constrdenser   )idsB_array_constrc                 2   t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          } ||          }t          ||d          }t          ||           d S )Nr      r"   )r"   r   Tdense_outputr*   r+   r,   rX   rz   r   r
   )r  r  r2   r   Bexpectedactuals          r9   test_safe_sparse_dot_2dr    s     )


"
"C(##A(##Ava||HqAqAQ555FFH%%%%%r;   c                     t           j                            d          } |                     d          }|                     d          }t          j        ||          }t          j        |          }t          ||          }t          ||           |                     d          }|                     d          }t          j        ||          }t          j        |          }t          ||          }t          ||           d S )Nr   )r(   r)   r>   r$   r?   )r?   r`   )r(   r)   )r>   r$   r)   r?   )	r*   r+   r,   rX   rz   r   r.   r   r
   )r2   r   r  r  r  s        r9   test_safe_sparse_dot_ndr    s    
)


"
"C 	/**A&!!Ava||H!AQ""FFH%%% 	&!!A,''Ava||H!AQ""FFH%%%%%r;   c                    t           j                            d          }|                    d          }|                    d          }t          j        ||          } | |          }t          ||          }t          ||           |                    d          }t          j        ||          } | |          }t          ||          }t          ||           d S )Nr   r"   r  )r"   r  r  )r  r2   r  r   r  r  s         r9   test_safe_sparse_dot_2d_1dr    s     )


"
"C2A 	(##Ava||HqAQ""FFH%%% 	(##Ava||HqAQ""FFH%%%%%r;   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   rg   r   r  )	r*   r+   r,   r   rz   r   issparsetoarrayr   )r  r2   r   r  r  r  s         r9   !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2r;   )[numpyr*   scipyr   r   scipy.sparse.linalgr   scipy.specialr   rD   sklearn.utilsr   sklearn.utils._arpackr   sklearn.utils._testingr	   r
   r   r   r   r   sklearn.utils.fixesr   r   sklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r   r   r   r   sklearn.datasetsr   r    r:   rH   rT   r]   r   markparametrizer   r   rt   ry   r   r   r   r   r   r   r   r   r   r   r  r  r"  r  r.  r4  rC   ru   objectr:  rB  fixturer2   rP  rb  r{  r  r  r  r  r  r  r  r.   r  r  r  r  rD  r;   r9   <module>r     s                   % % % % % %        % % % % % % 1 1 1 1 1 1 6 6 6 6 6 6 2 2 2 2 2 2 ? ? ? ? ? ? 5 5 5 5 5 5 < < < < < < 0 0 0 0 0 0 , , , , , , , , ? ? ? ? ? ? ? ? C C C C C C C C + + + + + + / / / / / / + + + + + + . . . . . . * * * * * * ; ; ; ; ; ; A A A A A A ) ) ) ) ) ) / / / / / / 1 1 1 1 1 1 I I I I I I I I) ) )
! 
! 
!* * *> > >$KB KB KB\ 28RXrz2:"NOO) ) PO) 28RXrz2:"NOO@ @ PO@, 566DM DM 76DMN   
 
; ;
 
;4 2:rz":;;P P <;P4&3 &3 &3R&3 &3 &3R     @*0 *0 *0ZY Y YE E E2	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	
 "( (# "(	B 	B 	B % % % 2:rz":;;+ + <;+ 00// Q Q Q $9 $9  0/ 10
$9N 2:rz":;;!* !* <;!*H1 1 14* * *8 E/ E/ E/P@ @ @@B B B= = =
G 
G 
G rx!23'89L    rx!23'89L   & &  && & &( rx!23'89L   & & &( $773 3 873 3 3r;   