U
    f/e)`                     @   s\   d dl Zd dlZd dlZd dlmZmZmZmZ d dl	m
Z G dd dZG dd dZdS )    N)	DataFrameIndexSeries	Timestampc                
   @   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d1d2 ZdS )3TestDataFrameQuantilezdf,expected            )r   r         ?      @      ?nameg        N      ?       @zSparse[float]dtypec                 C   s   |  }t|| d S N)quantiletmassert_series_equal)selfdfexpectedresult r   L/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/frame/methods/test_quantile.pytest_quantile_sparse   s    z*TestDataFrameQuantile.test_quantile_sparsec           	   	   C   s   ddl m} |}|jddd}|d ||d dks8tt|j|j |jddd}|d	 ||jd	 d
ksrtt|j|j t	g g djddd}t
|d rt
|d stt	ddddgddddgd}|d}tjtdd | d}W 5 Q R X t|| 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}t|| |jddgdd}t	ddgddgddgd ddgd}tj||d!d" t	dddgd#d$dgg}|jddd}td%d&gddgdd}t|| d S )'Nr   )
percentile皙?axisA
   ?r   z
2000-01-17Z   xyr(   r)   Br   r	   r
   )Zcol1Zcol2r   zSelect only validmatchr#   r*   indexr         @r   r/   r         ?g      ?g      @g      @r   r   r	   T)Zcheck_index_typeab      @      @)numpyr   r   AssertionErrorr   Zassert_index_equalr/   columnslocr   npisnanZassert_produces_warningFutureWarningZmedianrenamer   r   assert_frame_equal)	r   datetime_framer   r   qrsZxpr   r   r   r   r   test_quantile(   s:     
$ z#TestDataFrameQuantile.test_quantilec                 C   sL   t jdddd}t|}t|}|jdd}tdgdd	d
}t|| d S )N
2016-01-01r	   
US/PacificperiodstzFnumeric_onlyz2016-01-02 00:00:00r   zdatetime64[ns, US/Pacific])r   r   )pd
date_ranger   r   r   r   r   )r   Zdtiserr   r   r   r   r   r   test_quantile_date_rangeS   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}tdddgdd}t|| d}tjt	|d |jdddd W 5 Q R X d S )Nr   r   r	   r   r6   r7   Z20130101rH   ZfoobarZbaz)r#   r*   CDr   r!   r   r0   r   r   z>'<' not supported between instances of 'Timestamp' and 'float'r+   Fr"   rK   )
r   rL   rM   r   r   r   r   pytestraises	TypeErrorr   r   r   r   msgr   r   r   test_quantile_axis_mixeda   s    z.TestDataFrameQuantile.test_quantile_axis_mixedc              	   C   s  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}t|| |jddd	}t|| |jddd	}tdddgdddgdd}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   r   r	   r
   r-   r.   r   r   r!   r   r6   r#   r*   r1   r/   r   r0   r   r:   z*No axis named -1 for object type DataFramer+   r    z.No axis named column for object type DataFramecolumn)r   r   r   r   r   rU   rV   
ValueErrorrX   r   r   r   test_quantile_axis_parameteru   s"    $z2TestDataFrameQuantile.test_quantile_axis_parameterc                 C   sB  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ddd	}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ddd	}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   Znearestr"   interpolationr1   r   int64r/   r   r   r   r   r6   r7   float64r2   lowerr3   r'   r    Zhigherr(   r)   r4   r5   cr:         ?Zmidpoint)r`   r   r/   r:   )r   r   r   r   r   r<   r   arrayr@   r=   r9   )r   r   r   r   exprB   r   r   r   test_quantile_interpolation   sR    $   $ $*z1TestDataFrameQuantile.test_quantile_interpolationc                 C   s4   |}|j dddd}|d t|d dks0td S )Nr    r   linearr_   r#   r$   )r   r<   r   r9   )r   rA   r   rB   r   r   r   $test_quantile_interpolation_datetime   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 )Nr    r#   r$   r   rl   r_   )r   r<   r   r9   r   r   )r   Z	int_framer   rB   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}|dd	g}t d
d
d
gdddggdd	gdddgd}t|| |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 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 )Nr   r   r	   r4   r5   re   rf   rg   r   r   r   rh   r!   r   r'   r    r%   r.   )r   r   r   r@   r<   nanr   r   r   r   r   r   r   test_quantile_multi   s(    *   z)TestDataFrameQuantile.test_quantile_multic                 C   sD  t tddgddgd}|d}tdgdgd	}|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 S )N20102011r      r4   r5   r   r0   r5   r.   FrJ   z2010-07-02 12:00:00r4   r1   rh   2012re   r   rT   z2011-07-02 12:00:00)	r   rL   to_datetimer   r   r   r   r   r@   rp   r   r   r   test_quantile_datetime   s@    

    z,TestDataFrameQuantile.test_quantile_datetimec              
   C   sF   d}ddddgddgfD ](}t jt|d || W 5 Q R X qd S )Nz2percentiles should all be in the interval \[0, 1\]r[   r   r   r+   )rU   rV   r]   r   )r   rA   rY   invalidr   r   r   test_quantile_invalid  s    z+TestDataFrameQuantile.test_quantile_invalidc                 C   sr  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|| 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 )Nz
2011-01-01z
2011-01-02z
2011-01-03z
US/Eastern)rI   z1 daysz2 daysz3 days)r#   r*   rR   r   FrJ   r#   r*   rR   )r   r/   rh   )r#   r4   r*   r5   rR   re   ZAaBbCcrf   )r   r   rL   Z	Timedeltar   r   r   r   r@   NaTlistr   r   resrj   r   r   r   test_quantile_box%  s    



	






&*




z'TestDataFrameQuantile.test_quantile_boxc                 C   sp  t tddtddd}tj|jd< |d}tddgdd	gdd
}t|| |ddg}t ddg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}t	|| tj|d	< |d}tdtjgdd	gdd
}t|| |ddg}t ddgtjtjgdddgd}t	|| d S )Nr   g      @ru   )r[   r   r   r6   r0   r4   r5   r1   r2   r7   g      
@r.   r!   r   r   r   )
r   r<   arangero   ilocr   r   r   r   r@   r}   r   r   r   test_quantile_nan  s*    


"z'TestDataFrameQuantile.test_quantile_nanc                 C   s  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 )Nr4   r   FrJ   r1   r.   z
2012-01-01z
2012-01-02z
2012-01-03ru   r5   rh   )	r   rL   r{   r   r   r   r   r@   r   r}   r   r   r   test_quantile_nat  s2      z'TestDataFrameQuantile.test_quantile_natc                 C   s   t ddgdd}|d}ttjtjgddgdd}t|| |dg}t tjtjggddgdgd}t|| t ddgdd}t ddgd	d}d S )
Nr4   r5   rc   r:   r   r   r1   )r:   r/   ra   datetime64[ns])r   r   r   r<   ro   r   r   r@   r}   r   r   r   test_quantile_empty_no_rows  s    
z1TestDataFrameQuantile.test_quantile_empty_no_rowsc                 C   s~   t tjddd}d|j_|d}tg g dtjd}d|j	_t
|| |dg}t g dgg d}d|j_t
|| d S )Nz1/1/18rt   rP   zcaptain tightpantsr   rb   rh   )r   rL   rM   r:   r   r   r   r<   rc   r/   r   r   r@   rp   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 }|sLt|jjdksLt|jd	d
 d|j	d< |j
d |d d ks|td S )Nr
   r	   r#   r*   rR   rf   r   rS   FrJ   c   r   )r   r   )r   r<   randomZrandnlenZ_mgrblocksr9   r   valuesr   )r   Zusing_array_managerr   rN   r   r   r   test_quantile_item_cache  s    
z.TestDataFrameQuantile.test_quantile_item_cache)__name__
__module____qualname__rU   markparametrizer   r   rL   ZarraysZSparseArrayr   rD   rO   rZ   r^   rk   rm   rn   rq   rx   rz   r   r   r   r   r   r   r   r   r   r   r      s>   

+6,{!#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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ej
d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)ejd*g g d"d*ej
jd+dd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TestQuantileExtensionDtyper$   z#raises when trying to add Intervals)reason)ZmarksrE   	   rS   )rH   freqrF   rG   ZInt64r   ZFloat64c                 C   s
   t | jS r   )strr   )r(   r   r   r   <lambda>,      z#TestQuantileExtensionDtype.<lambda>)paramsidsc                 C   s   |j }d|_|S Nr#   )paramr   )r   requestidxr   r   r   r/   !  s    z TestQuantileExtensionDtype.indexc                 C   s(   ||  }|tkrd|_ndg|_|S r   )copyr   r   r:   )r   r/   frame_or_seriesobjr   r   r   r   4  s
    zTestQuantileExtensionDtype.objc                 C   s(   t |tr||}n|j|dd}|S )NFrJ   )
isinstancer   r   )r   r   qsr   r   r   r   compute_quantile?  s    
z+TestQuantileExtensionDtype.compute_quantilec                 C   s   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[   r#   r   r/   r   )r<   r   r   intpr   shuffler   r   r   r   typer   assert_equalr   r   r/   indexerr   r   r   r   r   r   test_quantile_eaF  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
   r#   r   )	_na_valuer   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   test_quantile_ea_with_naX  s    

   z3TestQuantileExtensionDtype.test_quantile_ea_with_naz-ignore:Using .astype to convert:FutureWarningc                 C   s   |j |jd d < ||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_valuer#   r1   )r   r   Zastyper   r<   allZdtypesr9   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_nam  s    

z2TestQuantileExtensionDtype.test_quantile_ea_all_nac                 C   s   t jt|t jd}t j| |j| }d}| ||}td|d i|j	dd}t
|trr|d }||ks~tnt|| d S )Nr   r   r#   r
   )r   r   )r<   r   r   r   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   test_quantile_ea_scalar  s    

z2TestQuantileExtensionDtype.test_quantile_ea_scalarz*dtype, expected_data, expected_index, axisrc   r   ra   r4   r5   r   c                 C   sB   t ddg|d}|jd|d}t|dt|dd}t|| d S )Nr4   r5   r   r   r!   rc   r   r/   r   r   r   r   r   r   r   )r   r   expected_dataexpected_indexr"   r   r   r   r   r   r   test_empty_numeric  s       z-TestQuantileExtensionDtype.test_empty_numericz:dtype, expected_data, expected_index, axis, expected_dtyper   z	#GH 41544c           	      C   sD   t ddg|d}|jd|dd}t|dt||d}t|| d S )Nr4   r5   r   r   FrT   r   r   )	r   r   r   r   r"   Zexpected_dtyper   r   r   r   r   r   test_empty_datelike  s       z.TestQuantileExtensionDtype.test_empty_datelikez#expected_data, expected_index, axisr   c                 C   sd   t tddgddgtddgd}|ddg jd	|d
}t|d	t|tjd}t	|| d S )Nrr   rs   r   rt   rv   )r4   r5   re   r4   re   r   r!   r   )
r   rL   rw   r   r   r   r<   rc   r   r   )r   r   r   r"   r   r   r   r   r   r   test_datelike_numeric_only  s    	   z5TestQuantileExtensionDtype.test_datelike_numeric_onlyN)r   r   r   rU   Zfixturer   rL   ZIntervalIndexZfrom_breaksranger   ZxfailZperiod_rangerM   ri   r<   r   r/   r   r   r   r   filterwarningsr   r   r   ro   r   r{   r   r   r   r   r   r   r     sf   







	
	
r   )r8   r<   rU   ZpandasrL   r   r   r   r   Zpandas._testingZ_testingr   r   r   r   r   r   r   <module>   s       