U
    sVc?X                     @   sb  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mZ d dlmZ d dlmZ d dlm  m  mZ dd Z ej!"de#ej$g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j0j,d e/ej0j-gdde
.e/ej0j,d fd e/ej0j-fgfe1dde1d de1ddge$e1e/ej0j- de1d de1e/ej0j-dge
.e1e/ej0j- de1d dfe1d de1e/ej0j-dfgfgdd  Z2d!d" Z3ej!"d#g d$d%fdd$dgd&d'fgd(d) Z4ej!"d*d$e5d$ee5d$gej!"d+eegd,d- Z6ej!"d.d dd$dd/ej7gej7 d dd$dd/gej7 d dd$dd/ej7ggd0d1 Z8d2d3 Z9ej!"d4d5d6d7d&d8dgd9fd:d d7d&d8d;gd<fgd=d> Z:d?d@ Z;dAdB Z<ej!"dCdd:gdDdE Z=dFdG Z>dHdI Z?ej!"dJdKdL dMdL fdNdL dOdL fgdPdQ Z@dRdS ZAej!"dTeBdUeBdUdV gdWdX ZCej!"dYdZd[d\d]gd^d_ ZDd`da ZEdbdc ZFej!"dddedfidfi dgfdedhidgfdediidjfgdkdl ZGej!"d.dmdndogej!"dpdd$gdqdr ZHej!"dsdtdudvgdwdx ZIej!"dydzdL d{dL d|dL d}dL gd~d ZJej!"d.eedddgeKdeKdeKdge$eKdeKdeKdgedddggdd ZLej!"ddededededggej!"de#e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e#ejTfgdd ZUej!"dCdidd5gdd ZVej!"ddd ddggej!"d9d5d:gej!"dd5d:gdd ZWej!"ddddgddddgdddgd dd gddgfdddgd d$d/ddg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$d/ddgdd dd$gd dd$gdd dd$gfgdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dS )    N)Categorical	DataFrameDatetimeIndexIndexIntervalIntervalIndexSeriesTimedeltaIndex	Timestampcut
date_rangeinterval_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dtype   Flabels   )Zcheck_dtype)npZonesr   arraytmassert_numpy_array_equal)dataresultexpected r"   A/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/reshape/test_cut.pytest_simple   s    r$   funcc              	   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 )N皙?ffffff?      @@ffffff#@ @   Tretbinsr   r      orderedMb?g>wa
@g!""@)r   r   from_breaksroundtaker   r   assert_categorical_equalassert_almost_equalr   r   )r%   r   r    bins	intervalsr!   r"   r"   r#   	test_bins$   s    r:   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,   r0   r   r/   r2   @L@)r   r   r   r   r3   r4   r   r5   r   r6   r7   r   r    r8   r9   r!   r"   r"   r#   
test_right1   s    rA   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   r0   r>   r?   g%Ck#@)r   r   r   r   r3   r4   r5   r   r   r6   r7   r@   r"   r"   r#   test_no_right=   s    rE   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
categoriesr1      )
r   rangerI   r   r6   r   
from_codesr   appendcodes)cr!   r    r"   r"   r#   test_bins_from_interval_indexI   s      rP   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   rF   )r   rZ   )rZ   r[   )r[   r\      2   r   r/   Zint8r   )
r   r   r   r   from_tuplesr   assert_index_equalrI   r   rN   )ZagesrO   r!   r    r"   r"   r#   )test_bins_from_interval_index_doc_exampleV   s    ra   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   rQ   )r/   rT   )r      matchr   rJ   rF   )r   r_   pytestraises
ValueErrorr   )msgiir"   r"   r#   -test_bins_not_overlapping_from_interval_indexb   s    rj   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+   rc   皙?      ?r   rQ   re   rf   rg   r   rh   r   r"   r"   r#   test_bins_not_monotonick   s    ro   zx, bins, expectedz
2017-12-31r,   periodsz
2018-01-01rG   r   r   r   nsc                 C   s   t | |}t|j| d S N)r   r   r`   rI   )xr8   r!   r    r"   r"   r#   #test_bins_monotonic_not_overflowings   s    4
ru   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+   rc   r   r   rQ   foobarZbazr   rm   rn   r"   r"   r#   test_wrong_num_labels   s    rx   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 )Nrc   rm   )rt   r8   rh   r"   r"   r#   test_cut_corner   s    rz   argcut_funcc              	   C   s,   d}t jt|d || d W 5 Q R X d S )Nz!Input array must be 1 dimensionalrc   r/   )re   rf   rg   )r{   r|   rh   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 infinityrc   r,   rF   rm   )r   rh   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 )	Nrt   r   rG   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,closedTMbPg      ?      ?r=   Fgjt?rB   c                 C   sJ   t t dddd}t|dd| d\}}tj||d}t|j| d S )Nr   g)\(?rk   r   T)r.   r=   rC   )	r   tilearanger   r   r3   r   r`   rI   )r=   ZbreaksrD   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 )Nrv   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   r3   r   r`   rI   )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   r7   )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 )NrJ   r   r   r/   r   r   r   )r   r   r   infr   r   r3   r   r`   rI   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   rG   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 rs   r"   r   r"   r"   r#   <lambda>*      r   c                 C   s"   t dgddg  ddg | ddS )NMediumr   SmallLargeTrH   )r   r   r"   r"   r#   r   +  s   c                 C   s   t dddg| S )Nr   r   r/   r   rL   r   r"   r"   r#   r   2  r   c                 C   s    t dgddg  ddg | S )Nr   r   r   r/   r   r   r"   r"   r#   r   3  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   rV   r^   r   r   rQ   rR   r]      r\   r   r   r   r   )r   r   r6   )Z
get_labelsZget_expectedr8   r   r   r    r"   r"   r#   test_cut_pass_labels&  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   rQ   rR   r]   r   r\   ZGoodr   ZBadr,   r   TrH   )r   r   r   r6   )r   r   r    r   r"   r"   r#   test_cut_pass_labels_compat@  s
    
r   rt   g      &@g    _Bc                 C   s   t | d d S )Nr/   r   )rt   r"   r"   r#   test_round_frac_just_worksJ  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_fracP  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   rJ         )numgMb?r=   rC   Tr0   )r   r   r   Zlinspacer4   r   r3   r5   astypeCDTr   r   )r   r    Zexp_binsr!   r"   r"   r#   test_cut_return_intervals_  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~jthrl   r,   r=   rC   r0   )r   r   r   r   r   r3   repeatr   r   r   r   )r   r    r8   r!   r"   r"   r#   test_series_ret_binsn  s    r   z
kwargs,msg
duplicatesdropzBin edges must be uniqueraiserv   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   rJ   rQ   r   r,   r   r   	   abrO   deindexrc   )r   r   r   re   rf   rg   r   pduniquer   r   )kwargsrh   r8   valuesr    r!   r"   r"   r#   test_cut_duplicates_biny  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   rQ   )r   r   flagsZ	writeabler   r6   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 rs   )r
   vr"   r"   r#   r     r   c                 C   s   t | S rs   )r   r   r"   r"   r#   r     r   c                 C   s
   t | S rs   )r   
datetime64r   r"   r"   r#   r     r   c                 C   s   t |  S rs   )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/   Tr0   c                    s   g | ]} |qS r"   r"   ).0r   r   r"   r#   
<listcomp>  s     z%test_datetime_bin.<locals>.<listcomp>rF   )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:00r0   )	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,   rq   tzr   )r   r   r   r   Tr0   )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 dtyperc   r   r,   rp   r   r/   r   rF   )re   rf   rg   r   r   rh   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   rp   r   r/   rF   FT)r   r   rI   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_roundtrip0  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,   rp   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_roundtrip@  s    
r   rJ   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   rQ   FTr   )r   r   )r8   r   compareZdata_expectedZdata_resultr!   r    r"   r"   r#   test_cut_bool_coercion_to_intN  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 argumentrc   r   r   )rK   re   rf   rg   r   )r   r   rh   r"   r"   r#   test_cut_incorrect_labels`  s    r   r   rR   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   rQ   r^   )sizer/   ZInt64r   )r=   r   )r   r   randintr   floatr   r   r   r   r   r6   )r8   r=   r   r   r    r!   r"   r"   r#   test_cut_nullable_integeri  s       r   z3data, bins, labels, expected_codes, expected_labels      rb      rZ   r]   ABr   c                 C   s0   t | ||dd}tj||dd}t|| d S NFr8   r   r1   rH   r   r   rL   r   r6   r   r8   r   Zexpected_codesZexpected_labelsr    r!   r"   r"   r#   test_cut_non_unique_labelsv  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'rc   ry   r,   r   r   r/   F)r8   r1   rm   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   rJ   r   r   rO   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>rQ   Fi   )r=   r   group)	r   r   r   r   rK   r   Zassert_produces_warningr   r   )Zdfr   r"   r"   r#   test_cut_no_warnings  s    r  c                  C   s   t tddddgd tddddtddddg dddddgd	d
j } t dddddgdddddgd}t|dddgdd}t||  d S )Nr   r/   r=   rC   r,   r   r   r   r   )r   r   r   T)r8   r   )r   r   catZ
as_orderedr   r   r   )r!   r   r    r"   r"   r#   .test_cut_with_duplicated_index_lowest_included  s     r  c                  C   s  t tdd} t| d d}t| d d}t||d}tjt	dddd	t	dd
dd	t	d
ddd	t	dddd	t	dddd	t	dddd	t	dddd	t	dddd	t	dddd	t	dddd	g
dd}tdgd t
jgd  t
jgd dgd  d|d}t|| d S )Nr   r   rQ   r   )12gMbXg#@r=   rC   g3@g33333=@gC@g     H@g33333M@g33333SQ@gS@gfffffFV@c   Tr0   r   )r   rK   r   Zvalue_countsheadtailr   r   ZCategoricalIndexr   r   r   r   Zassert_frame_equal)r   Zser1Zser2r    r   r!   r"   r"   r#   *test_cut_with_nonexact_categorical_indices  s.    , r
  c                  C   s^   t dft dft dfg} tdddgddd	d
g| d}tjdddg| dd}t|| d S )NrQ   r]   r   r/   r   rJ   r   r,   r   r   )r8   r   r   Tr0   )r
   r   r   rL   r   r6   )r   r    r!   r"   r"   r#   $test_cut_with_timestamp_tuple_labels  s    r  c                  C   sP   t tdtddd} tttdg| d}tjdg| dd	}t|j| d S )
Nz
2022-02-25z
2022-02-27Z1D)freqz
2022-02-26rF   r   Tr0   )	r   r
   r   r   r   rL   r   r6   r   )r8   r    r!   r"   r"   r#   $test_cut_bins_datetime_intervalindex  s    r  )aZnumpyr   re   Zpandasr   r   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$   markZparametrizelistr   r:   rA   rE   rP   ra   rj   ro   minmaxr_   Ziinfor   Ztimedelta64ru   rx   rz   Zeyer}   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   r6   Zassert_equalr   r   r   r   r   r   r   r  r  r
  r  r  r"   r"   r"   r#   <module>   s  H
	
 "





2

"


		
	
 
	



	
	 
	



	

*0
	,2
	
	