U
    ½mœd«x  ã                   @   s*  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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 d dlmZ d	d
„ Z e j! "dej#ej$g¡e j! "dej%ej&g¡dd„ ƒƒZ'dd„ Z(e j! "dddgd d dgd ddggd d dgd ddggdddgfd d dgd ddggd d d dgd dddggdddgfd d dgd ddggd d dgd ddg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dgfd d gdej)gdd gd dgej)ej)gej)dggd d d gddej)gddd gd d dgej)ej)ej)gej)ej)dggddgfdd dgd ddggdd d d dgd ddddgge *dddg¡fg¡e j! "dej&ej%g¡e j! "dej#ej$g¡dd„ ƒƒƒZ+e j! "dddgd d dgd ddggd d dgd ddggddgfd d dgd ddggd d dgd ddgd ddggddgfd d dgd ddggd d dgd ddg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dd dgd d dggdd dgd d dgd d dgd d dgge *ddg¡fg¡e j! "dej&ej%g¡e j! "dej#ej$g¡dd„ ƒƒƒZ,dd„ Z-e j! "dej&ej%g¡dd „ ƒZ.e j! "d!ej/d"dd#d$d d%�ej/d&dd#d$d d%�fej/d"dd#d$d d%�ej0e %ej1d'ej)d(�¡ej/d&dd#d)d*�gd$d+�fg¡d,d-„ ƒZ2d.d/„ Z3d0d1„ Z4e j! "d2d dg¡e j! "dej&ej%g¡d3d4„ ƒƒZ5d5d6„ Z6d7d8„ Z7d9d:„ Z8d;d<„ Z9d=d>„ Z:d?d@„ Z;e j! "dej#ej$g¡e j! "d2d ddg¡e j! "dAej%ej&g¡e j! "dBd ej<ej=dCfej)ej>ej?dDfg¡e j! "dEdDdCg¡dFdG„ ƒƒƒƒƒZ@dHdI„ ZAdJdK„ ZBdLdM„ ZCdNdO„ ZDe j! "dej#ej$g¡dPdQ„ ƒZEdS )Ré    N)Úlinalg)Úassert_array_almost_equalÚassert_array_equal)ÚRandomState)Úmake_classification)	Úmean_variance_axisÚincr_mean_variance_axisÚinplace_column_scaleÚinplace_row_scaleÚinplace_swap_rowÚinplace_swap_columnÚmin_max_axisÚcount_nonzeroÚcsc_median_axis_0)Úassign_rows_csrÚinplace_csr_row_normalize_l1Úinplace_csr_row_normalize_l2Úcsr_row_norms)Úassert_allclosec               	   C   s.  t dddd�\} }d| d< d| d< d| d< t | ¡}d|d< d| d< t t¡� t|dd	� W 5 Q R X t |¡}t |¡}t	j
t	j
ft	jt	jft	jt	jft	jt	jfg}|D ]~\}}|  |¡}||fD ]b}	|	 |¡}	t|	dd	�\}
}|
j|ksðt‚|j|ksþt‚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   ÚspÚ
lil_matrixÚpytestÚraisesÚ	TypeErrorr   Ú
csr_matrixÚ
csc_matrixÚnpÚfloat32Úfloat64Úint32Úint64ÚastypeÚdtypeÚAssertionErrorr   ÚmeanÚvar©ÚXÚ_ÚX_lilÚX_csrÚX_cscÚexpected_dtypesÚinput_dtypeÚoutput_dtypeZX_testÚX_sparseÚX_meansÚX_vars© r@   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/utils/tests/test_sparsefuncs.pyÚtest_mean_variance_axis0   s2    






ü

rB   r0   Ú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Št‚d S )	Nr   g      Y@)iè  r   )Ú
fill_valueÚshaper0   é
   F)Úreplace)Úweightsr!   )r*   Úrandomr   ÚfullÚchoiceZarangerE   ÚnanÚrandr/   r   ZfinfoZepsr1   )r0   rC   Úrngr5   Zmissing_indicesÚsample_weightr6   r3   r@   r@   rA   Ú"test_mean_variance_axis0_precision@   s    rP   c               	   C   s.  t dddd�\} }d| d< d| d< d| d< t | ¡}d|d< d| d< t t¡� t|d	d
� W 5 Q R X t |¡}t |¡}t	j
t	j
ft	jt	jft	jt	jft	jt	jfg}|D ]~\}}|  |¡}||fD ]b}	|	 |¡}	t|	dd
�\}
}|
j|ksðt‚|j|ksþt‚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"   r4   r@   r@   rA   Útest_mean_variance_axis1T   s2    






ü

rQ   ÚXwr5   rH   r   r   r   g      ð?g       @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˜t‚|j|ks¦t‚|j|ks´t‚t	||d�\}}t
||ƒ t
||ƒ t
||ƒ t
||ƒ t
||ƒ t|||||d d�\}}}t||||||d�\}}}t
||ƒ t
||ƒ t
||ƒ |j|k�sXt‚|j|k�sht‚|j|k�sxt‚d S )Nr   r   ©r0   ©r5   r!   Ú	last_meanÚlast_varÚlast_nrH   ©r5   r!   )r/   r*   ÚzerosrE   Ú
zeros_liker.   r   r0   r1   r   r   ©rR   r5   rH   rC   r0   r!   Z	Xw_sparser=   rU   rV   rW   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_w1r@   r@   rA   Ú+test_incr_mean_variance_axis_weighted_axis1v   sj    #ú	ú	




ú	ú	


r\   c                 C   sv  d}|| ƒ  |¡}||ƒ  |¡}tjt | d¡|d�}t |¡}	tj|tjd�}
t||||	|
d d�\}}}t||||	|
|d�\}}}|j|ks’t‚|j|ks t‚|j|ks®t‚t	||d�\}}t
||ƒ t
||ƒ t
||ƒ t
||ƒ t
||ƒ t|||||d d�\}}}t||||||d�\}}}t
||ƒ t
||ƒ t
||ƒ |j|k�sRt‚|j|k�sbt‚|j|k�srt‚d S )Nr   r   rS   rT   rX   )r/   r*   rY   ÚsizerZ   r.   r   r0   r1   r   r   r[   r@   r@   rA   Ú+test_incr_mean_variance_axis_weighted_axis0Ú   sj     
ú	ú	




ú	ú	


r^   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 t¡� t| |||d
� W 5 Q R X t t¡� t|| |||d� W 5 Q R X t|| ƒ\}}	t|| |||d�\}
}}t||
ƒ t|	|ƒ t|j|  |ƒ t
 |¡}t|| ƒ\}}	t||
ƒ t|	|ƒ t|j|  |ƒ t  |¡}| d	k�rº|j	n|}t
 |¡}t
 |¡}t
 |¡}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�stt‚|j|k�s„t‚t||
ƒ t|	|ƒ t|j|  |ƒ �q�qqd S )N)r   r   r   é2   rF   c                    s   g | ]}ˆj d dˆ d�‘qS ©r   r   )r]   ©Úrandint©Ú.0Úi)Ú
n_featuresrN   r@   rA   Ú
<listcomp>A  s     z0test_incr_mean_variance_axis.<locals>.<listcomp>c                    s   g | ]}ˆj d dˆ d�‘qS r`   ra   rc   )Ú	n_samplesrN   r@   rA   rg   C  s     rS   r   )r5   r!   rU   rV   ©r!   rU   rV   rW   )r*   rI   r   ÚrangerY   rZ   r.   ÚarrayZ
atleast_2dÚTr#   r$   r(   r%   r&   r'   r   r   r   r   rE   r)   Úvstackr+   r,   r-   r/   r0   r1   )r!   Zdata_chunksrU   rV   rW   r5   r7   r8   r>   r?   ZX_means_incrZX_vars_incrZn_incrr9   r:   r;   r<   r=   r@   )rf   rh   rN   rA   Útest_incr_mean_variance_axis;  s”    




   ÿ    ÿ    ÿ












ü


û

rn   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 5 Q R X t|d	d
… ||d�}t t¡� t	|fddi|—Ž W 5 Q R X 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   é*   rS   )rU   rV   rW   r!   r   r    r   Néÿÿÿÿ)r*   rI   r   rM   rY   rZ   rE   r.   Údictr   r   r2   Útoarrayr3   r%   r&   Ú
ValueError)rC   rh   rf   rN   r5   rU   rV   rW   ÚkwargsZmean0Zvar0r6   r@   r@   rA   Ú)test_incr_mean_variance_axis_dim_mismatchŒ  s    

rv   zX1, X2r   çš™™™™™é?Úcsr)ÚdensityÚformatr   é   )r{   r   )rD   rp   ©ry   r   )rz   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|	j	|d�ƒ t|t j
|	j	|d�ƒ t|t jt  |	j	¡ dd�ƒ d S )Nr   r   rS   ri   r    )r*   rY   rE   r.   r   r#   rm   r   ZnanmeanÚAZnanvarr   Úisnan)
ÚX1ÚX2r!   rU   rV   rW   Úupdated_meanÚupdated_varÚ	updated_nr5   r@   r@   rA   Ú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   rw   r|   rS   ri   )	r#   rI   Útocsrr*   rY   rE   r.   r   r   )	r!   r   r€   rU   rV   rW   r�   r‚   rƒ   r@   r@   rA   Ú 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   rw   r|   r   ri   )	r#   rI   r…   r*   rY   rE   r   r   rJ   )r!   r5   rU   rV   rW   r6   Znew_nr@   r@   rA   Útest_incr_mean_variance_n_floatã  s    "    ÿr‡   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¡ƒ}| r¶|j}|j}t|| | ¡ | ¡ | ¡ d�\}}}	t|| | ¡ | ¡ | ¡ d�\}
}}t|
|ƒ t||ƒ t||	ƒ d S )	Ng     ¸€@g     �°@r   rS   éª   i®  i,  ri   )r*   rk   r.   rL   rl   r   Úcopyr   )r!   rC   Z	old_meansZold_variancesZold_sample_countr5   ZX_nanr>   r?   ZX_sample_countZX_nan_meansZ
X_nan_varsZX_nan_sample_countr@   r@   rA   Ú'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¡� t|dd	� W 5 Q R X t t¡� t|d
d	� W 5 Q R X t t¡� t|dd	� W 5 Q R X t t¡� t|dd d d d� W 5 Q R X t t¡� t|d
d d d d� W 5 Q R X t t¡� t|dd d d d� W 5 Q R X d S )Nr   r   r   r   r   r   r   éýÿÿÿr    r   rq   ri   )r   r#   r(   r%   r&   rt   r   r   )r5   r6   r8   r@   r@   rA   Útest_mean_variance_illegal_axis   sF    
    ÿ    ÿ    ÿrŒ   c               	   C   sÊ   t jt jfD ]¸} tjdddgdddgdddgdddgdddgg| d	�}t jdddgt jd	�}t jd
|jd f| d	�}t jdddgt jd	�}t  	|¡}||d d …f  
¡ ||< t||||ƒ t||ƒ qd S )Nr   r   r   r   é	   é   é   r   rS   é   r   )r*   r+   r,   r#   r(   rk   ÚintpÚonesrE   Z	ones_likers   r   r   )r0   r5   ZX_rowsÚoutZout_rowsÚexpectr@   r@   rA   Útest_densify_rows>  s    * ÿ
r•   c               	   C   sL  t j d¡} t ddd¡}| ¡ }| ¡ }| ¡ }|  d¡}||9 }t||ƒ t||ƒ t	| ¡ | ¡ ƒ t	|| ¡ ƒ t	|| ¡ ƒ t
 t¡� t| ¡ |ƒ W 5 Q R X | t j¡}| t j¡}| ¡ }| ¡ }| ¡ }||9 }t||ƒ t||ƒ t	| ¡ | ¡ ƒ t	|| ¡ ƒ t	|| ¡ ƒ t
 t¡� t| ¡ |ƒ W 5 Q R X d S )Nr   éd   éÈ   çš™™™™™©?)r*   rI   r   r#   rM   r…   Útocscrs   r	   r   r%   r&   r'   Útolilr/   r+   ©rN   r5   ZXrZXcZXAÚscaler@   r@   rA   Útest_inplace_column_scaleN  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 5 Q R X | t j¡}| t j¡}| ¡ }| ¡ }| ¡ }|| dd¡9 }t	||ƒ t	||ƒ t
| ¡ | ¡ ƒ t
|| ¡ ƒ t
|| ¡ ƒ t t¡� t| ¡ |ƒ W 5 Q R X d S )Nr   r–   r—   r˜   rq   r   )r*   rI   r   r#   rM   r…   r™   rs   Zreshaper
   r   r%   r&   r'   r	   rš   r/   r+   r›   r@   r@   rA   Útest_inplace_row_scalen  s6    




rž   c               	   C   sœ  t jdddgdddgdddgdddgdddggt jd	�} t | ¡}t | ¡}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 5 Q R X t jdddgdddgdddgdddgdddggt jd	�} t | ¡}t | ¡}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 5 Q R X d S )Nr   r   r   r   r�   rŽ   r�   r   rS   ©Úswaprq   )r*   rk   r,   r#   r(   r)   r   Úget_blas_funcsr   r   rs   r%   r&   r'   rš   r+   ©r5   r8   r9   r    r@   r@   rA   Útest_inplace_swap_rowŽ  sX    * ÿ

* ÿ

r£   c               	   C   s  t jdddgdddgdddgdddgdddggt jd	�} t | ¡}t | ¡}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 5 Q R X t jdddgdddgdddgdddgdddggt jd	�} t | ¡}t | ¡}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 5 Q R X d S )Nr   r   r   r   r�   rŽ   r�   r   rS   rŸ   rq   r   )r*   rk   r,   r#   r(   r)   r   r¡   r   r   rs   r%   r&   r'   rš   r+   r¢   r@   r@   rA   Útest_inplace_swap_column¾  sX    * ÿ

>>* ÿ

>>r¤   Úsparse_formatz.missing_values, min_func, max_func, ignore_nanFTÚlarge_indicesc                 C   s˜   t jdddgdd|gdddgd|dgdddgg| d	�}||ƒ}	|r^|	j d
¡|	_|	j d
¡|	_t|	||d�\}
}t|
|||d�ƒ t||||d�ƒ d S )Nr   r   r   rq   r�   r�   r   r   rS   r.   )r!   Ú
ignore_nanr    )r*   rk   Úindicesr/   Úindptrr   r   )r0   r!   r¥   Zmissing_valuesZmin_funcZmax_funcr§   r¦   r5   r=   Zmins_sparseZmaxs_sparser@   r@   rA   Útest_min_maxî  s     ûø
rª   c               	   C   sº   t jdddgdddgdddgdddgddd	ggt jd
�} t | ¡}t | ¡}t t¡� t	| 
¡ dd� W 5 Q R X t t¡� t	|dd� W 5 Q R X t t¡� t	|dd� W 5 Q R X d S )Nr   r   r   rq   r�   rŽ   r�   r   r   rS   r    r‹   )r*   rk   r,   r#   r(   r)   r%   r&   r'   r   rš   rt   )r5   r8   r9   r@   r@   rA   Útest_min_max_axis_errors  s    * ÿ

r«   c               
   C   s  t jdddgdddgdddgdddgddd	ggt jd
�} t | ¡}t | ¡}| dk}dddddg}|t  |¡d d …d f  }dD ]:}tt||d�|j|d�ƒ tt|||d�|j|d�ƒ q€t	 
t¡� t|ƒ W 5 Q R X t	 
t¡� t|dd� W 5 Q R X t|dd�jt|dd�jk�st‚t|d|d�jt|d|d�jk�sDt‚zl|j t j¡|_|j t j¡|_t|dd�jt|dd�jk�sˆt‚t|d|d�jt|d|d�jk�s®t‚W nL tk
�rü } z,d|jd k�rät  ¡ jdk �sìt|ƒ‚W 5 d }~X Y nX d S )Nr   r   r   rq   r�   rŽ   r�   r   r   rS   ç      à?gš™™™™™É?g333333Ó?gš™™™™™¹?)r   r   rq   éþÿÿÿNr    )r!   rO   r   zaccording to the rule 'safe')r*   rk   r,   r#   r(   r)   r   r   Úsumr%   r&   r'   rt   r0   r1   r¨   r/   r.   r©   Úargsr‘   Únbytes)r5   r8   r9   Z	X_nonzerorO   ZX_nonzero_weightedr!   Úer@   r@   rA   Útest_count_nonzero"  sJ    * ÿ


 
ÿ
þ"ÿÿ"ÿÿr²   c               	   C   s>  t j d¡} |  dd¡}t j|dd�}t |¡}t|ƒ}t||ƒ |  dd¡}d||dk < |  	ddd¡}||  ||< t |¡}t j|dd�}t|ƒ}t||ƒ dd	gd
d
gddgddgg}t |¡}tt|ƒt  
ddg¡ƒ dd	gd
dgddgg}t |¡}tt|ƒt  
ddg¡ƒ t t¡� tt |¡ƒ W 5 Q R X d S )Nr   r–   r_   r    é3   g        gffffffæ?rF   r­   rq   r   r   r¬   g      à¿éûÿÿÿr‹   )r*   rI   r   rM   Zmedianr#   r)   r   r   rb   rk   r%   r&   r'   r(   )rN   r5   Zdense_medianZcscZsparse_medianÚindr@   r@   rA   Útest_csc_row_medianN  s,    





r¶   c                  C   sî   t  d¡} tdƒ}ttfD ]Î}t jt jfD ]¼}| dd¡ |¡}t	 
|¡}t jt jfD ]Ž}|t jkr€|j |¡|_|j |¡|_|jj|ks�t‚|jj|ks t‚||ƒ |j|ks¶t‚|tkrÌ| jdC  _tt  |¡jdd�| ƒ qVq*qd S )N)rF   r   rF   r   r   r   r    )r*   r’   r   r   r   r,   r+   Zrandnr/   r#   r(   r-   r.   r©   r¨   r0   r1   Údatar   Úabsr®   )r’   ÚrsZinplace_csr_row_normalizer0   r5   r8   Zindex_dtyper@   r@   rA   Útest_inplace_normalizep  s&    
þ

rº   c                 C   sb   t jddd| dd�}t jj|dd�d }t|ƒ}|j| ks>t‚| tjkrLd	nd
}t	|||d� d S )Nr–   rF   rx   rp   )rz   r0   r   r   r    r   g�íµ ÷Æ°>gH¯¼šò×z>)Úrtol)
r#   rI   r   Znormr   r0   r1   r*   r+   r   )r0   r5   Zscipy_normsZnormsr»   r@   r@   rA   Útest_csr_row_normsŠ  s    r¼   )Fr%   Únumpyr*   Zscipy.sparseÚsparser#   Zscipyr   Znumpy.testingr   r   Znumpy.randomr   Zsklearn.datasetsr   Zsklearn.utils.sparsefuncsr   r   r	   r
   r   r   r   r   r   Zsklearn.utils.sparsefuncs_fastr   r   r   r   Zsklearn.utils._testingr   rB   ÚmarkZparametrizer+   r,   r(   r)   rP   rQ   rL   rk   r\   r^   rn   rv   rI   ZhstackrJ   r„   r†   r‡   rŠ   rŒ   r•   r�   rž   r£   r¤   ÚminÚmaxZnanminZnanmaxrª   r«   r²   r¶   rº   r¼   r@   r@   r@   rA   Ú<module>   sà   ,"".2(ý.
úöýëþD,4(ý&ýù
"ýîþDQ
þþûþûþ
/  00 þ,"