a
    Pfw4                     @   sb   d dl Zd dlZd dlmZmZmZ d dlmZ	 d dl
m  mZ G dd dZG dd dZdS )    N)	DataFrameIndexSeriesc                   @   s   e Zd Zejdd Zejdee	d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ddg dfd d!gd"d# Zd$d% Zd&d' Zd(S ))
TestSamplec                 C   s:   |t u rtjdd}ntjdd}||d dS )N   
   )r   r   )Zdtype)r   nprandomdefault_rngstandard_normal)selfframe_or_seriesZarr r   _/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/tests/frame/methods/test_sample.pyobj   s    zTestSample.objtestr   c              	   C   s@  t jddd}t|jd|d|jd|d t|jd|d|jd|d t|jdt j|d|jdt j|d t|jdt j|d|jdt j|d t|jddt j|d	|jddt j|d	 g g  }}tdD ],}||jd|d ||jd|d qtj|  tj|  d S )
Nr   r   d      nrandom_stategffffff?)fracr   T)r   replacer   )	r   r	   r
   Zintegerstmassert_equalsamplerangeappend)r   r   r   seedZos1Zos2_r   r   r   test_sample   sD    



zTestSample.test_samplec                 C   sL   t |jdddksJ t |jdddks0J t |jdddksHJ d S )Nr   r   g(\?r      g
ףp=
?)lenr   r   r   r   r   r   test_sample_lengthsE   s    zTestSample.test_sample_lengthsc                 C   sB   d}t jt|d |jdd W d    n1 s40    Y  d S )Nzdrandom_state must be an integer, array-like, a BitGenerator, Generator, a numpy RandomState, or NonematchZa_string)r   pytestraises
ValueErrorr   r   r   msgr   r   r    test_sample_invalid_random_stateK   s    z+TestSample.test_sample_invalid_random_statec                 C   sD   d}t jt|d |jddd W d    n1 s60    Y  d S )Nz0Please enter a value for `frac` OR `n`, not bothr'   r#   g333333?)r   r   r)   r-   r   r   r   "test_sample_wont_accept_n_and_fracT   s    z-TestSample.test_sample_wont_accept_n_and_fracc                 C   sx   t jtdd |jdd W d    n1 s00    Y  t jtdd |jdd W d    n1 sj0    Y  d S )Nz<A negative number of rows requested. Please provide `n` >= 0r'   r!   z?A negative number of rows requested. Please provide `frac` >= 0g333333ӿr"   r)   r%   r   r   r   $test_sample_requires_positive_n_fracZ   s    *z/TestSample.test_sample_requires_positive_n_fracc                 C   s>   t jtdd |jdd W d    n1 s00    Y  d S )Nz$Only integers accepted as `n` valuesr'   g	@r!   r)   r%   r   r   r   test_sample_requires_integer_nf   s    z)TestSample.test_sample_requires_integer_nc                 C   s   d}t jt|d" |jdddgd W d    n1 s:0    Y  t jt|d( dgd }|jd|d W d    n1 s0    Y  t jtd	d* tg d
}|jd|d W d    n1 s0    Y  d S )N5Weights and axis to be sampled must be of same lengthr'   r#   r      r   weights      ?   z%Fewer non-zero entries in p than size)r   r   g?r   )r*   r+   r,   r   r   )r   r   r.   bad_weightsZbad_weight_seriesr   r   r   "test_sample_invalid_weight_lengthsk   s    0
,z-TestSample.test_sample_invalid_weight_lengthsc                 C   sN   dgd }d}t jt|d |jd|d W d    n1 s@0    Y  d S )Ngr   z.weight vector many not include negative valuesr'   r#   r6   r)   )r   r   r:   r.   r   r   r   test_sample_negative_weightsy   s    
z'TestSample.test_sample_negative_weightsc                 C   s   dgd }t j|d< d}tjt|d |jd|d W d    n1 sJ0    Y  dgd }t j |d< tjt|d |jd|d W d    n1 s0    Y  d S )Ng?r   r   z*weight vector may not include `inf` valuesr'   r#   r6   )r   infr*   r+   r,   r   )r   r   Zweights_with_infr.   Zweights_with_ninfr   r   r   test_sample_inf_weights   s    

,
z"TestSample.test_sample_inf_weightsc                 C   sJ   dgd }t jtdd |jd|d W d    n1 s<0    Y  d S )Nr   r   $Invalid weights: weights sum to zeror'   r#   r6   r)   )r   r   Zzero_weightsr   r   r   test_sample_zero_weights   s    
z#TestSample.test_sample_zero_weightsc                 C   sL   t jgd }tjtdd |jd|d W d    n1 s>0    Y  d S )Nr   r?   r'   r#   r6   )r   nanr*   r+   r,   r   )r   r   Znan_weightsr   r   r   test_sample_missing_weights   s    z&TestSample.test_sample_missing_weightsc                 C   s8   d gd }d|d< t |jdd|d|jdd  d S )Nr   r8      r5   r   r   axisr7      )r   r   r   iloc)r   r   Zweights_with_Noner   r   r   test_sample_none_weights   s
    
z#TestSample.test_sample_none_weightszfunc_str,argznp.array)r   r#   r5   r   )znp.random.MT19937r#   )znp.random.PCG64r9   c                 C   sh   t tddtddd}t||}|jdt||d}|jdtt||d}t|| d S )Nr         col1col2r#   r   )	r   r   r   get_objr   evalcomr   r   )r   Zfunc_strargr   r   resultexpectedr   r   r   test_sample_random_state   s
    
z#TestSample.test_sample_random_statec                 C   s   |t d}t jd}|jd|d}|jd|d}|jj|jjk rNJ |jdt jdd}|jdt jdd}t	|| d S )Nr   r   2   r   r9   )
r   Zaranger	   r
   r   indexvaluesallr   r   )r   r   r   rngZresult1Zresult2r   r   r   test_sample_generator   s    z TestSample.test_sample_generatorc                 C   s`   t dtdi}t||}d}tjt|d |jddd W d    n1 sR0    Y  d S )NAabczJReplace has to be set to `True` when upsampling the population `frac` > 1.r'   r   F)r   r   )r   listr   rN   r*   r+   r,   r   )r   r   r   r.   r   r   r   *test_sample_upsampling_without_replacement   s    z5TestSample.test_sample_upsampling_without_replacementN)__name__
__module____qualname__r*   Zfixturer   markZparametrizer]   r   r    r&   r/   r0   r2   r3   r;   r<   r>   r@   rB   rH   rT   rZ   r^   r   r   r   r   r      s2   

.	

r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestSampleDataFramec           	      C   s&  dgd }d|d< t tddtdddgd |d}|jdd	d
}t||jdd  ttd}d}tjt	|d |jddd
 W d    n1 s0    Y  d}tjt	|d  |jdddd W d    n1 s0    Y  tjt
dd |jddd
 W d    n1 s0    Y  dgd }d|d< t|jd|d
|jd d  t tddgd d}ddg}t|jdd|d|dg  t|jdd|d|dg  dgd }d|d< t|jdd|d|jdd  t|jdd|d|jdd  d}tjt	|d |jddd W d    n1 sB0    Y  d}tjt	|d |jddd W d    n1 s0    Y  ttd}tjt	d d |jddd W d    n1 s0    Y  d!}tjt	|d& |jdddgd d W d    n1 s0    Y  d S )"Nr   r   r5   rC   rI   rJ   a)rL   rM   	colStringeasyweightsrf   r6   rF   z@Strings cannot be passed as weights when sampling from a Series.r'   r#   Zweight_columnzLStrings can only be passed to weights when sampling from rows on a DataFrame)r   r7   rE   z-'String passed to weights not a valid column'Znot_a_real_column_namer8   rK   rD   rM   columnsrowsrV   z)No axis named 2 for object type DataFramer   )r   rE   z2No axis named not_a_name for object type DataFrameZ
not_a_namez&No axis named 1 for object type Seriesr4   )r   r   r   r   assert_frame_equalrG   r   r*   r+   r,   KeyError)	r   easy_weight_listdfsample1serr.   Zweights_less_than_1Zsecond_column_weightweightr   r   r   r       sh    
,..
 
"...zTestSampleDataFrame.test_samplec                 C   s|   dgd }d|d< t tddtdddgd d	}|jdd|d
}t||dg  t|jddd|jdddd d S )Nr   r#   r5   r   r   rI   rJ   rd   rL   rM   re   rD   re   *   r   )r   rE   r   )r   r   r   r   ri   )r   rk   rl   rm   r   r   r   test_sample_axis1+  s    
z%TestSampleDataFrame.test_sample_axis1c                 C   s  t g dg ddg dd}tg dg dd}t|jdg |jd	|d
 tg dg dd}t|jdg |jd	|d
 tddgddgd}t|jdg |jd	|d
 td	dgd	dgd}tjtdd |jd	|d
 W d    n1 s0    Y  d S )N)rC   rF      rd   bcrK   )	   rC   r#   )rV   )r5   r   r   )r#   rC   rw   r#   r5   r7   )gMbP?r   i'  )r#   rC   r   g{Gz?r   rC   r   r?   r'   )	r   r   r   ri   locr   r*   r+   r,   )r   rl   rn   Zser2Zser3Zser4r   r   r   %test_sample_aligns_weights_with_frame;  s    z9TestSampleDataFrame.test_sample_aligns_weights_with_framec                 C   s^   t tjddg dd}|d}td  d|d< W d    n1 sP0    Y  d S )Nr   )r   r#   rt   )rg   r#   r5   d)r   r   r	   r
   r   r   r   Zassert_produces_warning)r   rl   Zdf2r   r   r   test_sample_is_copyP  s    
z'TestSampleDataFrame.test_sample_is_copyc                 C   s   t t jdt jg}| }tg d}|j|d t|| tg ddt jt jgd}|d  }|jdddd	 |d }t	|| d S )
Nr5   )r5   r   r#   rx   )r5   r5   r5   )rW   r7   r7   g      ?T)r   r   r7   )
r   arrayrA   copyr   r   r   Zassert_numpy_array_equalr   Zassert_series_equal)r   rR   rS   rn   rl   r   r   r   #test_sample_does_not_modify_weights[  s    z7TestSampleDataFrame.test_sample_does_not_modify_weightsc                 C   sR   t tddtdddgd d}|jddd}ttd}tj|j|dd	 d S )
Nr   rI   rJ   rd   rp   r#   T)Zignore_index)exact)r   r   r   r   r   Zassert_index_equalrV   )r   rl   rR   Zexpected_indexr   r   r   test_sample_ignore_indexm  s    z,TestSampleDataFrame.test_sample_ignore_indexN)	r_   r`   ra   r    rr   rz   r|   r   r   r   r   r   r   rc      s   Urc   )numpyr   r*   Zpandasr   r   r   Zpandas._testingZ_testingr   Zpandas.core.commoncorecommonrP   r   rc   r   r   r   r   <module>   s    F