U
    f/eP                     @   s2  d dl Zd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlm  m  m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edddej*edej+ge
,ej*edfedej+fgfdd dgej-e.ej/j*d e.ej/j+gdde
,e.ej/j*d fd e.ej/j+fgfe0dde0d de0ddge-e0e.ej/j+ de0d de0e.ej/j+dge
,e0e.ej/j+ de0d dfe0d de0e.ej/j+dfgfgd d! Z1d"d# Z2ej()d$g d%d&fdd%dgd'd(fgd)d* Z3ej()d+d%e4d%ee4d%gej()d,eegd-d. Z5ej()d/d dd%dd0ej6gej6 d dd%dd0gej6 d dd%dd0ej6ggd1d2 Z7d3d4 Z8ej()d5d6d7d8d'd9dgd:fd;d d8d'd9d<gd=fgd>d? Z9d@dA Z:dBdC Z;ej()dDdd;gdEdF Z<dGdH Z=dIdJ Z>ej()dKdLdM dNdM fdOdM dPdM fgdQdR Z?dSdT Z@ej()dUeAdVeAdVdW gdXdY ZBej()dZd[d\d]d^gd_d` ZCdadb ZDdcdd ZEej()dedfdgidfi dhfdfdiidhfdfdjidkfgdldm ZFej()d/dndodpgej()dqdd%gdrds ZGej()dtdudvdwgdxdy ZHej()dzd{dM d|dM d}dM d~dM gdd ZIej()d/eedddgeJdeJdeJdge-eJdeJdeJdgedddggdd ZKej()ddededededggej()deLej-eegdd ZMdd ZNdd ZOej()ddddgdd ZPdd ZQej()dddgej()deejRfej-ejSfeLejTfgdd ZUej()dDdjdd6gdd ZVej()ddd ddggej()d:d6d;gej()dd6d;gdd ZWej()ddddgddddgdddgd dd gddgfdddgd d%d0ddgd%d dd%gd%d dgd dd%gfgdd ZXej()ddddgddddgdddgd dd%gdddgfdddgd d%d0ddgdd dd%gd dd%gdd dd%gfgdd ZYdd ZZdd Z[dd Z\dS )    N)Categorical	DataFrameDatetimeIndexIndexIntervalIntervalIndexSeriesTimedeltaIndex	Timestampcut
date_rangeisnaqcuttimedelta_rangeto_datetime)CategoricalDtypec                  C   sD   t jddd} t| ddd}t dddddg}tj||dd d S )	N   int64Zdtype   Flabels   )Zcheck_dtype)npZonesr   arraytmassert_numpy_array_equal)dataresultexpected r    A/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/reshape/test_cut.pytest_simple   s    r"   c               	   C   s   t ddddddg} t| ddd	\}}t|d}|d
d
d
ddd
g}t|dd}t	|| t
|t ddddg d S N皙?ffffff?      @@ffffff#@ @   Tretbinsr   r      orderedMb?g>wa
@g!""@r   r   r   r   from_breaksroundtaker   r   assert_categorical_equalassert_almost_equalr   r   binsZ	intervalsr   r    r    r!   	test_bins#   s    r9   c               
   C   s   t dddddddg} t| dd	d	d
\}}t|d}t|d	d}|dddddddg}t	|| t
|t dddddg d S )Nr$   r%   r&   r'   r(   r)   皙@r   Trightr,   r*   r.   r   r-   r0   @L@)r   r   r   r   r2   r3   r   r4   r   r5   r6   r7   r    r    r!   
test_right/   s    r?   c               
   C   s   t dddddddg} t| dd	d
d\}}tj|ddd}|dddddddg}t|d
d}t	|| t
|t dddddg d S )Nr$   r%   r&   r'   r(   r)   r:   r   FTr;   r*   leftclosedr   r-   r   r.   r=   r>   g%Ck#@r1   r7   r    r    r!   test_no_right;   s    rC   c               	   C   s~   ddddddg} t | ddd	\}}t|d}|d
d
d
ddd
g}t|dd}t|| t|t	
ddddg d S r#   )r   r   r2   r3   r4   r   r   r5   r6   r   r   r7   r    r    r!   test_array_likeG   s    rD   c                  C   sn   t tdd} | }t td|jd}t|| tjt| j	d| jdd}t td|jd}t|| d S )Nr   r*   r8   T
categoriesr/      )
r   rangerH   r   r5   r   
from_codesr   appendcodes)cr   r   r    r    r!   test_bins_from_interval_indexS   s      rO   c                  C   s   t ddddddddd	g	} t| d
dddgd}tdddg}t|j| tdddg|jd}t|j| t|j	t jdddgdd d S )N
                     ;   <   r      #   F   rE   )r   rY   )rY   rZ   )rZ   r[      2   r   r-   Zint8r   )
r   r   r   r   from_tuplesr   assert_index_equalrH   r   rM   )ZagesrN   r   r   r    r    r!   )test_bins_from_interval_index_doc_example`   s    r`   c               	   C   sB   d} t dddg}tjt| d tddg|d W 5 Q R X d S )	Nz)Overlapping IntervalIndex is not accepted)r   rP   )r-   rS   )r      matchr   rI   rE   )r   r^   pytestraises
ValueErrorr   )msgiir    r    r!   -test_bins_not_overlapping_from_interval_indexl   s    ri   c               	   C   sD   d} ddddddg}t jt| d t|d	d
ddg W 5 Q R X d S )Nz bins must increase monotonicallyr$   r%   r&   r'   r(   r)   rb   皙?      ?r   rP   rd   re   rf   r   rg   r   r    r    r!   test_bins_not_monotonicu   s    rn   zx, bins, expectedz
2017-12-31r*   periodsz
2018-01-01rF   r   r   r   nsc                 C   s   t | |}t|j| d S N)r   r   r_   rH   )xr8   r   r   r    r    r!   #test_bins_monotonic_not_overflowing}   s    4
rt   c               	   C   sL   d} ddddddg}t jt| d  t|d	d
dgdddgd W 5 Q R X d S )Nz9Bin labels must be one fewer than the number of bin edgesr$   r%   r&   r'   r(   r)   rb   r   r   rP   foobarZbazr   rl   rm   r    r    r!   test_wrong_num_labels   s    rw   z
x,bins,msgr-   zCannot cut empty array      ?z#`bins` should be a positive integerc              	   C   s(   t jt|d t| | W 5 Q R X d S )Nrb   rl   )rs   r8   rg   r    r    r!   test_cut_corner   s    ry   argcut_funcc              	   C   s,   d}t jt|d || d W 5 Q R X d S )Nz!Input array must be 1 dimensionalrb   r-   )rd   re   rf   )rz   r{   rg   r    r    r!   test_cut_not_1d_arg   s    r|   r   r   c              	   C   s.   d}t jt|d t| dd W 5 Q R X d S )Nz?cannot specify integer `bins` when input data contains infinityrb   r*   rE   rl   )r   rg   r    r    r!   test_int_bins_with_inf   s    
r}   c                  C   sZ   d} t dddddg| d}t|ddgdd}t tjtjtjdtjg| d}t|| d S )	Nrs   r   rF   r   nameFr   )r   r   r   nanr   assert_series_equal)r   serindexpr    r    r!   test_cut_out_of_range_more   s
    r   zright,breaks,closedTgMbPg      ?      ?r<   Fgjt?r@   c                 C   sJ   t t dddd}t|dd| d\}}tj||d}t|j| d S )Nr   g)\(?rj   r   T)r,   r<   rA   )	r   tilearanger   r   r2   r   r_   rH   )r<   ZbreaksrB   arrr   r8   	ex_levelsr    r    r!   test_labels   s    r   c                  C   s4   d} t tjd| d}t|d}|j| ks0td S )Nru   d   r   r   )r   r   randomrandnr   r   AssertionError)r   r   Zfactorr    r    r!   #test_cut_pass_series_name_to_factor   s    
r   c                  C   sB   t ddd} t| ddd}tddd	d
dg}t|j| d S )Nr   g\(\?{Gz?r   r-   	precisiong9̗Gg
ףp=
?g
ףp=
?gHzG?g
ףp=
?)r   r   r   r   r2   r   r_   rH   )r   r   r   r    r    r!   test_label_precision  s    r   r   c                 C   sZ   t ddd}t j|d d d< t|d| d}t |}t t|t j|}t|| d S )Nr   r   r   r*   r   r   )	r   r   r   r   Zasarraywherer   r   r6   )r   r   r   r   r    r    r!   test_na_handling
  s    
r   c                  C   s   t d} t| dd}t j ddt jg}t| |}t||}t|}t|j	| |d t
dt jkslt|d t
t j dkst|d t
dt jkst|d t
t j dkstd S )NrI   r   r   r-   r   r   r   )r   r   r   infr   r   r2   r   r_   rH   r   r   )r   Zdata_serr8   r   Z
result_serZ
ex_uniquesr    r    r!   test_inf_handling  s    



r   c                  C   sD   t jd} t| dddg}t|}| dk | dkB }t|| d S )Nr   rF   r   r   )r   r   r   r   r   r   r   )r   r   maskZex_maskr    r    r!   test_cut_out_of_bounds'  s
    r   zget_labels,get_expectedc                 C   s   | S rr   r    r   r    r    r!   <lambda>4      r   c                 C   s"   t dgddg  ddg | ddS )NMediumr   SmallLargeTrG   )r   r   r    r    r!   r   5  s   c                 C   s   t dddg| S )Nr   r   r-   r   rK   r   r    r    r!   r   <  r   c                 C   s    t dgddg  ddg | S )Nr   r   r   r-   r   r   r    r    r!   r   =  r   c                 C   sN   ddddg}dddddd	d
g}dddg}t ||| |d}t||| d S )Nr   rU   r]   r   r   rP   rQ   r\      r[   r   r   r   r   )r   r   r5   )Z
get_labelsZget_expectedr8   r   r   r   r    r    r!   test_cut_pass_labels0  s
    
r   c                  C   sR   dddddddg} dd	d
g}t | d|d}t | dt||ddd}t|| d S )Nr]   r   rP   rQ   r\   r   r[   ZGoodr   ZBadr*   r   TrG   )r   r   r   r5   )r   r   r   r   r    r    r!   test_cut_pass_labels_compatJ  s
    
r   rs   g      &@g    _Bc                 C   s   t | d d S )Nr-   r   )rs   r    r    r!   test_round_frac_just_worksT  s    r   zval,precision,expected)g#]r*   i)眢#]@r*   v   )r   r-   r   )gݔ	~. ?r-   giUMu?c                 C   s   t j| |d}||kstd S )Nr   )tmodZ_round_fracr   )valr   r   r   r    r    r!   test_round_fracZ  s    r   c                  C   s   t ddddddddd	g	} t| d}tjdd	dd
d}|d  d8  < t tj|dddddddddddg	t	dd}t
|| d S )Nr   r   r-   r*   r   r   rI         )numgMb?r<   rA   Tr.   )r   r   r   Zlinspacer3   r   r2   r4   astypeCDTr   r   )r   r   Zexp_binsr   r    r    r!   test_cut_return_intervalsi  s    
r   c                  C   sZ   t td} t| ddd\}}t tjdddgdd	dtdd
}t	
|| d S )Nr   r-   Tr+   g~jthrk   r*   r<   rA   r.   )r   r   r   r   r   r2   repeatr   r   r   r   )r   r   r8   r   r    r    r!   test_series_ret_binsx  s    r   z
kwargs,msg
duplicatesdropzBin edges must be uniqueraiseru   z(invalid value for 'duplicates' parameterc              	   C   s   ddddddg}t tdddd	d
gdddddgd}|d k	rhtjt|d t||f|  W 5 Q R X n*t||f| }t|t|}t	
|| d S )Nr   r-   r   rI   rP   r   r*   r   r   	   abrN   de)indexrb   )r   r   r   rd   re   rf   r   pduniquer   r   )kwargsrg   r8   valuesr   r   r    r    r!   test_cut_duplicates_bin  s    &r   g      "@g      "g        lengthc                 C   s@   t | g| }t|ddd}t dg| tjd}t|| d S )Nr   Fr   r   r   )r   r   r   Zintpr   r   )r   r   r   r   r   r    r    r!   test_single_bin  s    r   z#array_1_writeable,array_2_writeable)TT)TF)FFc                 C   sR   t ddd}| |j_t ddd}||j_t d}tt||t|| d S )Nr   r   rP   )r   r   flagsZ	writeabler   r5   r   )Zarray_1_writeableZarray_2_writeableZarray_1Zarray_2Zhundred_elementsr    r    r!   test_cut_read_only  s    
 r   convc                 C   s   t | S rr   )r
   vr    r    r!   r     r   c                 C   s   t | S rr   )r   r   r    r    r!   r     r   c                 C   s
   t | S rr   )r   
datetime64r   r    r    r!   r     r   c                 C   s   t |  S rr   )r
   Zto_pydatetimer   r    r    r!   r     r   c                    s   t dt dg}dddg}tttt|d t|d tt|d t|d gtd	d
} fdd|D }tt||d}t	
|| d S )Nz
2012-12-13z
2012-12-15z
2012-12-12z
2012-12-14z
2012-12-16r   r   r-   Tr.   c                    s   g | ]} |qS r    r    ).0r   r   r    r!   
<listcomp>  s     z%test_datetime_bin.<locals>.<listcomp>rE   )r   r   r   r   r   r
   r   r   r   r   r   )r   r   Zbin_datar   r8   r   r    r   r!   test_datetime_bin  s    

	r   z
2013-01-01z
2013-01-02z
2013-01-03c                 C   sn   t | ddd\}}ttttdtdttdtdttdtdgtdd}tt|| d S )	Nr*   Tr+   2012-12-31 23:57:07.2000002013-01-01 16:00:002013-01-02 08:00:002013-01-03 00:00:00r.   )	r   r   r   r   r
   r   r   r   r   )r   r   _r   r    r    r!   test_datetime_cut  s*      r   r8   z2013-01-01 04:57:07.200000z2013-01-01 21:00:00z2013-01-02 13:00:00z2013-01-03 05:00:00boxc              
   C   s   d}t tdd|d}t| ts(|| } t|| }t tttd|dtd|dttd|dtd|dttd|dtd	|dgt	d
d}t
|| d S )Nz
US/Eastern20130101r*   rp   tzr   )r   r   r   r   Tr.   )r   r   
isinstanceintr   r   r   r
   r   r   r   r   )r8   r   r   sr   r   r    r    r!   test_datetime_tz_cut  s2    







r   c               	   C   s<   d} t jt| d  ttddddddgd	 W 5 Q R X d S )
Nz bins must be of datetime64 dtyperb   r   r*   ro   r   r-   r   rE   )rd   re   rf   r   r   rg   r    r    r!   test_datetime_nan_error'  s    r   c               
   C   sb   t tdddtdddd} | j }t|tdg |  }t|tdddddg d S )	NZ20130102r   ro   r   r-   rE   FT)r   r   rH   r   r   r   r   r   )r   r   r    r    r!   test_datetime_nan_mask.  s    
 

r   r   UTCz
US/Pacificc                 C   sb   t tdd| d}t|ddd\}}t||}t|| tddd	g}|| }t|| d S )
NZ20180101r*   r   r-   Tr+   z2017-12-31 23:57:07.200000z2018-01-02 00:00:00z2018-01-03 00:00:00)r   r   r   r   r   r   Ztz_localizer_   )r   r   r   result_binsr   expected_binsr    r    r!   test_datetime_cut_roundtrip:  s    

r   c                  C   sV   t tddd} t| ddd\}}t| |}t|| tddd	g}t|| d S )
NZ1dayr*   ro   r-   Tr+   z0 days 23:57:07.200000z2 days 00:00:00z3 days 00:00:00)r   r   r   r   r   r	   r_   )r   r   r   r   r   r    r    r!   test_timedelta_cut_roundtripJ  s    
r   rI   r   zbox, comparec                 C   sV   |dddddgd }|dddddgd }t || dd}t || dd}||| d S )Nr   r   rP   FTr   )r   r   )r8   r   compareZdata_expectedZdata_resultr   r   r    r    r!   test_cut_bool_coercion_to_intX  s
    r   c              	   C   s8   t d}d}tjt|d t|d| d W 5 Q R X d S )Nr   zJBin labels must either be False, None or passed in as a list-like argumentrb   r   r   )rJ   rd   re   rf   r   )r   r   rg   r    r    r!   test_cut_incorrect_labelsj  s    r   r   rQ   include_lowestc                 C   sb   t jjddddt}t j|d d d< ttj|dd| ||d}t|| ||d}t	
|| d S )	Nr   rP   r]   )sizer-   ZInt64r   )r<   r   )r   r   randintr   floatr   r   r   r   r   r5   )r8   r<   r   r   r   r   r    r    r!   test_cut_nullable_integers  s       r   z3data, bins, labels, expected_codes, expected_labels      ra      rY   r\   ABr   c                 C   s0   t | ||dd}tj||dd}t|| d S NFr8   r   r/   rG   r   r   rK   r   r5   r   r8   r   Zexpected_codesZexpected_labelsr   r   r    r    r!   test_cut_non_unique_labels  s    	  r   Cc                 C   s0   t | ||dd}tj||dd}t|| d S r   r   r   r    r    r!   test_cut_unordered_labels  s    	  r   c               	   C   s:   d} t jt| d tddgdddgdd	 W 5 Q R X d S )
Nz.'labels' must be provided if 'ordered = False'rb   rx   r*   r   r   r-   F)r8   r/   rl   r   r    r    r!   3test_cut_unordered_with_missing_labels_raises_error  s    r   c                  C   sf   t dddddg} t ddddg}t dd	d
g}t| ||dd}t ddd	d	d
gdd}t|| d S )Nr   r-   r*   r   r   r   rI   r   r   rN   Fr   categoryr   )r   r   r   r   )r   r8   r   r   r   r    r    r!   %test_cut_unordered_with_series_labels  s    r   c               	   C   sf   t dtjdddi} dd tdddD }td$ t| jtdd	dd|d
| d< W 5 Q R X d S )Nvaluer   r   r\   c                 S   s   g | ]}| d |d  qS )z - r   r    )r   ir    r    r!   r     s     z(test_cut_no_warnings.<locals>.<listcomp>rP   Fi   )r<   r   group)	r   r   r   r   rJ   r   Zassert_produces_warningr   r   )Zdfr   r    r    r!   test_cut_no_warnings  s    r   )]Znumpyr   rd   Zpandasr   r   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.api.typesr   r   Zpandas.core.reshape.tilecoreZreshaper   r   r"   r9   r?   rC   rD   rO   r`   ri   rn   markZparametrizeminmaxr^   r   Ziinfor   Ztimedelta64rt   rw   ry   Zeyer|   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   listr   r   r   r   r   r   r5   Zassert_equalr   r   r   r   r   r   r   r   r    r    r    r!   <module>   s  D	
 "





2

"


		
	
 
	



	
	 
	



	

*0
	,2
	
