a
    �ù»jQŒ  ã                   @   sL  d dl Zd dl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 d dl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 d d	l m!Z!m"Z"m#Z#m$Z$ ej% &d
e¡ej% &de¡ej% &de¡dd„ ƒƒƒZ'ej% &dej(ej)g¡ej% &dee ¡dd„ ƒƒZ*ej% &d
e¡ej% &de¡ej% &de¡dd„ ƒƒƒZ+ej% &g d¢g d¢g d¢gg d¢g d¢gg d¢fg d¢g d¢gg d¢g d¢gg d¢fg d¢g d¢gg d¢g d¢gdfd ej,dgd ej,ej,ggd ej,dgd ej,ej,ggg d¢fd d gdej,gdd gd d gej,ej,gej,dggg d!¢ddej,gg d"¢g d#¢ej,ej,ej,gej,ej,dggd$d%gfg d&¢g d'¢gg d(¢g d)¢ge -g d*¢¡fg¡ej% &dee ¡ej% &dej(ej)g¡d+d,„ ƒƒƒZ.ej% &g d¢g d¢g d¢gg d¢g d¢gddgfg d¢g d¢gg d¢g d¢g d¢gddgfg d¢g d¢gg d¢g d¢gdfd ej,dgd ej,ej,ggd ej,dgd ej,ej,ggd%d%gfd d dej,dd gd d ej,ej,ej,dggd d dej,dd gd d dej,dd gd d ej,ej,ej,dggd$d%gfg d&¢g d¢gg d&¢g d¢g d¢g d¢ge -dd g¡fg¡ej% &dee ¡ej% &dej(ej)g¡d-d.„ ƒƒƒZ/ej% &d
e¡ej% &de¡ej% &de¡d/d0„ ƒƒƒZ0ej% &dee ¡d1d2„ ƒZ1ej% &d3ej2d4dd5d6d d7�ej2d8dd5d6d d7�fej2d4dd5d6d d7�ej3ej4d9ej,d:�ej2d8dd5d;d<�gd6d=�fg¡ej% &de¡d>d?„ ƒƒZ5d@dA„ Z6dBdC„ Z7ej% &dDd dg¡ej% &dee ¡dEdF„ ƒƒZ8ej% &de¡dGdH„ ƒZ9ej% &de¡dIdJ„ ƒZ:dKdL„ Z;dMdN„ Z<ej% &d
e¡ej% &de¡dOdP„ ƒƒZ=ej% &d
e¡ej% &de¡dQdR„ ƒƒZ>ej% &dej(ej)g¡ej% &dDg dS¢¡ej% &dTee ¡ej% &dUd ej?ej@dVfej,ejAejBdWfg¡ej% &dXdWdVg¡dYdZ„ ƒƒƒƒƒZCej% &d
e¡ej% &de¡d[d\„ ƒƒZDej% &d
e¡ej% &de¡d]d^„ ƒƒZEej% &d
e¡ej% &de¡d_d`„ ƒƒZFej% &dae#e$f¡ej% &de¡dbdc„ ƒƒZGej% &dej(ej)g¡ddde„ ƒZHejIdfee dg�dhdi„ ƒZJdjdk„ ZKdldm„ ZLdndo„ ZMdpdq„ ZNdS )ré    N)ÚRandomState)Úassert_array_almost_equalÚassert_array_equal)Úlinalg)Úmake_classification)Úassert_allclose)ÚCSC_CONTAINERSÚCSR_CONTAINERSÚLIL_CONTAINERS)
Ú_implicit_column_offsetÚcount_nonzeroÚcsc_median_axis_0Úincr_mean_variance_axisÚinplace_column_scaleÚinplace_row_scaleÚinplace_swap_columnÚinplace_swap_rowÚmean_variance_axisÚmin_max_axis)Úassign_rows_csrÚcsr_row_normsÚinplace_csr_row_normalize_l1Úinplace_csr_row_normalize_l2Úcsc_containerÚcsr_containerÚlil_containerc                 C   s>  t dddd�\}}d|d< d|d< d|d< ||ƒ}d|d< d|d< t t¡� t|dd	� W d   ƒ n1 sn0    Y  ||ƒ}| |ƒ}tjtjftjtjftjtjftj	tjfg}|D ]€\}	}
| 
|	¡}||fD ]d}| 
|	¡}t|dd	�\}}|j|
ksþJ ‚|j|
k�sJ ‚t|tj|dd	�ƒ t|tj|dd	�ƒ qÒq¸d S )
Né   é   r   ©Úrandom_state©r   r   ©é   é   ©r   é   ©r#   r   ©Úaxis©r   ÚpytestÚraisesÚ	TypeErrorr   ÚnpÚfloat32Úfloat64Úint32Úint64ÚastypeÚdtyper   ÚmeanÚvar©r   r   r   ÚXÚ_ÚX_lilÚX_csrÚX_cscÚexpected_dtypesÚinput_dtypeÚoutput_dtypeZX_testÚX_sparseÚX_meansÚX_vars© rB   úJE:\soccer\ml_env\Lib\site-packages\sklearn/utils/tests/test_sparsefuncs.pyÚtest_mean_variance_axis0   s2    *



ü

rD   r3   Úsparse_constructorc                 C   sŽ   t j d¡}t jdd| d�}|jt  |jd ¡ddd�}t j||df< ||ƒ}| |jd ¡ 	| ¡}t
||dd�\}}|t  | ¡jk sŠJ ‚d S )	Nr   g      Y@)iè  r#   )Ú
fill_valueÚshaper3   é
   F)Úreplace)Úweightsr(   )r-   Úrandomr   ÚfullÚchoiceZarangerG   ÚnanÚrandr2   r   ZfinfoÚeps)r3   rE   Úrngr7   Zmissing_indicesÚsample_weightr8   r5   rB   rB   rC   Ú"test_mean_variance_axis0_precisionD   s    rS   c                 C   s>  t dddd�\}}d|d< d|d< d|d< ||ƒ}d|d< d|d< t t¡� t|d	d
� W d   ƒ n1 sn0    Y  ||ƒ}| |ƒ}tjtjftjtjftjtjftj	tjfg}|D ]€\}	}
| 
|	¡}||fD ]d}| 
|	¡}t|dd
�\}}|j|
ksþJ ‚|j|
k�sJ ‚t|tj|dd
�ƒ t|tj|dd
�ƒ qÒq¸d S )Nr   r   r   r   r    r!   r$   r&   r#   r'   r)   r6   rB   rB   rC   Útest_mean_variance_axis1X   s2    *



ü

rT   )ÚXwr7   rJ   )r   r   r#   ©r   r"   r%   )r#   r#   r#   )r   r#   r#   )r   r   r   r#   )r   r#   r#   r#   )r#   r"   r#   r"   )ç      ð?rW   rW   r#   r%   ©r   r   r   )r"   r"   r   )r   r   r%   g       @rW   )r#   r   r#   )r   r%   r#   )r#   r   r   r   r#   )r   r%   r%   r%   r#   )r#   r%   r#   c                 C   s|  d}|| ƒ  |¡}||ƒ  |¡}tjt | ¡d |d�}tj||d�}	tj|tjd�}
t||||	|
d d�\}}}t||||	|
|d�\}}}|j|ks˜J ‚|j|ks¦J ‚|j|ks´J ‚t||d�\}}t	||ƒ t	||ƒ t	||ƒ t	||ƒ t	||ƒ t|||||d d�\}}}t||||||d�\}}}t	||ƒ t	||ƒ t	||ƒ |j|k�sXJ ‚|j|k�shJ ‚|j|k�sxJ ‚d S )Nr#   r   ©r3   ©r7   r(   Ú	last_meanÚlast_varÚlast_nrJ   ©r7   r(   )
r2   r-   ÚzerosrG   Ú
zeros_liker1   r   r3   r   r   ©rU   r7   rJ   rE   r3   r(   Z	Xw_sparser?   r[   r\   r]   Zmeans0Zvars0Zn_incr0Zmeans_w0Zvars_w0Z	n_incr_w0Zmeans_simpleZvars_simpleZmeans1Zvars1Zn_incr1Zmeans_w1Zvars_w1Z	n_incr_w1rB   rB   rC   Ú+test_incr_mean_variance_axis_weighted_axis1}   sj    #ú	ú	




ú	ú	


rb   c                 C   sv  d}|| ƒ  |¡}||ƒ  |¡}tjt | d¡|d�}t |¡}	tj|tjd�}
t||||	|
d d�\}}}t||||	|
|d�\}}}|j|ks’J ‚|j|ks J ‚|j|ks®J ‚t||d�\}}t	||ƒ t	||ƒ t	||ƒ t	||ƒ t	||ƒ t|||||d d�\}}}t||||||d�\}}}t	||ƒ t	||ƒ t	||ƒ |j|k�sRJ ‚|j|k�sbJ ‚|j|k�srJ ‚d S )Nr   r#   rY   rZ   r^   )
r2   r-   r_   Úsizer`   r1   r   r3   r   r   ra   rB   rB   rC   Ú+test_incr_mean_variance_axis_weighted_axis0á   sj     
ú	ú	




ú	ú	


rd   c              
      sÔ  dD �]È}t j d¡‰d‰ d‰|dkr@‡ ‡fdd„tˆƒD ƒ}n‡‡fdd„tˆ ƒD ƒ}|dkrjt  ˆ ¡nt  ˆ¡}t  |¡}t j|t jd�}t  |d ¡}t  |¡}|d	kr´|j	n|}||ƒ}	||	ƒ}
t
 t¡�  t||||d
� W d   ƒ n1 sø0    Y  t
 t¡�" t|	||||d� W d   ƒ n1 �s60    Y  t|
|ƒ\}}t|
||||d�\}}}t||ƒ t||ƒ t|j| |ƒ | |	ƒ}t||ƒ\}}t||ƒ t||ƒ t|j| |ƒ t  |¡}|d	k�rÞ|j	n|}||ƒ}	||	ƒ}
| |	ƒ}t jt jft jt jft jt jft jt jfg}|D ]¢\}}|
|fD ]Ž}| |¡}| |¡}| |¡}t||ƒ\}}t|||||d�\}}}|j|k�s’J ‚|j|k�s¢J ‚t||ƒ t||ƒ t|j| |ƒ �q:�q*qd S )N)r   r#   r   é2   rH   c                    s   g | ]}ˆj d dˆ d�‘qS ©r   r"   )rc   ©Úrandint©Ú.0Úi)Ú
n_featuresrQ   rB   rC   Ú
<listcomp>K  ó    z0test_incr_mean_variance_axis.<locals>.<listcomp>c                    s   g | ]}ˆj d dˆ d�‘qS rf   rg   ri   )Ú	n_samplesrQ   rB   rC   rm   M  rn   rY   r#   )r7   r(   r[   r\   ©r(   r[   r\   r]   )r-   rK   r   Úranger_   r`   r1   ÚarrayZ
atleast_2dÚTr*   r+   r,   r   r   r   r   rG   Úvstackr.   r/   r0   r2   r3   )r   r   r   r(   Zdata_chunksr[   r\   r]   r7   r9   r:   r@   rA   ZX_means_incrZX_vars_incrZn_incrr;   r<   r=   r>   r?   rB   )rl   ro   rQ   rC   Útest_incr_mean_variance_axisB  s~    


ÿ$
ÿ&
ÿ








ü


û

ru   c                 C   s:  d\}}t j d¡}| | ||¡ƒ}t  |¡}t  |¡}t j|jt jd�}t|||d�}t	|fddi|¤Ž\}	}
}t
t j| ¡ dd�|	ƒ t
t j| ¡ dd�|
ƒ t t¡�$ t	|fddi|¤Ž W d	  ƒ n1 sÖ0    Y  t|d	d
… ||d�}t t¡�$ t	|fddi|¤Ž W d	  ƒ n1 �s,0    Y  d	S )z¦Check that we raise proper error when axis=1 and the dimension mismatch.
    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/pull/18655
    )é<   r   é*   rY   )r[   r\   r]   r(   r   r'   r#   Néÿÿÿÿ)r-   rK   r   rO   r_   r`   rG   r1   Údictr   r   r4   Útoarrayr5   r*   r+   Ú
ValueError)rE   ro   rl   rQ   r7   r[   r\   r]   ÚkwargsZmean0Zvar0r8   rB   rB   rC   Ú)test_incr_mean_variance_axis_dim_mismatch–  s    

2r}   zX1, X2r   çš™™™™™é?Úcsr©ÚdensityÚformatr   é   )rƒ   r#   )rF   rw   ©r�   r   )r‚   c                 C   sÞ   || ƒ} ||ƒ}d}t  | jd ¡t  | jd ¡ }}t j| jd t jd�}t| ||||d�\}}}	t|||||	d�\}}}	t | |g¡}
t|t j|
 	¡ |d�ƒ t|t j
|
 	¡ |d�ƒ t|	t jt  |
 	¡ ¡ dd�ƒ d S )Nr   r#   rY   rp   r'   )r-   r_   rG   r1   r   Úsprt   r   Znanmeanrz   Znanvarr   Úisnan)ÚX1ÚX2r   r(   r[   r\   r]   Úupdated_meanÚupdated_varÚ	updated_nr7   rB   rB   rC   Ú6test_incr_mean_variance_axis_equivalence_mean_variance³  s    "
ÿ
ÿrŒ   c            	      C   sº   d} t jddddd� ¡ }t jddddd� ¡ }t |jd ¡t |jd ¡ }}tj|jd tjd�}t|| |||d�\}}}t|| |||d�\}}}t||ƒ t||ƒ t||ƒ d S )Nr   r   r#   r~   r„   rY   rp   )	r…   rK   Útocsrr-   r_   rG   r1   r   r   )	r(   r‡   rˆ   r[   r\   r]   r‰   rŠ   r‹   rB   rB   rC   Ú test_incr_mean_variance_no_new_nÝ  s    "
ÿ
ÿ

rŽ   c                  C   sz   d} t jddddd� ¡ }t |jd ¡t |jd ¡ }}d}t|| |||d�\}}}t|t |jd |jd ¡ƒ d S )Nr   r   r"   r~   r„   r#   rp   )	r…   rK   r�   r-   r_   rG   r   r   rL   )r(   r7   r[   r\   r]   r8   Znew_nrB   rB   rC   Útest_incr_mean_variance_n_floatð  s    "
ÿr�   r(   c              
   C   s  t  g d¢¡}t  g d¢¡}t jg d¢t jd�}|t  g d¢g d¢g d¢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¡ƒ}| rž|j}|j}t|| | ¡ | ¡ | ¡ d�\}}}	t|| | ¡ | ¡ | ¡ d�\}
}}t|
|ƒ t||ƒ t||	ƒ d S )N)ç     ¸€@r�   r�   r�   )ç     �°@r‘   r‘   r‘   )r"   r"   r"   r"   rY   )éª   r’   r’   r’   )é®  r“   r“   r“   )é,  r”   r”   r”   r’   r“   r”   rp   )r-   rr   r1   rN   rs   r   Úcopyr   )r(   rE   Z	old_meansZold_variancesZold_sample_countr7   ZX_nanr@   rA   ZX_sample_countZX_nan_meansZ
X_nan_varsZX_nan_sample_countrB   rB   rC   Ú'test_incr_mean_variance_axis_ignore_nanü  sF    ÿüÿÿûû

r–   c                 C   s’  t dddd�\}}d|d< d|d< d|d< | |ƒ}t t¡� t|dd	� W d   ƒ n1 s^0    Y  t t¡� t|d
d	� W d   ƒ n1 s”0    Y  t t¡� t|dd	� W d   ƒ n1 sÊ0    Y  t t¡�" t|dd d d d� W d   ƒ n1 �s0    Y  t t¡�" t|d
d d d d� W d   ƒ n1 �sF0    Y  t t¡�" t|dd d d d� W d   ƒ n1 �s„0    Y  d S )Nr   r   r   r   r    r!   r$   éýÿÿÿr'   r"   rx   rp   )r   r*   r+   r{   r   r   )r   r7   r8   r:   rB   rB   rC   Útest_mean_variance_illegal_axis-  s.    ***
ÿ&
ÿ&
ÿr˜   c                 C   sº   t jt jfD ]¨}| g d¢g d¢g d¢g d¢g d¢g|d�}t jg d¢t jd�}t jd|jd	 f|d�}t jg d
¢t jd�}t  |¡}||d d …f  ¡ ||< t	||||ƒ t
||ƒ qd S )N©r   r%   r   ©r"   r   r   rX   ©é	   é   é   ©r   r   r   rY   rV   é   r#   )r#   r%   r   )r-   r.   r/   rr   ÚintpÚonesrG   Z	ones_likerz   r   r   )r   r3   r7   ZX_rowsÚoutZout_rowsÚexpectrB   rB   rC   Útest_densify_rowsL  s    "ÿ
r¥   c                  C   sv  t j d¡} t ddd¡}| ¡ }| ¡ }| ¡ }|  d¡}||9 }t||ƒ t||ƒ t	| ¡ | ¡ ƒ t	|| ¡ ƒ t	|| ¡ ƒ t
 t¡� t| ¡ |ƒ W d   ƒ n1 s´0    Y  | t j¡}| t j¡}| ¡ }| ¡ }| ¡ }||9 }t||ƒ t||ƒ t	| ¡ | ¡ ƒ t	|| ¡ ƒ t	|| ¡ ƒ t
 t¡� t| ¡ |ƒ W d   ƒ n1 �sh0    Y  d S )Nr   éd   éÈ   çš™™™™™©?)r-   rK   r   r…   rO   r�   Útocscrz   r   r   r*   r+   r,   Útolilr2   r.   ©rQ   r7   ZXrZXcZXAÚscalerB   rB   rC   Útest_inplace_column_scale]  s6    


,

r­   c                  C   s†  t j d¡} t ddd¡}| ¡ }| ¡ }| ¡ }|  d¡}|| dd¡9 }t	||ƒ t	||ƒ t
| ¡ | ¡ ƒ t
|| ¡ ƒ t
|| ¡ ƒ t t¡� t| ¡ |ƒ W d   ƒ n1 s¼0    Y  | t j¡}| t j¡}| ¡ }| ¡ }| ¡ }|| dd¡9 }t	||ƒ t	||ƒ t
| ¡ | ¡ ƒ t
|| ¡ ƒ t
|| ¡ ƒ t t¡� t| ¡ |ƒ W d   ƒ n1 �sx0    Y  d S )Nr   r¦   r§   r¨   rx   r#   )r-   rK   r   r…   rO   r�   r©   rz   Zreshaper   r   r*   r+   r,   r   rª   r2   r.   r«   rB   rB   rC   Útest_inplace_row_scale}  s6    


,

r®   c                 C   s¬  t jg d¢g d¢g d¢g d¢g d¢gt jd�}||ƒ}| |ƒ}t d|f¡}|d }||d |d	 ƒ\|d< |d	< t|dd	ƒ t|dd	ƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ ||d
 |d ƒ\|d
< |d< t|d
dƒ t|d
dƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ t 	t
¡� t| ¡ ƒ W d   ƒ n1 �sJ0    Y  t jg d¢g d¢g d¢g d¢g d¢gt jd�}||ƒ}| |ƒ}t d|f¡}|d }||d |d	 ƒ\|d< |d	< t|dd	ƒ t|dd	ƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ ||d
 |d ƒ\|d
< |d< t|d
dƒ t|d
dƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ t 	t
¡� t| ¡ ƒ W d   ƒ n1 �sž0    Y  d S )Nr™   rš   rX   r›   rŸ   rY   ©Úswapr   rx   r"   r%   )r-   rr   r/   r   Úget_blas_funcsr   r   rz   r*   r+   r,   rª   r.   ©r   r   r7   r:   r;   r°   rB   rB   rC   Útest_inplace_swap_row�  sT    $ÿ,$ÿr³   c                 C   s,  t jg d¢g d¢g d¢g d¢g d¢gt jd�}||ƒ}| |ƒ}t d|f¡}|d }||d d …df |d d …d	f ƒ\|d d …df< |d d …d	f< t|dd	ƒ t|dd	ƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ ||d d …df |d d …d
f ƒ\|d d …df< |d d …d
f< t|dd
ƒ t|dd
ƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ t 	t
¡� t| ¡ ƒ W d   ƒ n1 �sŠ0    Y  t jg d¢g d¢g d¢g d¢g d¢gt jd�}||ƒ}| |ƒ}t d|f¡}|d }||d d …df |d d …d	f ƒ\|d d …df< |d d …d	f< t|dd	ƒ t|dd	ƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ ||d d …df |d d …d
f ƒ\|d d …df< |d d …d
f< t|dd
ƒ t|dd
ƒ t| ¡ | ¡ ƒ t|| ¡ ƒ t|| ¡ ƒ t 	t
¡� t| ¡ ƒ W d   ƒ n1 �s0    Y  d S )Nr™   rš   rX   r›   rŸ   rY   r¯   r   rx   r#   )r-   rr   r/   r   r±   r   r   rz   r*   r+   r,   rª   r.   r²   rB   rB   rC   Útest_inplace_swap_columnÏ  sT    $ÿ>>,$ÿ>>r´   )r   r#   NÚsparse_formatz.missing_values, min_func, max_func, ignore_nanFTÚlarge_indicesc                 C   s’   t jg d¢dd|gg d¢d|dgg d¢g| d�}||ƒ}	|rX|	j d	¡|	_|	j d	¡|	_t|	||d
�\}
}t|
|||d�ƒ t||||d�ƒ d S )Nr™   r"   rx   rX   rœ   rž   rŸ   rY   r1   )r(   Ú
ignore_nanr'   )r-   rr   Úindicesr2   Úindptrr   r   )r3   r(   rµ   Zmissing_valuesZmin_funcZmax_funcr·   r¶   r7   r?   Zmins_sparseZmaxs_sparserB   rB   rC   Útest_min_max  s     ûø
rº   c                 C   sè   t jg d¢g d¢g d¢g d¢g d¢gt jd�}||ƒ}| |ƒ}t t¡�  t| ¡ dd� W d   ƒ n1 sn0    Y  t t¡� t|d	d� W d   ƒ n1 s¤0    Y  t t¡� t|d
d� W d   ƒ n1 sÚ0    Y  d S )Nr™   ©r"   rx   r   rX   r›   rŸ   rY   r   r'   r"   r—   )	r-   rr   r/   r*   r+   r,   r   rª   r{   )r   r   r7   r:   r;   rB   rB   rC   Útest_min_max_axis_errors(  s    $ÿ.*r¼   c           
   
   C   s  t jg d¢g d¢g d¢g d¢g d¢gt jd�}||ƒ}| |ƒ}|dk}g d¢}|t  |¡d d …d f  }d	D ]:}tt||d
�|j|d
�ƒ tt|||d�|j|d
�ƒ qlt t¡� t|ƒ W d   ƒ n1 sÐ0    Y  t t	¡� t|dd
� W d   ƒ n1 �s0    Y  t|dd
�j
t|dd
�j
k�s4J ‚t|d|d�j
t|d|d�j
k�sZJ ‚zl|j t j¡|_|j t j¡|_t|dd
�j
t|dd
�j
k�sžJ ‚t|d|d�j
t|d|d�j
k�sÄJ ‚W nN t�y }	 z4d|	jd v �røt  ¡ jdk �s J |	ƒ‚W Y d }	~	n
d }	~	0 0 d S )Nr™   r»   rX   r›   rŸ   rY   r   )ç      à?gš™™™™™É?g333333Ó?çš™™™™™¹?r¾   )r   r#   rx   éþÿÿÿNr'   )r(   rR   r"   r#   zaccording to the rule 'safe'r�   )r-   rr   r/   r   r   Úsumr*   r+   r,   r{   r3   r¸   r2   r1   r¹   Úargsr¡   Únbytes)
r   r   r7   r:   r;   Z	X_nonzerorR   ZX_nonzero_weightedr(   ÚerB   rB   rC   Útest_count_nonzero8  sF    $ÿÿ
þ&,"ÿÿ"ÿÿrÄ   c                 C   sJ  t j d¡}| dd¡}t j|dd�}| |ƒ}t|ƒ}t||ƒ | dd¡}d||dk < | ddd¡}||  ||< | |ƒ}t j|dd�}t|ƒ}t||ƒ dd	gd
d
gddgddgg}| |ƒ}tt|ƒt  ddg¡ƒ dd	gd
dgddgg}| |ƒ}tt|ƒt  ddg¡ƒ t	 
t¡� t||ƒƒ W d   ƒ n1 �s<0    Y  d S )Nr   r¦   re   r'   é3   g        gffffffæ?rH   r¿   rx   r#   r"   r½   g      à¿éûÿÿÿr—   )r-   rK   r   rO   Zmedianr   r   rh   rr   r*   r+   r,   )r   r   rQ   r7   Zdense_medianZcscZsparse_medianÚindrB   rB   rC   Útest_csc_row_medianf  s,    

rÈ   Úinplace_csr_row_normalizec                 C   sô   | t ju rt d¡}n
t d¡}tdƒ}tjtjfD ]º}| dd¡ |¡}| |ƒ}tj	tj
fD ]Ž}|tj
u rˆ|j |¡|_|j |¡|_|jj|ks˜J ‚|jj|ks¨J ‚||ƒ |j|ks¾J ‚|tu rÔ| jdC  _tt |¡jdd�|ƒ q^q4d S )N)rH   r#   rH   r   r"   r#   r'   )r…   Z
csr_matrixr-   r¢   r   r/   r.   Zrandnr2   r0   r1   r¹   r¸   r3   r   Údatar   ÚabsrÀ   )r   rÉ   r¢   Úrsr3   r7   r:   Zindex_dtyperB   rB   rC   Útest_inplace_normalizeŠ  s$    


rÍ   c                 C   sb   t jddd| dd�}t jj|dd�d }t|ƒ}|j| ks>J ‚| tjkrLd	nd
}t|||d� d S )Nr¦   rH   r   rw   )r‚   r3   r   r#   r'   r"   g�íµ ÷Æ°>gH¯¼šò×z>)Úrtol)	r…   rK   r   Znormr   r3   r-   r.   r   )r3   r7   Zscipy_normsZnormsrÎ   rB   rB   rC   Útest_csr_row_norms¨  s    rÏ   Úmodule)ÚscopeÚparamsc                 C   sb   | j }tj d¡}|tjdddd|d�ƒ}| ¡ }t |jdd�¡ ¡ }t	||ƒ}|| }||fS )	z?Returns equivalent tuple[sp.linalg.LinearOperator, np.ndarray].rw   iô  r¦   r¾   r   r€   r   r'   )
Úparamr-   rK   Údefault_rngr…   rz   Zasarrayr4   Zravelr   )ÚrequestZsparse_containerr   r?   ZX_denseÚmuÚX_sparse_centeredÚX_dense_centeredrB   rB   rC   Úcentered_matrices¶  s    ÿ
rÙ   c                 C   sR   |\}}t j | ¡}| |jd df¡}t|| | |¡ƒ t|| || ƒ d S )Nr#   re   )r-   rK   rÔ   Ústandard_normalrG   r   Zmatmat©Úglobal_random_seedrÙ   r×   rØ   rQ   ÚYrB   rB   rC   Útest_implicit_center_matmatÉ  s
    rÞ   c                 C   sN   |\}}t j | ¡}| |jd ¡}t|| | |¡ƒ t|| || ƒ d S )Nr#   )r-   rK   rÔ   rÚ   rG   r   Zmatvec©rÜ   rÙ   r×   rØ   rQ   ÚyrB   rB   rC   Útest_implicit_center_matvecÑ  s
    rá   c                 C   sX   |\}}t j | ¡}| |jd df¡}t|j| | |¡ƒ t|j| |j| ƒ d S )Nr   re   )r-   rK   rÔ   rÚ   rG   r   rs   ZrmatmatrÛ   rB   rB   rC   Útest_implicit_center_rmatmatÙ  s
    râ   c                 C   sT   |\}}t j | ¡}| |jd ¡}t|j| | |¡ƒ t|j| |j| ƒ d S )Nr   )r-   rK   rÔ   rÚ   rG   r   rs   Zrmatvecrß   rB   rB   rC   Útest_implit_center_rmatvecá  s
    rã   )OÚnumpyr-   r*   Zscipy.sparseÚsparser…   Znumpy.randomr   Znumpy.testingr   r   Zscipyr   Zsklearn.datasetsr   Zsklearn.utils._testingr   Zsklearn.utils.fixesr   r	   r
   Zsklearn.utils.sparsefuncsr   r   r   r   r   r   r   r   r   r   Zsklearn.utils.sparsefuncs_fastr   r   r   r   ÚmarkZparametrizerD   r.   r/   rS   rT   rN   rr   rb   rd   ru   r}   rK   ZhstackrL   rŒ   rŽ   r�   r–   r˜   r¥   r­   r®   r³   r´   ÚminÚmaxZnanminZnanmaxrº   r¼   rÄ   rÈ   rÍ   rÏ   ZfixturerÙ   rÞ   rá   râ   rã   rB   rB   rB   rC   Ú<module>   s$  0""$$ ý.
úöýëþD$* ý&ýù
ýîþDQ
þþûþûþ/

  00 þ,"þ

