U
    >vfˎ                     @   s   d dl Zd dlZd dlmZmZ d dlZd dlmZm	Z	m
Z
mZ d dlmZ ejddgddggdd	 d
dd ZG dd dZG dd dZdS )    N)np_percentile_argnamenp_version_under1p21)	DataFrameIndexSeries	TimestamplinearZsinglenearesttablec                 C   s
   d | S )N-)joinx r   L/tmp/pip-unpacked-wheel-vdrwu74i/pandas/tests/frame/methods/test_quantile.py<lambda>       r   paramsidsc                 C   s   | j S )z.(interpolation, method) arguments for quantile)param)requestr   r   r   interp_method   s    r   c                
   @   s  e Zd Zejdeeej	
ddgeej	
ddgdeddgd	d
geeddddgddedgd	d
gg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d)d* Zd+d, Zd-d. Zd/d0 Zejd1d2d3d4d5gd6d7 Zejd8d9dd	d9gd	dggd:d; Zd<d= Zd>d? Zd@dA ZdBdC Z dDdE Z!dFdG Z"dHdI Z#dJdK Z$dLdM Z%dNdO Z&dPdQ Z'dS )RTestDataFrameQuantilezdf,expected            )r   r         ?      @      ?nameg        N      ?       @Sparse[float]dtypec                 C   s"   |  }|d}t|| d S )Nr%   )quantileastypetmassert_series_equal)selfdfexpectedresultr   r   r   test_quantile_sparse   s    
z*TestDataFrameQuantile.test_quantile_sparsec           	         s  |\}}|  j ddd||d}t fdd jD  jdd}|dkrVt|| n8t|j|j |jt	j
j|d	d
 |j|jkst j ddd||d}t fdd jD  jdd}|dkrt|| n:t|j|j |jt	j
j|d	d
 |j|jkstd S )N皙?r   Taxisnumeric_onlyinterpolationmethodc                    s   g | ]}t  | d qS )
   )np
percentile).0colr-   r   r   
<listcomp>>   s     z7TestDataFrameQuantile.test_quantile.<locals>.<listcomp>indexr"   r   z%Name set incorrectly for arraymanagerreason?r   c                    s   g | ]}t  j| d qS )Z   )r8   r9   loc)r:   dater<   r   r   r=   R   s     )r(   r   columnsr*   r+   Zassert_index_equalr?   node
add_markerpytestmarkxfailr"   AssertionError)	r,   datetime_framer   using_array_managerr   r5   r6   r/   r.   r   r<   r   test_quantile5   s\              z#TestDataFrameQuantile.test_quantilec                 C   sJ   |\}}t g g djddd||d}t|d rBt|d sFtd S )Nr   yr1   r   Tr2   r   rQ   )r   r(   r8   isnanrL   )r,   r   r5   r6   qr   r   r   
test_emptyb   s        z TestDataFrameQuantile.test_emptyc           	      C   s   |\}}t ddddgddddgd}|jdd	||d
}|jd	dd}|dkrb|d tj}|dkr|r|jt	j
jdd t|| d S )NABr   r   r   r   )Zcol1Zcol2r    Tr4   r5   r6   r4   r	   r
   Axis name incorrectly set.r@   )r   r(   Zmedianrenamer)   r8   int64rG   rH   rI   rJ   rK   r*   r+   )	r,   r   r   rN   r5   r6   r-   rsZxpr   r   r   test_non_numeric_exclusioni   s        z0TestDataFrameQuantile.test_non_numeric_exclusionc           	      C   s2  |\}}t dddgdddgddddgd}|jdd||d}td	d
dgdddgdd}|dkrl|tj}|dkr|r|jtj	j
dd t|| |jddgd||d}t d	dgd
dgddgdddgd}|dkr|jdd d f  d8  < |jdd d f  d7  < |tj}tj||dd d S )Nr   r   r   r   rU   rV   r?   r    r3   r5   r6   r         @r   r>   r	   r
   rY   r@         ?g      ?g      @g      @r   r   r   r         ?T)Zcheck_index_type)r   r(   r   r)   r8   r[   rG   rH   rI   rJ   rK   r*   r+   ilocassert_frame_equal	r,   r   r   rN   r5   r6   r-   r/   r.   r   r   r   	test_axisx   s4    $    
zTestDataFrameQuantile.test_axisc           	      C   s   |\}}t dddgdddgg}|jddd||d	}td
dgddgdd}|dkr^|tj}|dkr|r|jtj	j
dd t|| d S )Nr   r   r   abr   r    Tr2         @      @r   r>   r	   r
   rY   r@   )r   r(   r   r)   r8   r[   rG   rH   rI   rJ   rK   r*   r+   rg   r   r   r   test_axis_numeric_only_true   s"        z1TestDataFrameQuantile.test_axis_numeric_only_truec                 C   sz   |\}}t jdddd}t|}t|}|jd||d}	tdgdd	d
}
|dkrj|rj|jtjj	dd t
|	|
 d S )N
2016-01-01r   
US/PacificperiodstzFrW   z2016-01-02 00:00:00r    datetime64[ns, US/Pacific])r"   r'   r
   rY   r@   )pd
date_ranger   r   r(   rG   rH   rI   rJ   rK   r*   r+   )r,   r   r   rN   r5   r6   Zdtiserr-   r/   r.   r   r   r   test_quantile_date_range   s&        z.TestDataFrameQuantile.test_quantile_date_rangec           
   	   C   s   |\}}t dddgdddgtjdddd	d
dgd}|jddd||d}tdddgdd}|dkrl|d8 }|dkr|r|jtjj	dd t
|| d}	tjt|	d |jdddd W 5 Q R X d S )Nr   r   r   r$   rk   rl   Z20130101rq   foobarZbaz)rU   rV   CDr    Tr2   r   ra   r   r!   r	   r
   rY   r@   z>'<' not supported between instances of 'Timestamp' and 'float'matchFr3   r4   )r   rt   ru   r(   r   rG   rH   rI   rJ   rK   r*   r+   raises	TypeError
r,   r   r   rN   r5   r6   r-   r/   r.   msgr   r   r   test_quantile_axis_mixed   s4        z.TestDataFrameQuantile.test_quantile_axis_mixedc           
   	   C   s  |\}}|dkr*|r*|j tjjdd tdddgdddgddddgd	}|jd
d||d}tddgddgd
d}|dkr|t	j
}t|| |jd
d||d}|dkr|t	j
}t|| |jd
d||d}tdddgdddgd
d}|dkr
|t	j
}t|| |jd
d||d}t|| d}	tjt|	d |jdd||d W 5 Q R X d}	tjt|	d |jddd W 5 Q R X d S )Nr
   rY   r@   r   r   r   r   r^   r_   r    r   r`   r$   rk   rU   rV   r>   r	   r?   r   ra   r   rF   z*No axis named -1 for object type DataFramer}   r1   z.No axis named column for object type DataFramecolumnr3   )rG   rH   rI   rJ   rK   r   r(   r   r)   r8   r[   r*   r+   r   
ValueErrorr   r   r   r   test_quantile_axis_parameter   sL    $   
   z2TestDataFrameQuantile.test_quantile_axis_parameterc                 C   sV  t dddgdddgddddgd}|jdddd	}tdddgdddgdd
}t|| tjtdddgdddggdfdditdi}t|dddgddd}t|| t dddgdddgddddgd}|jdddd	}tdddgdddgdd
}t|| tjtdddgdddggdfdditdi}t|dddgddd}t|| |jddgddd	}t ddgddgddgdddgd}t	|| t g g d}|jdddd	}t
|d rt
|d stt dddgdddgdddggdddgd}|jd dgd!d"}t d#d#d#gdddggd dgdddgd$}t	|| d S )%Nr   r   r   r   r^   r_   r    r	   r3   r5   r>   r3   r   r[   r?   r"   r'   r#   r$   rk   rl   float64rb   lowerrc   rP   r1   Zhigherr   rQ   ri   rj   crF   rd   Zmidpoint)r5   r   r?   rF   )r   r(   r   r*   r+   r8   r9   arrayr   rf   rR   rL   )r,   r-   r/   r.   exprS   r   r   r   test_quantile_interpolation   sZ    $$ $*z1TestDataFrameQuantile.test_quantile_interpolationc                 C   s6   |}|j ddddd}|d t|d dks2td S )Nr1   r   Tr   )r3   r4   r5   rU   r7   )r(   r8   r9   rL   )r,   rM   r-   rS   r   r   r   $test_quantile_interpolation_datetime7  s    z:TestDataFrameQuantile.test_quantile_interpolation_datetimec                 C   sf   |}| d}|d t|d dks*t|j dddd}|d t|d dksVtt|| d S )Nr1   rU   r7   r   r   r   )r(   r8   r9   rL   r*   r+   )r,   Z	int_framer-   rS   Zq1r   r   r   test_quantile_interpolation_int?  s    
z5TestDataFrameQuantile.test_quantile_interpolation_intc           	      C   s   |\}}t dddgdddgdddggdddgd}|jdd	g||d
}t dddgdddggdd	gdddgd}|dkr|tj}|dkr|r|jtjj	dd t
|| d S )Nr   r   r   ri   rj   r   r   rd   r    r5   r6   r   r$   r   r	   r
   rY   r@   r   r(   r)   r8   r[   rG   rH   rI   rJ   rK   r*   rf   rg   r   r   r   test_quantile_multiL  s    *z)TestDataFrameQuantile.test_quantile_multic           	      C   s   |\}}t dddgdddgdddggdddgd}|jdd	gd||d
}t dddggd dd	gdddgd}|dkr|tj}|dkr|r|jtjj	dd t
|| d S )Nr   r   r   ri   rj   r   r   rd   r    r`   r#   r$   rk   r   r   r	   r
   rY   r@   r   rg   r   r   r   test_quantile_multi_axis_1]  s(    *     z0TestDataFrameQuantile.test_quantile_multi_axis_1c                 C   s^   |\}}t g g djddgd||d}t tjtjgtjtjgdddgd}t|| d S )NrP   r1   rB   r   r`   r_   )r   r(   r8   nanr*   rf   )r,   r   r5   r6   r/   r.   r   r   r   test_quantile_multi_emptyn  s        z/TestDataFrameQuantile.test_quantile_multi_emptyc                 C   s  t tddgddgd}|jddd}td	gd
gdd}t|| |jddd}ttdd	gdd
gdd}t|| |jdgdd}t tdd	ggdgdd
gd}t|| tddg|d< |ddg jdddd}ttdtdgddgdd}t|| |ddg jdgddd}t tdtdggdgddgd}t|| |ddg jddd}tg g t	j
dd}t|| |ddg jdgdd}t dgg d}t|| d S )N20102011r      ri   rj   r    TrX   ra   rj   r>   Fz2010-07-02 12:00:00ri   r   2012r   r   r   z2011-07-02 12:00:00r?   r'   r"   )r   rt   to_datetimer(   r   r*   r+   r   rf   r8   r   )r,   r-   r/   r.   r   r   r   test_quantile_datetimex  sN    
    z,TestDataFrameQuantile.test_quantile_datetimer'   datetime64[ns]rs   timedelta64[ns]z	Period[D]c                 C   s|   |\}}t ddg|d}|jddd||d}tg g d|d}t|| |jdgdd||d}t dgg d	}t|| d S )
Nri   rj   rF   r'   r    r   Fr2   r   r   )r   r(   r   r*   r+   rf   )r,   r'   r   r5   r6   r-   resr.   r   r   r   test_quantile_dt64_empty  s(        z.TestDataFrameQuantile.test_quantile_dt64_emptyinvalidr   c              	   C   s:   d}|\}}t jt|d |j|||d W 5 Q R X d S )Nz2percentiles should all be in the interval \[0, 1\]r}   r   )rI   r   r   r(   )r,   r   rM   r   r   r5   r6   r   r   r   test_quantile_invalid  s    z+TestDataFrameQuantile.test_quantile_invalidc           	      C   s   |\}}|dkr*|r*|j tjjdd ttdtdtdgtdddtdddtdddgtd	td
tdgd}|j	dd||d}t
tdtdddtd
gddddgd}t|| |j	dgd||d}ttdtdddtd
ggdgdddgd}t|| d S )Nr
   rY   r@   
2011-01-01
2011-01-02
2011-01-03
US/Easternrr   1 days2 days3 days)rU   rV   r{   r    FrW   rU   rV   r{   r"   r?   r   )rG   rH   rI   rJ   rK   r   r   rt   	Timedeltar(   r   r*   r+   rf   	r,   r   r   rN   r5   r6   r-   r   r   r   r   r   test_quantile_box  sf    


   
	   
z'TestDataFrameQuantile.test_quantile_boxc                 C   s  t tdtjtdtdgtdtdtjtdgtdddtjtdddtdddgtdddtdddtjtdddgtdtdtdtjgtjtdtdtdgd	td
d}|jddd}ttdtdtdddtdddtdtdgdtd
d}t	|| |jdgdd}t tdtdtdddtdddtdtdggdgtd
d}t
|| d S )Nr   r   r   r   r   r   r   r   )rU   ri   rV   rj   r{   r   ZAaBbCcr   r    FrX   r   r   )r   r   rt   NaTr   listr(   r   r*   r+   rf   )r,   r-   r   r   r   r   r   test_quantile_box_nat  sz    





&*




z+TestDataFrameQuantile.test_quantile_box_natc           	      C   s  |\}}|dkr*|r*|j tjjdd ttddtddd}tj|j	d< |j
d||d	}td
|dkrtdnd
gddgdd}t|| |j
ddg||d	}td
dg|dkrddgnd
dgdddgd}t|| |j
dd||d}ttdddd}t|| |j
ddgd||d}ttddgd ddgd}|dkr\tj|j	d< t|| tj|d< |j
d||d	}td
tjgddgdd}t|| |j
ddg||d	}td
dgtjtjgdddgd}t|| d S )Nr
   rY   r@   r   g      @r   )r   r   r    r   rk   r   ra   ri   rj   r>   rb   rl   g      
@r_   r`   r#   r!   r   r	   )r   r   )rG   rH   rI   rJ   rK   r   r8   aranger   re   r(   r   r*   r+   rf   r   r   r   r   test_quantile_nanT  sT         

"z'TestDataFrameQuantile.test_quantile_nanc           	      C   sT  |\}}|dkr*|r*|j tjjdd tdtjtjtjgi}|jdd||d}t	tjgdgdd}t
|| |jdgd||d}tdtjgidgd	}t
|| ttd
tdtdgtjtjtjgd}|jdd||d}t	tdtjgddgdd}t
|| |jdgd||d}ttdtjggdgddgd}t
|| d S )Nr
   rY   r@   ri   r    FrW   r>   r_   z
2012-01-01z
2012-01-02z
2012-01-03r   rj   r   )rG   rH   rI   rJ   rK   r   rt   r   r(   r   r*   r+   rf   r   r   r   r   r   test_quantile_nat  sd                  z'TestDataFrameQuantile.test_quantile_natc                 C   s   |\}}t ddgdd}|jd||d}ttjtjgddgdd}t|| |jdg||d}t tjtjggddgdgd}t|| |jdd	||d
}tg g ddd}t|| |jdgd	||d
}t g dgd}t|| d S )Nri   rj   r   r   r    r   r>   )rF   r?   r   r`   r   )r   r(   r   r8   r   r*   r+   rf   r,   r   r5   r6   r-   r   r   r   r   r   "test_quantile_empty_no_rows_floats  s    z8TestDataFrameQuantile.test_quantile_empty_no_rows_floatsc                 C   sR   |\}}t ddgdd}|jd||d}ttjtjgddgdd}t|| d S )Nri   rj   r[   r   r    r   r>   )r   r(   r   r8   r   r*   r+   r   r   r   r    test_quantile_empty_no_rows_ints  s
    z6TestDataFrameQuantile.test_quantile_empty_no_rows_intsc                 C   s   |\}}t ddgdd}|jdd||d}ttjtjgddgddd}t|| |d jd	|d< |jdd||d}|	t
}t|| |d jd	|d< |jdd||d}|	|d j}t|| d S )
Nri   rj   r   r   r    FrW   r   z
US/Central)r   r(   r   rt   r   r*   r+   dtZtz_localizer)   objectr'   r   r   r   r    test_quantile_empty_no_rows_dt64  sB       
      
   z6TestDataFrameQuantile.test_quantile_empty_no_rows_dt64c                 C   s   |\}}t tjddd}d|j_|jdd||d}tg g dtjd}d|j	_t
|| |jdgd||d}t g dgg d	}d|j_t
|| d S )
Nz1/1/18r   rx   zcaptain tightpantsr    TrW   r   r   )r   rt   ru   rF   r"   r(   r   r8   r   r?   r*   r+   rf   )r,   r   r5   r6   r-   r/   r.   r   r   r   test_quantile_empty_no_columns  s*          z4TestDataFrameQuantile.test_quantile_empty_no_columnsc                 C   s   |\}}t tjdddddgd}|d d |d< |d }|sTt|jjdksTt|jd	||d
 |rd|j	d< |j	d |d d kst|j	d dkstn6d|j
d< |j	d |d d kst|j	d dkstd S )Nr   r   rU   rV   r{   r   r   r|   FrW   c   r   )r   r   )r   r8   randomZrandnlenZ_mgrblocksrL   r(   re   values)r,   rN   r   Zusing_copy_on_writer5   r6   r-   rv   r   r   r   test_quantile_item_cache  s    

z.TestDataFrameQuantile.test_quantile_item_cachec              	   C   s4   t jtdd ttdjddd W 5 Q R X d S )NzInvalid method: foor}   r   r    ry   )r6   rI   r   r   r   ranger(   r,   r   r   r   test_invalid_method  s    z)TestDataFrameQuantile.test_invalid_methodc              	   C   s6   t jtdd ttdjdddd W 5 Q R X d S )NzInvalid interpolation: foor}   r   r    r
   ry   )r6   r5   r   r   r   r   r    test_table_invalid_interpolation  s    z6TestDataFrameQuantile.test_table_invalid_interpolation)(__name__
__module____qualname__rI   rJ   parametrizer   r   rt   ZarraysZSparseArrayr0   rO   rT   r]   rh   rm   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sh   

-*9
1	

9L1/r   c                
   @   s  e Zd Zejejeje	dej
jdddejddddejddd	d
ejdddejedddejedddgdd ddd Zejdd Zdd Zdd Zdd Zdd Zdd  Zej
d!d"g g d#gd$g g d#gd"ejejgd%d&gd'gd$ejejgd%d&gd'ggd(d) Zej
d*d+g g d#d+gd+ejejgd%d&gd'd+ggd,d- Zej
d.ejejge	d/d#gg g d'ggd0d1 Zd2S )3TestQuantileExtensionDtyper7   z#raises when trying to add Intervalsr@   )Zmarksrn   	   r|   )rq   freqro   rp   z1 Dayrx   Int64r&   Float64c                 C   s
   t | jS )N)strr'   r   r   r   r   r   0  r   z#TestQuantileExtensionDtype.<lambda>r   c                 C   s   |j }d|_|S NrU   )r   r"   )r,   r   idxr   r   r   r?   $  s    z TestQuantileExtensionDtype.indexc                 C   s(   ||  }|tkrd|_ndg|_|S r   )copyr   r"   rF   )r,   r?   Zframe_or_seriesobjr   r   r   r   8  s
    zTestQuantileExtensionDtype.objc                 C   s(   t |tr||}n|j|dd}|S )NFrX   )
isinstancer   r(   )r,   r   qsr/   r   r   r   compute_quantileC  s    
z+TestQuantileExtensionDtype.compute_quantilec                 C   s   t jt|t jd}t j| |j| }dddg}| ||}trn|j	dkrnd}t
jj|td}|j| |j	}	|j	dkrd	}	t|d
 |d |d g|	|dd}
t||
}
t||
 d S )Nr&   r    r   r   r   Cfailed on Numpy 1.20.3; TypeError: data type 'Int64' not understoodrA   r   r   r   r   r   rU   r'   r?   r"   )r8   r   r   intpr   shufflere   r   r   r'   rI   rJ   rK   r   rG   rH   r   typer*   assert_equalr,   r   r   r?   indexerr   r/   r   rJ   Z	exp_dtyper.   r   r   r   test_quantile_eaJ  s(    


   z+TestQuantileExtensionDtype.test_quantile_eac                 C   s   |j |jd< |j |jd< tjt|tjd}tj| |j| }dddg}| ||}t	|d |d |d g|j
|dd	}t||}t|| d S )
Nr   r   r&   r    r   r   rU   r   )	_na_valuere   r8   r   r   r   r   r   r   r   r'   r   r*   r   )r,   r   r?   r   r   r/   r.   r   r   r   test_quantile_ea_with_nae  s    

   z3TestQuantileExtensionDtype.test_quantile_ea_with_nac                 C   s   |j |jd d < t|j|jks&ttjt|tj	d}tj
| |j| }dddg}| ||}|jdddgd|j d}t||dd	}t||}t|| d S )
Nr&   r    r   r   r   T)Z
allow_fillZ
fill_valuerU   r>   )r   re   r8   allZdtypesr'   rL   r   r   r   r   r   r   Ztaker   r   r*   r   )r,   r   r   r?   r   r   r/   r.   r   r   r   test_quantile_ea_all_nax  s    

z2TestQuantileExtensionDtype.test_quantile_ea_all_nac                 C   s   t jt|t jd}t j| |j| }d}| ||}trh|j	dkrhd}t
jj|td}|j| |j	}	|j	dkr|d}	td|d	 i|	dd
}
t|tr|
d }
||
kstnt||
 d S )Nr&   r    r   r   r   r   r   rU   r   )r'   r"   )r8   r   r   r   r   r   re   r   r   r'   rI   rJ   rK   r   rG   rH   r   r   rL   r*   r+   r   r   r   r   test_quantile_ea_scalar  s"    


z2TestQuantileExtensionDtype.test_quantile_ea_scalarz*dtype, expected_data, expected_index, axisr   r   r[   ri   rj   r   c                 C   sB   t ddg|d}|jd|d}t|dt|dd}t|| d S )Nri   rj   r   r    r   r   r"   r?   r'   r   r(   r   r   r*   r+   )r,   r'   expected_dataexpected_indexr3   r-   r/   r.   r   r   r   test_empty_numeric  s       z-TestQuantileExtensionDtype.test_empty_numericz:dtype, expected_data, expected_index, axis, expected_dtyper   c           	      C   sD   t ddg|d}|jd|dd}t|dt||d}t|| d S )Nri   rj   r   r    Fr   r   r   )	r,   r'   r   r   r3   Zexpected_dtyper-   r/   r.   r   r   r   test_empty_datelike  s       z.TestQuantileExtensionDtype.test_empty_datelikez#expected_data, expected_index, axisr   c                 C   sf   t tddgddgtddgd}|ddg jd	|d
d}t|d	t|tjd}t	|| d S )Nr   r   r   r   r   )ri   rj   r   ri   r   r    Tr   r   )
r   rt   r   r(   r   r   r8   r   r*   r+   )r,   r   r   r3   r-   r/   r.   r   r   r   test_datelike_numeric_only  s    	   z5TestQuantileExtensionDtype.test_datelike_numeric_onlyN)r   r   r   rI   fixturer   rt   ZIntervalIndexZfrom_breaksr   rJ   rK   Zperiod_rangeru   Ztimedelta_ranger   r8   r   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sX   




	
	
r   )Znumpyr8   rI   Zpandas.compat.numpyr   r   Zpandasrt   r   r   r   r   Zpandas._testingZ_testingr*   r   r   r   r   r   r   r   r   <module>   s$    
      