o
    5c@                     @   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linearsinglenearesttablec                 C   s
   d | S )N-)joinx r   ^/var/www/html/gps/gps/lib/python3.10/site-packages/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jddddg dee	e
ggd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	g d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d0d1 Zd2d3 Zd4d5 Zejd6g d7d8d9 Zejd:d;ddd;gddgg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)dRdS Z*dTS )UTestDataFrameQuantilenon_num_colz
2014-01-01   mperiodsfreqabcc           
      C   s   |\}}t g dg dd}||d< tddgddgd	d
}|dkr(|tj}|dkr9|r9|jtjj	dd t
jtdd |jd	||d}	W d    n1 sSw   Y  t
|	| d S )N      r   r'   r      ABC       @      @r+   r,         ?indexnamer
   r   Axis name incorrectly set.reasonnumeric_onlymatchinterpolationmethod)r   r   astypenpint64node
add_markerpytestmarkxfailtmassert_produces_warningFutureWarningquantileassert_series_equal)
selfr   r   r   using_array_managerr;   r<   dfexpectedresultr   r   r   'test_numeric_only_default_false_warning   s$   z=TestDataFrameQuantile.test_numeric_only_default_false_warningzdf,expectedr&   r'   r)   )r   r&         ?      @r0   r3   )g        N      ?r.   zSparse[float]dtyperS   c                 C   s   |  }t|| d S N)rH   rE   rI   )rJ   rL   rM   rN   r   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r+t|| nt|j|j |jt	j
j|d	d
 |j|jksGJ  j ddd||d}t fdd jD  jdd}|dkrmt|| d S t|j|j |jt	j
j|d	d
 |j|jksJ d S )N皙?r   Taxisr7   r;   r<   c                    s   g | ]
}t  | d qS )
   )r>   
percentile).0colrL   r   r   
<listcomp>]   s    z7TestDataFrameQuantile.test_quantile.<locals>.<listcomp>r1   r   z%Name set incorrectly for arraymanagerr5   ?r&   c                    s   g | ]}t  j| d qS )Z   )r>   r\   loc)r]   dater_   r   r   r`   q   s    )rH   r   columnsrE   rI   assert_index_equalr2   r@   rA   rB   rC   rD   r3   )	rJ   datetime_framer   rK   r   r;   r<   rN   rM   r   r_   r   test_quantileT   sH   

z#TestDataFrameQuantile.test_quantilec                 C   sJ   |\}}t g g djddd||d}t|d r!t|d s#J d S )Nr   yrX   r   TrY   r   rj   )r   rH   r>   isnan)rJ   r   r;   r<   qr   r   r   
test_empty   s
   
$z TestDataFrameQuantile.test_emptyc           	      C   s   |\}}t g dg dd}|jdd||d}tjtdd | d}W d    n1 s1w   Y  |d	krB|d tj	}|d
krS|rS|j
tjjdd t|| d S )N)r+   r+   r,   r,   )r&   r'   r   r)   )col1col2r0   Tr7   r;   r<   zSelect only validr8   r
   r   r4   r5   )r   rH   rE   rF   rG   medianrenamer=   r>   r?   r@   rA   rB   rC   rD   rI   )	rJ   r   r   rK   r;   r<   rL   rsxpr   r   r   test_non_numeric_exclusion   s   z0TestDataFrameQuantile.test_non_numeric_exclusionc           	      C   s&  |\}}t g dg ddg dd}|jdd||d}tg dg ddd	}|d
kr1|tj}|dkrB|rB|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*   r2   r0   r&   rZ   r;   r<   rP         @rQ   r1   r
   r   r4   r5         ?rP   g      ?ry   g      @rQ   g      @r         ?T)check_index_type)r   rH   r   r=   r>   r?   r@   rA   rB   rC   rD   rE   rI   ilocassert_frame_equal	rJ   r   r   rK   r;   r<   rL   rN   rM   r   r   r   	test_axis   s,   zTestDataFrameQuantile.test_axisc           	      C   s   |\}}t g dg d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#   r)   r0   r&   TrY   r/         @r   r1   r
   r   r4   r5   )r   rH   r   r=   r>   r?   r@   rA   rB   rC   rD   rE   rI   r   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r5|r5|jtjj	dd t
|	|
 d S )N
2016-01-01r   
US/Pacificr   tzFrp   z2016-01-02 00:00:00r0   datetime64[ns, US/Pacific])r3   rU   r   r4   r5   )pd
date_ranger   r   rH   r@   rA   rB   rC   rD   rE   rI   )rJ   r   r   rK   r;   r<   dtiserrL   rN   rM   r   r   r   test_quantile_date_range   s   z.TestDataFrameQuantile.test_quantile_date_rangec           
      C   s   |\}}t g dg dtjdddg dd}|jdd	d
||d}tg ddd}|dkr2|d8 }|dkrC|rC|jtjj	dd t
|| d}	tjt|	d |jdd	dd W d    d S 1 sfw   Y  d S )Nr%   r.   r/   r   20130101r   r   )foobarbaz)r+   r,   r-   Dr0   r&   TrY   rx   rR   r
   r   r4   r5   z>'<' not supported between instances of 'Timestamp' and 'float'r8   FrZ   r7   )r   r   r   rH   r   r@   rA   rB   rC   rD   rE   rI   raises	TypeError
rJ   r   r   rK   r;   r<   rL   rN   rM   msgr   r   r   test_quantile_axis_mixed   s.   
"z.TestDataFrameQuantile.test_quantile_axis_mixedc           
      C   s  |\}}|dkr|r|j tjjdd tg dg ddg dd}|jdd	||d
}tddgddgdd}|dkrB|t	j
}t|| |jdd||d
}|dkr[|t	j
}t|| |jdd||d
}tg dg ddd}|dkr|t	j
}t|| |jdd||d
}t|| d}	tjt|	d |jdd||d
 W d    n1 sw   Y  d}	tjt|	d |jddd W d    d S 1 sw   Y  d S )Nr   r4   r5   r%   r(   r*   rv   r0   r   rw   r.   r/   r+   r,   r1   r
   r2   r&   rx   re   z*No axis named -1 for object type DataFramer8   rX   z.No axis named column for object type DataFramecolumnrZ   )r@   rA   rB   rC   rD   r   rH   r   r=   r>   r?   rE   rI   r   
ValueErrorr   r   r   r   test_quantile_axis_parameter   sD   "z2TestDataFrameQuantile.test_quantile_axis_parameterc                 C   s$  t g dg ddg dd}|jdddd}tg dg ddd	}t|| tjtg dg dgdfd
ditdi}t|g dddd}t|| t g dg ddg dd}|jdddd}tg dg ddd	}t|| tjtg dg dgdfd
ditdi}t|g d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 sJ t g dg dg dgg dd}|jd dgd!d"}t g d#g d$gd dgg dd%}t	|| d S )&Nr%   r(   r*   rv   r0   r&   r
   rZ   r;   r1   rZ   r   r?   r2   r3   rU   rS   r.   r/   r   float64rz   lowerrS   r.   r/   ri   rX   higherr   rj   r&   r&   r&   r'   r'   r'   r   r   r   r!   re   r{   midpoint)r;   rP   rP   rP   r.   r.   r.   r2   re   )r   rH   r   rE   rI   r>   r\   arrayr   r~   rk   )rJ   rL   rN   rM   exprl   r   r   r   test_quantile_interpolation  sX    "z1TestDataFrameQuantile.test_quantile_interpolationc                 C   s6   |}|j ddddd}|d t|d dksJ d S )NrX   r   Tr   )rZ   r7   r;   r+   r[   )rH   r>   r\   )rJ   rg   rL   rl   r   r   r   $test_quantile_interpolation_datetimeX  s    z:TestDataFrameQuantile.test_quantile_interpolation_datetimec                 C   sf   |}| d}|d t|d dksJ |j dddd}|d t|d dks+J t|| d S )NrX   r+   r[   r   r   r   )rH   r>   r\   rE   rI   )rJ   	int_framerL   rl   q1r   r   r   test_quantile_interpolation_int`  s   
z5TestDataFrameQuantile.test_quantile_interpolation_intc           	      C   s   |\}}t g dg dg dgg dd}|jddg||d}t g d	g d
gddgg dd}|dkr:|tj}|dkrK|rK|jtjj	dd t
|| d S )Nr   r   r   r!   r   r{   r0   r:   r   r   r   r
   r   r4   r5   r   rH   r=   r>   r?   r@   rA   rB   rC   rD   rE   r~   r   r   r   r   test_quantile_multim  s   "z)TestDataFrameQuantile.test_quantile_multic           	      C   s   |\}}t g dg dg dgg dd}|jddgd||d	}t g d
gd ddgg dd}|dkr:|tj}|dkrK|rK|jtjj	dd t
|| d S )Nr   r   r   r!   r   r{   r0   r&   rw   r   r'   )r   r&   r'   r   r
   r   r4   r5   r   r   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 )Nri   rX   ra   r   rw   rv   )r   rH   r>   nanrE   r~   )rJ   r   r;   r<   rN   rM   r   r   r   test_quantile_multi_empty  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d}t|| d S )N20102011r      r"   r#   r0   Tr7   ry   r#   r1   Fz2010-07-02 12:00:00r"   r   2012r$   r&   r   z2011-07-02 12:00:00r2   rU   r3   rv   )r   r   to_datetimerH   r   rE   rI   r   r~   r>   r   )rJ   rL   rN   rM   r   r   r   test_quantile_datetime  sF   z,TestDataFrameQuantile.test_quantile_datetimerU   )datetime64[ns]r   timedelta64[ns]z	Period[D]c                 C   sz   |\}}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d	}t|| d S )
Nr"   r#   re   rU   r0   r&   FrY   r   rv   )r   rH   r   rE   rI   r~   )rJ   rU   r   r;   r<   rL   resrM   r   r   r   test_quantile_dt64_empty  s    
z.TestDataFrameQuantile.test_quantile_dt64_emptyinvalidr   c                 C   sP   d}|\}}t jt|d |j|||d W d    d S 1 s!w   Y  d S )Nz2percentiles should all be in the interval \[0, 1\]r8   r:   )rB   r   r   rH   )rJ   r   rg   r   r   r;   r<   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g dd}t|| |j	dgd||d}ttdtdddtd
ggdgg dd}t|| d S )Nr   r4   r5   
2011-01-01
2011-01-02
2011-01-03
US/Easternr   1 days2 days3 daysr+   r,   r-   r0   Frp   r3   r2   r   )r@   rA   rB   rC   rD   r   r   r   	TimedeltarH   r   rE   rI   r~   	rJ   r   r   rK   r;   r<   rL   r   r   r   r   r   test_quantile_box  sZ   



	

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   )r+   r"   r,   r#   r-   r$   AaBbCcr   r0   Fr   r   r   )r   r   r   NaTr   listrH   r   rE   rI   r~   )rJ   rL   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r:dnd
gddgdd}t|| |j
ddg||d	}td
dg|dkr_d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rt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   r4   r5   r&   g      @r   )r   r&   r0   r:   r/   r   ry   r"   r#   r1   rz   r   g      
@rv   rw   rS   rR   r'   r
   )r&   r   )r@   rA   rB   rC   rD   r   r>   aranger   r}   rH   r   rE   rI   r~   r   r   r   r   test_quantile_nanu  sJ   
"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   r4   r5   r"   r0   Frp   r1   rv   z
2012-01-01z
2012-01-02z
2012-01-03r   r#   r   )r@   rA   rB   rC   rD   r   r   r   rH   r   rE   rI   r~   r   r   r   r   r   test_quantile_nat  sH   

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 )Nr"   r#   r   r   r0   r:   r1   )re   r2   r&   rw   r   )r   rH   r   r>   r   rE   rI   r~   rJ   r   r;   r<   rL   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 )Nr"   r#   r?   r   r0   r:   r1   )r   rH   r   r>   r   rE   rI   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 )
Nr"   r#   r   r   r0   Frp   r   z
US/Central)r   rH   r   r   r   rE   rI   dttz_localizer=   objectrU   r   r   r   r    test_quantile_empty_no_rows_dt64  s*   
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   r   zcaptain tightpantsr0   Trp   r   r   )r   r   r   re   r3   rH   r   r>   r   r2   rE   rI   r~   )rJ   r   r;   r<   rL   rN   rM   r   r   r   test_quantile_empty_no_columns  s   
z4TestDataFrameQuantile.test_quantile_empty_no_columnsc                 C   s   |\}}t tjddg dd}|d d |d< |d }|s)t|jjdks)J |jd||d	 d
|jd< |j	d |d d ksCJ d S )Nr)   r   r   r   r+   r'   r   Frp   c   r   )r   r   )
r   r>   randomrandnlen_mgrblocksrH   valuesr}   )rJ   rK   r   r;   r<   rL   r   r   r   r   test_quantile_item_cache"  s   
z.TestDataFrameQuantile.test_quantile_item_cachec                 C   sJ   t jtdd ttdjddd W d    d S 1 sw   Y  d S )NzInvalid method: foor8   r&   r0   r   )r<   rB   r   r   r   rangerH   rJ   r   r   r   test_invalid_method0  s   "z)TestDataFrameQuantile.test_invalid_methodc                 C   sL   t jtdd ttdjdddd W d    d S 1 sw   Y  d S )NzInvalid interpolation: foor8   r&   r0   r   r   )r<   r;   r   r   r   r   r    test_table_invalid_interpolation4  s   "z6TestDataFrameQuantile.test_table_invalid_interpolationN)+__name__
__module____qualname__rB   rC   parametrizer   r   r   r   r   rO   arraysSparseArrayrW   rh   rm   ru   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   r   r   r      sr    


-*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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+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	d0d$gg g d(ggd1d2 Zd3S )4TestQuantileExtensionDtyper[   z#raises when trying to add Intervalsr5   )marksr   	   r   r   r   r   z1 Dayr   Int64rT   Float64c                 C   s
   t | jS rV   )strrU   r   r   r   r   r   I  r   z#TestQuantileExtensionDtype.<lambda>r   c                 C   s   |j }d|_|S Nr+   )r   r3   )rJ   r   idxr   r   r   r2   =  s   z TestQuantileExtensionDtype.indexc                 C   s*   ||  }|tu rd|_|S dg|_|S r   )copyr   r3   re   )rJ   r2   frame_or_seriesobjr   r   r   r  Q  s   zTestQuantileExtensionDtype.objc                 C   s*   t |tr||}|S |j|dd}|S )NFr   )
isinstancer   rH   )rJ   r  qsrN   r   r   r   compute_quantile\  s
   

z+TestQuantileExtensionDtype.compute_quantilec                 C   s   t jt|t jd}t j| |j| }g d}| ||}tr6|j	dkr6d}t
jj|td}|j| |j	}	|j	dkr@d}	t|d |d	 |d
 g|	|dd}
t||
}
t||
 d S )NrT   r0   r   r&   r   Cfailed on Numpy 1.20.3; TypeError: data type 'Int64' not understoodr6   r   r   r   r)   r   r   r+   rU   r2   r3   )r>   r   r   intpr   shuffler}   r  r   rU   rB   rC   rD   r   r@   rA   r   typerE   assert_equalrJ   r   r  r2   indexerr  rN   r   rC   	exp_dtyperM   r   r   r   test_quantile_eac  s"   

z+TestQuantileExtensionDtype.test_quantile_eac                 C   s   |j |jd< |j |jd< tjt|tjd}tj| |j| }g d}| ||}t	|d |d |d g|j
|dd	}t||}t|| d S )
Nr   r   rT   r  r)   r&   r+   r	  )	_na_valuer}   r>   r   r   r
  r   r  r  r   rU   r  rE   r  )rJ   r  r2   r  r  rN   rM   r   r   r   test_quantile_ea_with_na  s   
z3TestQuantileExtensionDtype.test_quantile_ea_with_naz-ignore:Using .astype to convert:FutureWarningc           
      C   s   |j |jd d < ||j}t|j|jksJ tjt|tj	d}tj
| |j| }g d}| ||}trO|jdkrOd}tjj|td}|j| |jg dd|j d}	t|	|d	d
}	|	jdkrk|	d}	t||	}	t||	 d S )NrT   r  r   r  r  )r   r   r   T)
allow_fill
fill_valuer+   r1   r   r   )r  r}   r=   rU   r>   alldtypesr   r   r
  r   r  r  r   rB   rC   rD   r   r@   rA   taker   r  rE   r  )
rJ   r   r  r2   r  r  rN   r   rC   rM   r   r   r   test_quantile_ea_all_na  s$   


z2TestQuantileExtensionDtype.test_quantile_ea_all_nac                 C   s   t jt|t jd}t j| |j| }d}| ||}tr4|j	dkr4d}t
jj|td}|j| |j	}	|j	dkr>d}	td|d	 i|	dd
}
t|trZ|
d }
||
ksXJ d S t||
 d S )NrT   r0   r   r  r  r   r   r+   r)   )rU   r3   )r>   r   r   r
  r   r  r}   r  r   rU   rB   rC   rD   r   r@   rA   r   r  rE   rI   r  r   r   r   test_quantile_ea_scalar  s"   


z2TestQuantileExtensionDtype.test_quantile_ea_scalarz*dtype, expected_data, expected_index, axisr   r&   r?   r"   r#   r   c                 C   sB   t ddg|d}|jd|d}t|dt|dd}t|| d S )Nr"   r#   r   r0   r   r   r3   r2   rU   r   rH   r   r   rE   rI   )rJ   rU   expected_dataexpected_indexrZ   rL   rN   rM   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 )Nr"   r#   r   r0   Fr   r  r  )	rJ   rU   r  r  rZ   expected_dtyperL   rN   rM   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   r!   r"   r$   r0   Tr   r  )
r   r   r   rH   r   r   r>   r   rE   rI   )rJ   r  r  rZ   rL   rN   rM   r   r   r   test_datelike_numeric_only  s   	z5TestQuantileExtensionDtype.test_datelike_numeric_onlyN) r   r   r   rB   fixturer   r   IntervalIndexfrom_breaksr   rC   rD   period_ranger   timedelta_ranger   r>   r   r2   r  r  r  r  filterwarningsr  r  r   r   r   r   r"  r#  r   r   r   r   r   9  s\    







		
r   )numpyr>   rB   pandas.compat.numpyr   r   pandasr   r   r   r   r   pandas._testing_testingrE   r$  r   r   r   r   r   r   r   <module>   s$    
      $