U
    +ifwV                     @   sV  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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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d/ej6gej6 d dd$dd/gej6 d dd$dd/ej6ggd0d1 Z7d2d3 Z8ej !d4d5d6d7d&d8dgd9fd:d d7d&d8d;gd<fgd=d> Z9d?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 Z@ej !dTeAdUeAdUdV gdWdX ZBej !dYdZd[d\d]gd^d_ ZCd`da ZDdbdc ZEej !dddedfidfi dgfdedhidgfdediidjfgdkdl ZFej !d.dmdndogej !dpdd$gdqdr ZGej !dsdtdudvgdwdx ZHej !dydzdL d{dL d|dL d}dL 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 !de"ej#eegdd ZLdd ZMdd ZNej !ddddgdd ZOdd ZPej !dddgej !deejQfej#ejRfe"ejSfgdd ZTej !dCdidd5gdd ZUej !ddd ddggej !d9d5d:gej !dd5d:gdd ZVe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 ZWe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 ZXdd ZYdd ZZdd Z[dd Z\dd 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dtype   Flabels   )Zcheck_dtype)npZonesr   arraytmassert_numpy_array_equal)dataresultexpected r!   P/home/mars/bis/venv/lib/python3.8/site-packages/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    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.   r1   @L@)r   r   r   r   r2   r3   r   r4   r   r5   r6   r   r   r7   r8   r    r!   r!   r"   
test_right0   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#@)r   r   r   r   r2   r3   r4   r   r   r5   r6   r?   r!   r!   r"   test_no_right<   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+   r7   T
categoriesr0      )
r   rangerH   r   r5   r   
from_codesr   appendcodes)cr    r   r!   r!   r"   test_bins_from_interval_indexH   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_exampleU   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_indexa   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_monotonicj   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   )xr7   r    r   r!   r!   r"   #test_bins_monotonic_not_overflowingr   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   r7   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,closedTMbPg      ?      ?r<   Fgjt?rA   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<   rB   )	r   tilearanger   r   r2   r   r_   rH   )r<   ZbreaksrC   arrr   r7   	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   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_serr7   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>)      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   *  s   c                 C   s   t dddg| S )Nr   r   r.   r   rK   r   r!   r!   r"   r   1  r   c                 C   s    t dgddg  ddg | S )Nr   r   r   r.   r   r   r!   r!   r"   r   2  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_expectedr7   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   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_compat?  s
    
r   rs   g      &@g    _Bc                 C   s   t | d d S )Nr.   r   )rs   r!   r!   r"   test_round_frac_just_worksI  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_fracO  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<   rB   Tr/   )r   r   r   Zlinspacer3   r   r2   r4   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~jthrk   r+   r<   rB   r/   )r   r   r   r   r   r2   repeatr   r   r   r   )r   r   r7   r    r!   r!   r"   test_series_ret_binsm  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   r7   valuesr   r    r!   r!   r"   test_cut_duplicates_binx  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    r7   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   r7   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   )r7   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_roundtrip?  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   )r7   r   compareZdata_expectedZdata_resultr    r   r!   r!   r"   test_cut_bool_coercion_to_intM  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_labels_  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   )r7   r<   r   r   r   r    r!   r!   r"   test_cut_nullable_integerh  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r7   r   r0   rG   r   r   rK   r   r5   r   r7   r   Zexpected_codesZexpected_labelsr   r    r!   r!   r"   test_cut_non_unique_labelsu  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)r7   r0   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   r7   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  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<   rB   r+   r   r   r   r   )r   r   r   T)r7   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   rP   r   )12gMbXg#@r<   rB   g3@g33333=@gC@g     H@g33333M@g33333SQ@gS@gfffffFV@c   Tr/   r   )r   rJ   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 )NrP   r\   r   r.   r   rI   r   r+   r   r   )r7   r   r   Tr/   )r
   r   r   rK   r   r5   )r   r   r    r!   r!   r"   $test_cut_with_timestamp_tuple_labels  s    r  )_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#   markZparametrizelistr   r9   r@   rD   rO   r`   ri   rn   minmaxr^   Ziinfor   Ztimedelta64rt   rw   ry   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   r5   Zassert_equalr   r   r   r   r   r   r   r  r  r
  r  r!   r!   r!   r"   <module>   s  D
	
 "





2

"


		
	
 
	



	
	 
	



	

*0
	,2
	
