U
    _»{jE�  ã                
   @   sV  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( d dl)m*Z* dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/ej0 1dej2ej3ej4ej5f¡dd„ ƒZ6ej0 1dej2ej3ej4ej5f¡dd„ ƒZ7ej0 1dd¡dd„ ƒZ8ej0 1dd d!d"d#d$d%g¡d&d'„ ƒZ9ej0 1dej4ej5f¡d(d)„ ƒZ:d*d+„ Z;d,d-„ Z<d.d/„ Z=d0d1„ Z>d2d3„ Z?d4d5„ Z@d6d7„ ZAd8d9„ ZBej0 1d:d;d<d=g¡ej0 1d>d;d<d=g¡ej0 1dd?d@d;g¡ej0 1dAeCdBƒ¡dCdD„ ƒƒƒƒZDdEdF„ ZEej0 1dGejFdHdIdJgej2dK�ejFdLdBgej3dK�ge Gej3¡fejFdHdIdJgej2dK�ejFdLdBgej5dK�ge Gej5¡fejFdHdIdJgej2dK�ejFdMdNgeHdK�ge GeH¡fg¡dOdP„ ƒZIdQdR„ ZJe K¡ dSdT„ ƒZLej0 1dej4ej5g¡dUdV„ ƒZMej0 1dWd dXdYg¡ej0 1dZdHd[d\g¡ej0 1d]d^d_d`dadbg¡dcdd„ ƒƒƒZNej0 1dej4ej5g¡dedf„ ƒZOdgdh„ ZPdidj„ ZQedkdl„ ƒZRdmdn„ ZSdodp„ ZTdqdr„ ZUdsdt„ ZVej0j1duejFejWgdvdwgdx�ej0j1dyejFejWgdvdwgdx�dzd{„ ƒƒZXd|d}„ ZYej0j1duejFejWgdvdwgdx�d~d„ ƒZZej0 1d€d�d‚g¡dƒd„„ ƒZ[dS )…é    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)Ú_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)Ú_modec                  C   s|   t j d¡} | jddd�}d|d< d|d< t |¡}t |¡}t |¡}t |¡}||||fD ]}t	|ƒt	|ƒks^t
‚q^d S )Nr   é
   ©r    é   ©Úsize)é   é   )r"   é   )ÚnpÚrandomÚRandomStateÚrandintr   Ú
csr_matrixZ
csc_matrixZ
coo_matrixÚ
lil_matrixr   ÚAssertionError)ÚrngÚXZX_csrZX_cscZX_cooZX_lilZX_© r1   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/utils/tests/test_extmath.pyÚtest_density+   s    



r3   c               	   C   sD   t  dddgdddgg¡} tjtdd�� t| dd	� W 5 Q R X 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.©Úmatch)ÚaN)r(   ÚarrayÚpytestÚwarnsÚFutureWarningr   )Z
test_arrayr1   r1   r2   Útest_density_deprecated_kwargs:   s    ýr=   c                  C   sh   t j d¡} | jddd�}t  |j¡}dD ]8}t||ƒ\}}t|||d�\}}t||ƒ t||ƒ q*d S )Nr   r    r!   r#   )Nr   r%   ©Úaxis)	r(   r)   r*   r+   ÚonesÚshaper   r   r   )r/   ÚxÚweightsr?   ÚmodeÚscoreZmode2Zscore2r1   r1   r2   Útest_uniform_weightsG   s    
rF   c                  C   sž   d} t j d¡}|j| dd�}| |j¡}| |d d …d d…f< |d d …d d…f  d7  < t||dd�\}}t|| ƒ t| 	¡ |d d …d d…f  
d¡ƒ d S )Nr5   r   ©éd   r    r#   r"   r%   r>   )r(   r)   r*   r+   Úrandom_samplerA   r   r   r   ZravelÚsum)Zmode_resultr/   rB   ÚwrD   rE   r1   r1   r2   Útest_random_weightsU   s    
rL   c              	   C   sh  d}d}d}d}| t jkrdnd}t  | ¡} t|||ddd�j| d	d
�}|j||fksZt‚tj|d	d�\}}}	|j| d	d
�}|j| d	d
�}|	j| d	d
�}	dD �]Ä}
t	|||
dd�\}}}| j
dkrî|j| ksÐt‚|j| ksÞt‚|j| ksìt‚n4|jt jksþt‚|jt jk�st‚|jt jk�s"t‚|j||fk�s6t‚|j|fk�sHt‚|j||fk�s\t‚t|d |… ||d� tt  |d d …d |…f |	d |…d d …f ¡t  ||¡|d� t |¡}t	|||
dd�\}}}| j
dk�r|j| k�sìt‚|j| k�süt‚|j| k�sDt‚n6|jj
dk�s t‚|jj
dk�s2t‚|jj
dk�sDt‚t|d |… |d |… |d� qœd S )NrH   éô  r"   r    é   ç        r   ©Ú	n_samplesÚ
n_featuresÚeffective_rankZtail_strengthÚrandom_stateF©Úcopy©Zfull_matrices)ÚautoÚLUÚQR©Úpower_iteration_normalizerrT   Úf©Údecimal)r(   Úfloat32Údtyper   ÚastyperA   r.   r   Úsvdr   ÚkindÚfloat64r   Údotr   r,   )ra   rQ   rR   ÚrankÚkr_   r0   ÚUÚsÚVtÚ
normalizerZUaÚsaZVar1   r1   r2   Úcheck_randomized_svd_low_rankg   sv    
û ú
   ÿ
* 
 ÿ
   ÿrn   ra   c                 C   s   t | ƒ d S ©N)rn   ©ra   r1   r1   r2   Ú'test_randomized_svd_low_rank_all_dtypesµ   s    rq   c              	   C   s´   t j d¡}t  t jddddg| d�¡}t j |j|jd�¡d }|| |j	 }t
|d	d
d�\}}|jdkspt‚t|ddgƒ |jdksŒt‚t t¡� t
|d	dd� W 5 Q R X dS )z@Test that `_randomized_eigsh` returns the appropriate componentsé*   ç      ð?g       ÀrO   g      @rp   r#   r   r&   Úmodule)Ún_componentsÚ	selection)r&   )r4   r&   ÚvalueN)r(   r)   r*   Údiagr9   r   ZqrÚnormalrA   ÚTr   r.   r   r:   ZraisesÚNotImplementedError)ra   r/   r0   Zrand_rotÚeigvalsÚeigvecsr1   r1   r2   Útest_randomized_eigshº   s    r~   rh   )r    é2   rH   éÇ   éÈ   c              	   C   sœ  d}t |dd�}t|| dddd�\}}t|| dddddd	�\}}t|||  |d
 fd�\}}| ¡ ddd… }	||	 }|dd…|	f }|j| fks–t‚t||dd� t||dd� |j|| fksÄt‚t |¡j	}
t
||
ƒ\}}t
||
ƒ\}}t
||
ƒ\}}t||dd� t||dd� | |k �r˜t|dd�}t|| ddd|d�\}}| ¡ ddd… }	||	 }t||dd� |dd…|	f }t
||
ƒ\}}t||dd� 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   )rT   rt   é   )ru   rv   Ún_iterrT   é   rZ   )ru   rƒ   Zn_oversamplesrT   r\   rv   r%   )Zsubset_by_indexNéÿÿÿÿr5   r^   r4   ZLA)ÚwhichÚtolÚmaxiterÚv0r    é   )r   r   r   ZargsortrA   r.   r   r(   Z
zeros_likerz   r   r
   r   )rh   rR   r0   r|   r}   Z
eigvals_qrZ
eigvecs_qrZeigvals_lapackZeigvecs_lapackÚindicesZ
dummy_vecsÚ_r‰   Zeigvals_arpackZeigvecs_arpackr1   r1   r2   Ú(test_randomized_eigsh_compared_to_othersÑ   sf        ÿ
ù
 ÿ

     ÿ
r�   zn,rank)r    rN   rG   )rH   éP   )rM   r    )rM   éú   )rM   i�  c                 C   s¢   || k st ‚tj d¡}| | |¡}||j }t|||d�\}}ttjj	|dd�t 
|j¡ƒ t|j| t t 
|j¡¡ƒ |t |¡ |j }t||d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   )ru   rT   r   r>   r5   r^   N)r.   r(   r)   r*   Úrandnrz   r   r   r   Únormr@   rA   rx   )Únrg   r/   r0   ÚAÚSÚVZA_reconstructr1   r1   r2   Ú&test_randomized_eigsh_reconst_low_rank  s    
r—   c                 C   s  t j d¡ dd¡}| t jkr$d}nd}|j| dd�}|d jdd	�}t|t|d
d�|ƒ tt  	|¡t|ƒ|ƒ t j
t jfD ]Š}tj|| d�}|t jkr¼|jj|dd�|_|jj|dd�|_|jj|ksÌt‚|jj|ksÜt‚t|t|d
d�|ƒ tt  	|¡t|ƒ|ƒ q|d S )Nrr   rH   r4   r"   FrU   r&   r%   r>   T)Zsquaredrp   )r(   r)   r*   r‘   r`   rb   rJ   r   r   ÚsqrtÚint32Úint64r   r,   Zindptrr‹   ra   r.   )ra   r0   Ú	precisionZsq_normZcsr_index_dtypeZXcsrr1   r1   r2   Útest_row_norms>  s"    

rœ   c            
      C   s¼   d} d}d}d}t | ||ddd�}|j| |fks4t‚tj|dd	�\}}}d
D ]j}t||d|dd�\}}}t |d |… | ¡ ¡ dksŠt‚t|||dd�\}}	}t	|d |… |	dd� qLd S )NrH   rM   r"   r    çš™™™™™¹?r   rP   FrW   ©rX   ÚnonerY   rZ   ©rƒ   r\   rT   g{®Gáz„?r[   r'   r^   ©
r   rA   r.   r   rc   r   r(   ÚabsÚmaxr   ©
rQ   rR   rg   rh   r0   rŒ   rj   rl   rm   Zsapr1   r1   r2   Ú'test_randomized_svd_low_rank_with_noiseY  s:    û    ÿ"   ÿr¥   c            
      C   s¾   d} d}d}d}t | ||ddd�}|j| |fks4t‚tj|dd	�\}}}d
D ]l}t||d|dd�\}}}t |d |… | ¡ ¡ dksŠt‚t||d|dd�\}}	}t	|d |… |	dd� qLd S )NrH   rM   r"   r    rs   r   rP   FrW   rž   r    r�   r'   r^   r¡   r¤   r1   r1   r2   Ú!test_randomized_svd_infinite_rank‚  s<    û    ÿ"    ÿr¦   c               	   C   s\  d} d}d}d}t | ||ddd�}|j| |fks4t‚t||dd	dd
�\}}}t||dddd
�\}}	}
t||dddd
�\}}}tj|d	d�\}}}t||d |… dd� t|	|d |… dd� t||d |… dd� tt ||¡t |d d …d |…f |d |…d d …f ¡dd� tt ||
¡t |d d …d |…f |d |…d d …f ¡dd� t|	|ƒ d S )NrH   rM   r4   r    g      à?r   rP   r'   F)rƒ   Ú	transposerT   TrX   rW   r^   r&   )	r   rA   r.   r   r   rc   r   r(   rf   )rQ   rR   rg   rh   r0   ÚU1Ús1ÚV1ÚU2Ús2ÚV2ZU3Zs3ZV3ZU4Zs4ZV4r1   r1   r2   Ú)test_randomized_svd_transpose_consistency«  s,    û>>r®   c               	   C   s‚  t j d¡} tddd| d�}|d| jdd|jd	� 7 }d}t||dd
dd�\}}}|| t  |¡ |¡¡ }t	j
|dd�}t||dd
dd�\}}}|| t  |¡ |¡¡ }t	j
|dd�}t  || ¡dksÐt‚dD ]¨}	t||d|	dd�\}}}|| t  |¡ |¡¡ }t	j
|dd�}dD ]^}
t|||
|	dd�\}}}|| t  |¡ |¡¡ }t	j
|dd�}dt  || ¡k�st‚�qqÔd S )Nrr   rH   rM   r   ©rS   rT   r'   r   r&   r#   rŸ   r    Zfro)Úordr„   )rY   rZ   rX   )r"   r    r   é   )r(   r)   r*   r   r+   rA   r   rf   rx   r   r’   r¢   r.   )r/   r0   ru   ri   rj   rk   r”   Zerror_2Zerror_20rl   ÚiÚerrorr1   r1   r2   Ú.test_randomized_svd_power_iteration_normalizerË  sX        ÿ    ÿûûr´   c               
   C   sv   t j d¡} tddd| d�}d}tjtjfD ]D}||ƒ}d |j¡}t	j
tj|d�� t||d	d
d� W 5 Q R X q,d S )Nrr   r   r„   r    r¯   r"   zCCalculating SVD of a {} is expensive. csr_matrix is more efficient.r6   r%   rŸ   )rƒ   r\   )r(   r)   r*   r   r   r-   Z
dok_matrixÚformatÚ__name__r:   r;   ZSparseEfficiencyWarningr   )r/   r0   ru   ÚclsZwarn_msgr1   r1   r2   Ú#test_randomized_svd_sparse_warningsø  s    ÿÿr¸   c                  C   s  t j d¡} d}d}|  ||¡}tj|dd�\}}}t||dd�\}}tt  || |¡|dd� |j	}	tj|	dd�\}}}t||d	d�\}
}tt  |
| |¡|	dd� t||d	d�\}}tt  || |¡|	dd� t||dd�\}}tt  || |¡|	dd� d S )
NéÏ  r„   r    FrW   )Zu_based_decisionr5   r^   T)
r(   r)   r*   r‘   r   rc   r   r   rf   rz   )ÚrsrQ   rR   r0   ri   r•   rk   r¨   rª   ZXTr«   r­   ZU_flip1ZV_flip1ZU_flip2ZV_flip2r1   r1   r2   Útest_svd_flip  s    r»   c                  C   s²   t  ddgddgg¡} t| dddd�\}}}tdƒD ]x}t| dd|d�\}}}t||ƒ t||ƒ tt  || |¡| ƒ tt  |j|¡t  d¡ƒ tt  |j|¡t  d¡ƒ q4d S )	Ng       @rO   rs   r&   Té)   ©Ú	flip_signrT   r    )r(   r9   r   Úranger   rf   rz   Úeye)r8   Úu1r©   Zv1ÚseedÚu2r¬   Zv2r1   r1   r2   Útest_randomized_svd_sign_flip   s    

rÄ   c            	      C   sˆ   dd„ } t  d¡ dd¡}t|dddd	�\}}}| ||ƒ\}}|sFt‚|rNt‚t|ddddd
�\}}}| ||ƒ\}}|s|t‚|r„t‚d S )Nc                 S   sL   t  | ¡jdd�| jdd�k ¡ }t  |¡jdd�|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%   )r(   r¢   r£   Úall)ÚuÚvÚu_basedÚv_basedr1   r1   r2   Úmax_loading_is_positive1  s    ""zMtest_randomized_svd_sign_flip_with_transpose.<locals>.max_loading_is_positiverŽ   r    r…   r'   Tr   r½   )r¾   r§   rT   )r(   ÚarangeÚreshaper   r.   )	rÊ   ZmatZ	u_flippedrŒ   Z	v_flippedrÈ   rÉ   Zu_flipped_with_transposeZv_flipped_with_transposer1   r1   r2   Ú,test_randomized_svd_sign_flip_with_transpose,  s&    	    ÿ ÿrÍ   r“   r   rH   é,  Úmr    r„   rÂ   r"   c                 C   s¨   t j |¡}| | |¡}t||ddd�\}}}t||ddd�\}	}
}|j|	jksTt‚t||	ddd� |j|
jkstt‚t||
ddd� |j|jks”t‚t||ddd� d S )NZgesddr   )Zsvd_lapack_driverrT   Zgesvdgü©ñÒMbP?)ÚatolÚrtol)r(   r)   r*   Úrandr   rA   r.   r   )r“   rÏ   rh   rÂ   r/   r0   rÁ   r©   Zvt1rÃ   r¬   Zvt2r1   r1   r2   Ú!test_randomized_svd_lapack_driverM  s    rÓ   c                  C   sÒ   t  dddg¡t  ddg¡t  ddg¡f} t  dddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgdddgg¡}t| ƒ}t||ƒ t  d¡}t|d d …t jf t|fƒƒ d S )Nr%   r&   r'   r4   r"   r5   rN   )r(   r9   r   r   rË   Únewaxis)ZaxesZtrue_outÚoutrB   r1   r1   r2   Útest_cartesiang  s(    *ôÿ

rÖ   zarrays, output_dtyper%   r&   r'   rp   r4   rB   Úyc                 C   s   t | ƒ}|j|kst‚dS )z8Check that the cartesian product works with mixed types.N)r   ra   r.   )ZarraysZoutput_dtypeÚoutputr1   r1   r2   Útest_cartesian_mix_types…  s    rÙ   c                  C   sL   dd„ } t  ddd¡}tt|ƒ| |ƒƒ t  ddg¡}tt|ƒdd	gƒ d S )
Nc                 S   s   t  t| ƒ¡S ro   )r(   Úlogr   )rB   r1   r1   r2   Únaive_log_logisticŸ  s    z1test_logistic_sigmoid.<locals>.naive_log_logisticéþÿÿÿr&   r   g      YÀg      Y@iœÿÿÿr   )r(   Zlinspacer   r   r9   )rÛ   rB   Z	extreme_xr1   r1   r2   Útest_logistic_sigmoid�  s
    rÝ   c                   C   s   t j d¡S )Nrr   )r(   r)   r*   r1   r1   r1   r2   r/   ©  s    r/   c           
      C   sŠ   d}|   dd¡ |¡| }|   |jd ¡| }t|ddd|d�\}}}tj||dd�}tj|d |dd�|d  }	t||ƒ t||	ƒ d S )Nr    éè  r„   r   ©Úsample_weight©rC   r?   r&   )rÒ   rb   rA   r   r(   Úaverager   )
r/   ra   Zmultr0   rà   ÚmeanÚvarrŒ   Úexpected_meanÚexpected_varr1   r1   r2   Ú2test_incremental_weighted_mean_and_variance_simple®  s    ÿ
rç   rã   ç    ÐcAg    ÐcÁrä   ç:Œ0âŽyE>g     jø@zweight_loc, weight_scale)r   r%   )r   ré   )r%   ré   )r    r%   )rè   r%   c                 C   sº   dd„ }d}|j |||d d�}|j | ||d�}ttj||dd�}	ttj||	 d |dd�}
||||	|
ƒ |j | ||d�}t |d ¡}ttj|dd�}	ttj|dd�}
||||	|
ƒ d S )	Nc           
   	   S   sŒ   | j d }d|d d |d d |d d |fD ]V}d\}}}t||ƒD ]$}	t| |	 |||||	 d�\}}}qHt||ƒ t||dd	� q0d S )
Nr   r%   r    r4   r&   )r   r   r   rß   ç�íµ ÷Æ°>)rÐ   )rA   r	   r   r   )
r0   rà   rå   ræ   r“   Ú
chunk_sizeÚ	last_meanZlast_weight_sumZlast_varÚbatchr1   r1   r2   Ú_assertÆ  s    
*
û
z<test_incremental_weighted_mean_and_variance.<locals>._assert)rH   r„   r   )ÚlocÚscaler$   rá   r&   r>   )ry   r   r(   râ   r@   rã   rä   )rã   rä   Z
weight_locZweight_scaler/   rî   r$   Úweightr0   rå   ræ   Zones_weightr1   r1   r2   Ú+test_incremental_weighted_mean_and_variance½  s"    	 
  ÿrò   c              	   C   s  t  ddddg¡}t  ddddg¡}t jddddgt jd�}t  d¡}t  d¡}t  ddddgddddgd	d	d	d	gg¡ | ¡}t  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|||||d
�\}}	}
t|||||d
�\}}}t||ƒ t||	ƒ t||
ƒ d S )Nç     ¸€@ç     �°@r&   rp   r'   r4   éª   é®  rÎ   rß   )r(   r9   r™   r@   rb   Únanr   r   )ra   Ú	old_meansÚold_variancesZold_weight_sumZsample_weights_XZsample_weights_X_nanr0   ÚX_nanÚX_meansÚX_variancesÚX_countÚX_nan_meansÚX_nan_variancesÚX_nan_countr1   r1   r2   Ú6test_incremental_weighted_mean_and_variance_ignore_nanè  sH    

 ÿþüÿù	    ÿû

r  c            
   
   C   sî   t  dddddgdddddgdddddgdddddgg¡j} d}| d |…d d …f }| |d …d d …f }|jdd�}|jdd�}t j|jd	 |jd t jd
�}t||||ƒ\}}}	t	|| jdd�dƒ t	|| jdd�dƒ t	|	| jd ƒ d S )NiX  iÖ  rõ   rö   rÎ   r&   r   r>   r%   rp   r5   )
r(   r9   rz   rã   rä   ÚfullrA   r™   r   r   )
r”   ÚidxZX1ZX2rø   rù   Úold_sample_countZfinal_meansZfinal_variancesZfinal_countr1   r1   r2   Ú)test_incremental_variance_update_formulas  s,    üÿ   ÿ
r  c               	   C   sè   t  ddddg¡} t  ddddg¡}t jddddgt jd�}t  ddddgddddgddddgg¡}t  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 )Nró   rô   r&   rp   rõ   rö   rÎ   )r(   r9   r™   r÷   r   r   )rø   rù   r  r0   rú   rû   rü   rý   rþ   rÿ   r   r1   r1   r2   Ú-test_incremental_mean_and_variance_ignore_nan'  s4    (üÿ	   ÿ
   ÿ


r  c                  C   s   dd„ } dd„ }dd„ }dd„ }d	}d
}d}t jdt jd�}t jdt jd�}t j|d
 |f|t jd�}	t j|d
 |f|t jd�}
t  |	|
f¡}t  | |ƒ||ƒ ¡ ¡ |ks°t‚|	dd d …f t  	|¡|d
   }}}t
|
jd ƒD ]$}||
|d d …f |||ƒ\}}}qä||jd k�st‚t  |jdd�| ¡ ¡ dk�sBt‚t  | |ƒ| ¡ ¡ |k�sbt‚|	dd d …f t  	|¡ }}t j||d
 t jd�}t
|
jd ƒD ]6}t|
|d d …f  d|
jd f¡|||ƒ\}}}�q¢t||jd ƒ t|jdd�|ƒ |t  | |ƒ| ¡ ¡ k�st‚d S )Nc                 S   s   | j dd�S )Nr   r>   )rä   )r”   r1   r1   r2   Únp_varG  s    z=test_incremental_variance_numerical_stability.<locals>.np_varc                 S   s:   | j d }| d jdd�| }| jdd�| d }|| S )Nr   r&   r>   )rA   rJ   )r0   r“   Zexp_x2Zexpx_2r1   r1   r2   Úone_pass_varL  s    
zCtest_incremental_variance_numerical_stability.<locals>.one_pass_varc                 S   s*   | j dd�}|  ¡ }tj || d dd�S )Nr   r>   r&   )rã   rV   r(   )r0   rã   ÚYr1   r1   r2   Útwo_pass_varU  s    zCtest_incremental_variance_numerical_stability.<locals>.two_pass_varc                 S   sJ   |d }|t |ƒ }| | ||  }|| | | | |  |  }|||fS )Nr%   )Úfloat)rB   rì   Zlast_varianceZlast_sample_countZupdated_sample_countZsamples_ratioZupdated_meanZupdated_variancer1   r1   r2   Únaive_mean_variance_update]  s    ÿÿzQtest_incremental_variance_numerical_stability.<locals>.naive_mean_variance_updater�   r&   i'  g    „×—Arp   gñhãˆµøä>r   r>   rê   r%   )r(   r9   re   rÚ   r  Zvstackr¢   r£   r.   Zzerosr¿   rA   rã   r™   r   rÌ   r   r   )r  r  r
  r  r‡   rR   rQ   Úx1Zx2ZA0ÚA1r”   rã   rä   r“   r²   r1   r1   r2   Ú-test_incremental_variance_numerical_stabilityC  s>    	"&"$    ÿr  c                  C   s\  t j d¡} |  dd¡}|j\}}dD �].}t  d|jd |¡}|d |jd kr`t  ||g¡}t|d d… |dd … ƒD ]Ú\}}|||…d d …f }|dkrà|jdd�}	|j	dd�}
|jd }t j
|jd |jd t jd	�}n&t||	|
|ƒ}|\}	}
}||jd 7 }t j|d |… dd�}t j	|d |… dd�}t|	|d
ƒ t|
|d
ƒ t||ƒ qzq&d S )Nr¹   r   r    )é   r„   é%   r   r…   r%   r>   rp   r5   )r(   r)   r*   r‘   rA   rË   ZhstackÚziprã   rä   r  r™   r   r   r   )r/   r0   rQ   rR   Z
batch_sizeZstepsr²   Újrí   Zincremental_meansZincremental_variancesZincremental_countZsample_countÚresultZcalculated_meansZcalculated_variancesr1   r1   r2   Útest_incremental_variance_ddofŒ  s6    

"
    ÿ
r  c                  C   s„   t j d¡ dd¡} t jt  | ¡dd�}t| ƒ}t j|dd�}t||ƒ t  | t	| j
d ƒ|f ¡}t| ||d d …t jf  ƒ d S )Né$   r"   r%   r>   r   )r(   r)   r*   r‘   Zargmaxr¢   r   r   Úsignr¿   rA   rÔ   )ÚdataZmax_abs_rowsZdata_flippedZmax_rowsZsignsr1   r1   r2   Útest_vector_sign_flip¬  s    
r  c                  C   sL   t j d¡} |  dd¡}t  |¡}t j|dd� d¡}tt|ƒ|| ƒ d S )Nr   r'   r"   r%   r>   )r…   r%   )	r(   r)   r*   r‘   ÚexprJ   rÌ   r   r   )r/   r0   Zexp_XZ	sum_exp_Xr1   r1   r2   Útest_softmax·  s
    
r  c               	   C   sÄ   t tdddgƒt dddg¡ƒ tj d¡ d¡} t t	¡� t| ddd� W 5 Q R X tj d¡j
dd	d
�}t t|dd�tj|dd�ƒ t t|dd�tj|dd�ƒ t t|dd�tj|dd�ƒ d S )Nr%   r&   r'   r   i † )rÑ   rÐ   r  rÞ   )r"   r"   r"   r#   r>   )r   r   r(   Zcumsumr)   r*   rÒ   r:   r;   ÚRuntimeWarningr+   )Úrr”   r1   r1   r2   Útest_stable_cumsum¿  s     r  ÚA_array_constrZdenser   )ZidsÚB_array_constrc                 C   sX   t j d¡}| d¡}| d¡}t  ||¡}| |ƒ}||ƒ}t||dd�}t||ƒ d S )Nr   ©é   r    )r    r„   T©Údense_output©r(   r)   r*   rI   rf   r   r   )r  r   r/   r”   ÚBÚexpectedÚactualr1   r1   r2   Útest_safe_sparse_dot_2dÌ  s    

r)  c                  C   sŒ   t j d¡} |  d¡}|  d¡}t  ||¡}t |¡}t||ƒ}t||ƒ |  d¡}|  d¡}t  ||¡}t |¡}t||ƒ}t||ƒ d S )Nr   )r&   r'   r4   r"   r5   )r5   rN   )r&   r'   )r4   r"   r'   r5   )	r(   r)   r*   rI   rf   r   r,   r   r   )r/   r”   r&  r'  r(  r1   r1   r2   Útest_safe_sparse_dot_ndà  s    








r*  c                 C   s~   t j d¡}| d¡}| d¡}t  ||¡}| |ƒ}t||ƒ}t||ƒ | d¡}t  ||¡}| |ƒ}t||ƒ}t||ƒ d S )Nr   r    r!  )r    r"  r%  )r  r/   r&  r”   r'  r(  r1   r1   r2   Útest_safe_sparse_dot_2d_1dô  s    





r+  r$  TFc                 C   sv   t j d¡}tjddd|d�}tjddd|d�}| |¡}t||| d�}t |¡|  ks\t‚| rh| ¡ }t	||ƒ d S )Nr   r"  r    r�   )r   rT   r„   r#  )
r(   r)   r*   r   rf   r   Úissparser.   Ztoarrayr   )r$  r/   r”   r&  r'  r(  r1   r1   r2   Ú!test_safe_sparse_dot_dense_output  s    
r-  )\Únumpyr(   r:   Zscipyr   r   Zscipy.linalgr   Zscipy.sparse.linalgr   Zscipy.specialr   Zsklearn.datasetsr   r   Zsklearn.utilsr	   Zsklearn.utils._arpackr
   Zsklearn.utils._testingr   r   r   r   r   r   Zsklearn.utils.extmathr   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsklearn.utils.fixesr   r3   r=   rF   rL   rn   ÚmarkZparametrizer™   rš   r`   re   rq   r~   r�   r—   rœ   r¥   r¦   r®   r´   r¸   r»   rÄ   rÍ   r¿   rÓ   rÖ   r9   ra   ÚobjectrÙ   rÝ   Zfixturer/   rç   rò   r  r  r  r  r  r  r  r  r,   r)  r*  r+  r-  r1   r1   r1   r2   Ú<module>   sÒ    @N


Gúþ

)) -!(
þ(
þ&þ÷þ


 ÿ&
$
H  
 ÿ 
 ÿ 
 ÿ
