a
    ýCat  ã                
   @   sL  d dl 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 ejdd„ ƒZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejje	ejƒdk dd d!d"„ ƒZejje	ejƒdkd#d ej d$d%e d ¡e d ¡d&fe d ¡e d'¡d(fd)d*g¡d+d,„ ƒƒZejje	ejƒdkd#d d-d.„ ƒZ dS )/é    N)Úassert_array_equal)ÚLooseVersioné   )Ú
algorithmsc                   C   s   t j tttdƒƒ¡ d S )NZtest_algorithms)ÚnpÚrandomÚseedÚsumÚmapÚord© r   r   ú<lib/python3.9/site-packages/seaborn/tests/test_algorithms.pyr      s    r   c                 C   sR   t  d¡}d}tj||d}t|t  |¡ƒ tj||t jd}t|t  |¡ƒ dS )z=Test that bootstrapping gives the right answer in dumb cases.é
   é   ©Ún_boot©r   ÚfuncN)r   ÚonesÚalgoÚ	bootstrapr   Zmedian)r   Za_onesr   Zout1Zout2r   r   r   Útest_bootstrap   s    
r   c                 C   sL   t j d¡}t |¡}t|ƒdks&J ‚d}tj||d}t|ƒ|ksHJ ‚dS )z6Test that we get a bootstrap array of the right shape.éè  i'  éd   r   N)r   r   Úrandnr   r   Úlen)r   Úa_normÚoutr   r   r   r   Útest_bootstrap_length   s    
r   c                 C   sL   t j d¡}| ¡ | ¡  }}t |¡}|| ¡ ks8J ‚|| ¡ ksHJ ‚dS )zCTest that boostrapping a random array stays within the right range.r   N)r   r   r   ÚminÚmaxr   r   )r   r   ZaminZamaxr   r   r   r   Útest_bootstrap_range%   s
    
r!   c                 C   sn   t  dd„ tdƒD ƒ¡}t  dd„ tdƒD ƒ¡}dd„ }tj||d|d}t  d	dgd	dgg¡}t||ƒ d
S )z5Test that bootstrap works with multiple input arrays.c                 S   s   g | ]}d dg‘qS )é   r   r   ©Ú.0Úir   r   r   Ú
<listcomp>0   ó    z+test_bootstrap_multiarg.<locals>.<listcomp>r   c                 S   s   g | ]}d d g‘qS )r   r   r#   r   r   r   r&   1   r'   c                 S   s   t  | |f¡jddS )Nr   )Úaxis)r   Úvstackr    )ÚxÚyr   r   r   Úf3   s    z"test_bootstrap_multiarg.<locals>.fr   r   r   N)r   r)   Úranger   r   Zarrayr   )r   r*   r+   r,   Z
out_actualZ
out_wantedr   r   r   Útest_bootstrap_multiarg.   s    r.   c                 C   s\   t j dd¡}d}tj||d}|j|fks0J ‚tj||dd}|jsXJ ||jd fƒ‚dS )	z&Test axis kwarg to bootstrap function.r   é   r   r   r   )r   r(   r"   N)r   r   r   r   r   Úshape)r   r*   r   Zout_defaultZout_axisr   r   r   Útest_bootstrap_axis;   s    r1   c                 C   s:   t j d¡}d}tj||d}tj||d}t||ƒ dS )z?Test that we can get reproducible resamples by seeding the RNG.é2   é*   ©r   N)r   r   r   r   r   r   )r   Údatar   Úboots1Úboots2r   r   r   Útest_bootstrap_seedG   s
    r8   c           	      C   sÆ   dd„ }t  t j dd¡t  d¡f¡}g d¢}t  ||¡t j d¡d  }t  ||¡t j d¡ }d}tj||||d}tj||||d}|j|d	fksœJ ‚|j|d	fks®J ‚| 	¡ | 	¡ ksÂJ ‚d
S )z Test bootstrap of OLS model fit.c                 S   s(   t j t  | j| ¡¡}| | j¡ |¡S ©N)r   ZlinalgÚinvÚdotÚT)ÚXr+   ZXtXinvr   r   r   Úols_fitR   s    z#test_bootstrap_ols.<locals>.ols_fitr2   é   )r   r?   r   é   r   r/   iô  r   r   N)
r   Zcolumn_stackr   r   r   r;   r   r   r0   Ústd)	r   r>   r=   ÚwZy_noisyZ
y_lownoiser   Zw_boot_noisyZw_boot_lownoiser   r   r   Útest_bootstrap_olsP   s"    þþrC   c                 C   sv   t j d¡}t  tdƒd¡}t j ddd¡}|| }|| }d}tj||d}tj|||d}| ¡ | ¡ ksrJ ‚d	S )
z@Test that results make sense when passing unit IDs to bootstrap.r2   r   r   r   r   éM   r4   )Zunitsr   N)	r   r   r   Úrepeatr-   Znormalr   r   rA   )r   r5   ZidsZbwerrZdata_rmr   Z
boots_origZboots_rmr   r   r   Útest_bootstrap_unitsh   s    rF   c                   C   sF   t  t¡( t t d¡t d¡¡ W d  ƒ n1 s80    Y  dS )z1Test that different length args raise ValueError.r   r   N)ÚpytestÚraisesÚ
ValueErrorr   r   r   Zaranger   r   r   r   Útest_bootstrap_arglengthv   s    rJ   c                  C   s¬   t j d¡} tj| ddd}tj| t jdd}t  ||¡s>J ‚tj| ddd}tj| t jdd}t  ||¡spJ ‚t 	t
¡ tj| dd W d  ƒ n1 sž0    Y  dS )	zATest that named numpy methods are the same as the numpy function.r   Úmeanr   )r   r   rA   Znot_a_method_name)r   N)r   r   r   r   r   rK   Zarray_equalrA   rG   rH   ÚAttributeError)r*   Zres_aZres_br   r   r   Útest_bootstrap_string_func|   s    rM   c                 C   s†   t j d¡}tj|dd}tj|dd}t||ƒ t t¡6 tj|dd}tj|dd}t||ƒ W d  ƒ n1 sx0    Y  dS )z7Test that bootstrapping uses the internal random state.r2   r   r4   )Zrandom_seedN)	r   r   r   r   r   r   rG   ZwarnsÚUserWarning)r   r5   r6   r7   r   r   r   Útest_bootstrap_reproducibilityŒ   s    
rO   z1.17z$Tests new numpy random functionality)Úreasonc                  C   s  d d t jdft  d¡t  d¡t jdft  d¡t  d¡t jdft  d¡t  d¡t jdft  d¡t  d¡t jdft  d¡t  d¡t jdft  d¡t  d¡t jdfddt jdfdd	t jdfg	} | D ]T\}}}}t |¡}t |¡}t||ƒsêJ ‚t||ƒsøJ ‚| ¡ | ¡ k|ks¼J ‚q¼d S )
NFr   Tr"   r   r   r/   r   éÈ   )	ÚnprÚ	GeneratorÚRandomStateZdefault_rngZSeedSequencer   Ú_handle_random_seedÚ
isinstanceÚuniform)Z	test_bankÚseed1Úseed2Z	rng_classÚmatchÚrng1Úrng2r   r   r   Útest_seed_newš   s     ÷

r]   z$Tests old numpy random functionalityzseed1, seed2, match)NNFTr"   F)r   r   T)r   rQ   Fc                 C   sT   t  | ¡}t  |¡}t|tjjƒs&J ‚t|tjjƒs8J ‚| ¡ | ¡ k|ksPJ ‚d S r9   )r   rU   rV   r   r   rT   rW   )rX   rY   rZ   r[   r\   r   r   r   Útest_seed_old´   s
    


r^   c                   C   s8   t  t¡ t d¡ W d   ƒ n1 s*0    Y  d S )NZnot_a_random_seed)rG   rH   rI   r   rU   r   r   r   r   Útest_bad_seed_oldÅ   s    r_   )!Znumpyr   Znumpy.randomr   rR   rG   Znumpy.testingr   Zdistutils.versionr   Ú r   r   Zfixturer   r   r!   r.   r1   r8   rC   rF   rJ   rM   rO   ZmarkZskipifÚ__version__r]   ZparametrizerT   r^   r_   r   r   r   r   Ú<module>   sJ   

		ÿ
ÿûÿ