U
    +if                  	   @   s   d dl mZ d dlZ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 d dlmZ d dlmZ d dlm  mZ ejdddgddd	 ZG d
d dZdd Zdd Zej !dddgddgedddgd gdd Z"dS )    )permutationsN)
IndexIntervalIntervalIndex	Timedelta	Timestamp
date_rangeinterval_rangeisnanotnatimedelta_range)Float64Indexclassfoo)scopeparamsc                 C   s   | j S N)param)request r   ^/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/indexes/interval/test_interval.pyname   s    r   c                   @   sj  e Zd ZeddgddgZdddZdddZd	d
 Ze	j
ddddddddddddgej ddddddddejg
eddddgedd d!d"d#d$ggd%d& Zd'd( Zd)d* Zd+d, Zd-d. Ze	j
d/edd0d1d2ed3d4d5d6d7eedd8d9d2eed:d;dd2gd<d= Zd>d? Zd@dA ZdBdC ZdDdE Ze	j
jdedFdGdHedFdGdIdJedKdGdHgdLdM dNdOdP Z e	j
dedQddHedKddHgdRdS Z!e	j
jdej"ddTdUej"ddVdUgdWdM dNe	j
jdXej#dYdM dZdM d[dM e$gd\d]d^d_d`gdNdadb Z%e	j
jdce&edFdGdHedFdGdIdJedKdGdHgddddM dNe	j
jdXej#dedM dfdM dgdM e$gd\d]d^d_d`gdNdhdi Z'djdk Z(dldm Z)dndo Z*dpdq Z+drds Z,dtdu Z-dvdw Z.e	j
dxdydIgdzd{ Z/d|d} Z0d~d Z1e	j
dddej2fedQed:ej3fedKed:ej3fgdd Z4e	j
de$e5e6d0e6dde$e5edd0dHedd0dHe$e5edKd0dHed:d0dHgdd Z7e	j
de$e5e6d0e6ddej2g e$e5edd0dHedd0dHej2g e$e5edKd0dHed:d0dHej2g ge	j
dddgdd Z8dd Z9e	j
dd9dd6d1gdd Z:e	j
ddd0dddgdd Z;dd Z<dyS )TestIntervalIndexr         rightc                 C   s   t jtd|dS )N   closed)r   from_breaksrange)selfr   r   r   r   create_index!   s    zTestIntervalIndex.create_indexc              	   C   sH   ddgdgd  }t jt|tdtjt|tddtj|dS )NTF   
   r   r   r   )r   from_arraysnpwherearangenan)r!   r   maskr   r   r   create_index_with_nan$   s    z'TestIntervalIndex.create_index_with_nanc                    s  | j  d}t|dkst|jdks*t|jdks8tt|jtt	
d t|jtt	
dd t|jtt	
dd |j kst fdd	ttdtddD }t	j|td
}tt	|| | j d}t|dkst|jdkst|jdksttdt	jddddddddg
}|d }|d }t|j| t|j| t|j| |j ksvt fdd	t||D }t	j|td
}tt	|| d S )Nr   r$   )r$   r   r         ?g      %@c                    s   g | ]\}}t || qS r   r   .0leftr   r   r   r   
<listcomp>8   s   z5TestIntervalIndex.test_properties.<locals>.<listcomp>dtyper   r                  r#   	   c                    s*   g | ]"\}}t |r t|| ntjqS r   )r   r   r&   r)   r.   r   r   r   r1   N   s   )r"   lenAssertionErrorsizeshapetmassert_index_equalr0   r   r&   r(   r   midr   zipr    arrayobjectassert_numpy_array_equalZasarrayr+   r)   )r!   r   indexZivsexpectedZexpected_leftZexpected_rightZexpected_midr   r   r   test_properties,   s:    

z!TestIntervalIndex.test_propertiesbreaksr6      5      i  i  iz  i iir,         ?gffffff@e      Z20170101Z20170202Z20170303Z20170404Z1nsZ2msZ3sZ4minZ5HZ6Dc                 C   sh   t j||d}|j}tdd |D }t|| |dtj}|j}tdd |D }t|| d S )Nr   c                 s   s   | ]}|j V  qd S r   )lengthr/   Zivr   r   r   	<genexpr>b   s     z0TestIntervalIndex.test_length.<locals>.<genexpr>r   c                 s   s    | ]}t |r|jn|V  qd S r   )r   rO   rP   r   r   r   rQ   h   s     )	r   r   rO   r   r>   r?   insertr&   r)   )r!   r   rH   rE   resultrF   r   r   r   test_lengthU   s    zTestIntervalIndex.test_lengthc                 C   s   | j |d}|jdkst| }tjt|td}t	|| |
 }tjt|td}t	|| | j|d}|jdkst| }tddgdgt|d   }t	|| |
 }tddgdgt|d   }t	|| d S )Nr   Fr2   Tr   )r"   Zhasnansr;   r
   r&   Zzerosr:   boolr>   rD   r   Zonesr+   rB   r!   r   rE   rS   rF   r   r   r   test_with_nansk   s       z TestIntervalIndex.test_with_nansc                 C   sP   | j |d}| }||s"t|jdd}||s<t|j|jk	sLtd S )Nr   T)deep)r"   copyequalsr;   r0   r!   r   rF   rS   r   r   r   	test_copy   s    zTestIntervalIndex.test_copyc                 C   s   | j |d}t|dd}tj|jj|jjdd tj|jj|jjdd tt|dd}tj|jj|jjdd tj|jj|jjdd d S )Nr   F)rY   Zsame)Z
check_samerY   )	r"   r   r>   rD   r0   valuesr   r&   rB   )r!   r   rE   rS   r   r   r   test_ensure_copied_data   s.            z)TestIntervalIndex.test_ensure_copied_datac                 C   s8   t jtdd|d}| j|dd}t|| d S )Nr   r   r   r   )r   r   r&   r(   r"   deleter>   r?   r[   r   r   r   test_delete   s    zTestIntervalIndex.test_deletedatar$   neither)periodsr   g333333?r#         @both)rc   freqr      r0   z1 dayr7   c              
   C   sP  |d }t |g}||}|d|}t|| ||}|t||}t|| |d d ||dd  }|d|}t|| |dd}|tdd}t|| d}tj	t
|d |jdd W 5 Q R X d}dd	d
dh|jh D ]~}d| d|j d}t|j|j|d}	|d|	}|td|	}t|| tj	t|d |jd|	 W 5 Q R X q t tjg|jd}
tjd tjfD ]>}|d d |
|dd  }|d|}t|| q|jjjdkr2|tdtj}d}tj	t
|d |jdtj W 5 Q R X |dtj}t|| d S )Nr   r4   r   r   z=can only insert Interval objects and NA into an IntervalArraymatchz+'value.closed' is 'left', expected 'right'.r0   r   re   rb   z'value.closed' is 'z', expected 'z'.r   )mM)r   appendrR   r>   r?   r:   astyperC   pytestraises	TypeError_datar   r   r0   r   
ValueErrorr&   r)   pdZNAr3   kindNaT)r!   ra   itemZidx_itemrF   rS   resmsgr   Zbad_itemZna_idxnar   r   r   test_insert   sL    



  zTestIntervalIndex.test_insertc                 C   s   t jddg|d}|jdks tt jdddg|d}|jdksBtt jdd	g|d}|jdksbtt jtjtjfg|d}|jdkstt jtjtjftjtjfg|d}|jd
kstdS )zW
        Interval specific tests for is_unique in addition to base class tests
        r   r   )r,   rL   r   Tr   r   r   r4   r   r4   )r   )r   FN)r   from_tuplesZ	is_uniquer;   r&   NaNr!   r   idxr   r   r   test_is_unique_interval   s     z)TestIntervalIndex.test_is_unique_intervalc                 C   s*  t jdddg|d}|jdks"t|jdks0t|jdks>t|jdksLtt jdddg|d}|jdksnt|jdks|t|jdkst|jdkstt jdddg|d}|jdkst|jdkst|jdkst|jdkstt jdd	d
g|d}|jdkst|jdkst|jdks(t|jdks8tt jd
d	dg|d}|jdks\t|jdkslt|jdks|t|jdkstt jd	dd
g|d}|jdkst|jdkst|jdkst|jdkstt jdd
dg|d}|jdkst|jdkst|jdks$t|jdks4tt jdd
dg|d}|jdksXt|jdksht|jdksxt|jdkstt jddg|d}|jdkst|jdkst|jdkst|jdkstt g |d}|jdkst|jdkst|jdkst|jdks&td S )Nr{   r~   r5   r6   r   TFr|   r   r   )r,   rd   r}   )r   r   is_monotonicr;   !_is_strictly_monotonic_increasingis_monotonic_decreasing!_is_strictly_monotonic_decreasingr   r   r   r   test_monotonic  sd    z TestIntervalIndex.test_monotonicc                 C   sF   t tjtjg}|jrt|jr$t|jr.t|jr8t|jrBtd S r   )	r   r&   r)   r   r;   r   Zis_monotonic_increasingr   r   )r!   rE   r   r   r   test_is_monotonic_with_nansJ  s    



z-TestIntervalIndex.test_is_monotonic_with_nansc                 C   s   t jddtjfddtjf|d}|d tdd|dks:t|d tdd|dksTtt|d sdt|dd }t jdd	|d}t|| |dd }t jd
d|d}t|| |dd }t jdtjfdtjf|d}t|| d S )Nr   r   r   r                 ?       @)r   )r   )r   r   r   r   r4   )	r   r%   r&   r)   r   r;   r
   r>   r?   )r!   r   irS   rF   r   r   r   test_get_itemT  s"       zTestIntervalIndex.test_get_itemZ20180101r5   )rc   z
US/Eastern)rc   tzz0 daysc                 C   s
   t | jS r   strr3   xr   r   r   <lambda>o      zTestIntervalIndex.<lambda>)Zidsc                 C   s   t |}||}t |j}t|| t|d |d }||}t|d j|d j}||ksjt||}t	|j}t|| ||d }|d j}||kst|t
|}t	|j}t|| d S Nr   r   )r   r   _maybe_convert_i8Zasi8r>   r?   r   valuer;   r   list)r!   rH   rE   rS   rF   intervalr   r   r   test_maybe_convert_i8h  s"    






z'TestIntervalIndex.test_maybe_convert_i8z
2018-01-01c                 C   s   t |}|tjgd }ttjgd }||}t	
|| |d|d }|dt|d j}||}t	
|| d S )Nr4   r   )r   r   Z_constructorrs   ru   r   r&   r)   r   r>   r?   rR   floatr   )r!   rH   rE   Z
to_convertrF   rS   r   r   r   test_maybe_convert_i8_nat  s    


z+TestIntervalIndex.test_maybe_convert_i8_natZint64r2   Zfloat64c                 C   s
   t | jS r   r   r   r   r   r   r     r   make_keyc                 C   s   t | d | d S r   r-   rH   r   r   r   r     r   c                 C   s   | S r   r   r   r   r   r   r     r   c                 C   s   | d S Nr   r   r   r   r   r   r     r   r   r   r   Zscalarr   c                 C   s,   t |}||}||}||ks(td S r   )r   r   r   r;   )r!   rH   r   rE   keyrS   r   r   r   test_maybe_convert_i8_numeric  s    

z/TestIntervalIndex.test_maybe_convert_i8_numericzbreaks1, breaks2c                 C   s
   t | jS r   r   r   r   r   r   r     r   c                 C   s   t | d | d S r   r-   r   r   r   r   r     r   c                 C   s   | S r   r   r   r   r   r   r     r   c                 C   s   | d S r   r   r   r   r   r   r     r   c              	   C   sX   t |}||}d|j d|j }t|}tjt|d || W 5 Q R X d S )Nz)Cannot index an IntervalIndex of subtype z with values of dtype rh   )	r   r   r3   reescapern   ro   rr   r   )r!   Zbreaks1Zbreaks2r   rE   r   rx   r   r   r   test_maybe_convert_i8_errors  s    

z.TestIntervalIndex.test_maybe_convert_i8_errorsc              	   C   s   t ddgddg}tjddgdd}|d}t|| |d}t|| tjddgdd}|d	}t|| |d}t|| tjt	d
d |t
dd W 5 Q R X d S )Nr   r   r   FrU   r2   r4   Tr,   z contains not implemented for tworh   )r   r%   r&   rB   containsr>   rD   rn   ro   NotImplementedErrorr   )r!   r   rF   actualr   r   r   test_contains_method  s     



 z&TestIntervalIndex.test_contains_methodc                 C   st   t jddg|d}t jddtjg|d}| }t|| t jddtjgddtjg|d}| }t|| d S )	N)r   r   r   r   r{   r|   r   r   r   )r   r   r&   r)   Zdropnar>   r?   r%   )r!   r   rF   iirS   r   r   r   test_dropna  s     zTestIntervalIndex.test_dropnac                 C   sV   t jddg|d}dddg}||}tjddd	gd
d}t|| d|ksRtd S )Nr{   r~   r   r,   rL   rd   r   r   r   intpr2   )r   r   get_indexerr&   rB   r>   rD   r;   )r!   r   rE   targetr   rF   r   r   r   test_non_contiguous  s    

z%TestIntervalIndex.test_non_contiguousc                 C   s&  | j |d}tdgdgt|d   }||d d }t|| ||d g}t|| tjt	dd|d}tdgt|d  dg }||}t|| ||
 }t|| dD ]T}| j |d}t||kt|}||}t|| ||
 }t|| qd S )	Nr   TFr   r   r   r$   >   rb   r0   r   re   )r"   r&   rB   r:   isinr>   rD   r   r   r(   tolistrepeat)r!   r   rE   rF   rS   otherother_closedr   r   r   	test_isin
  s&    

zTestIntervalIndex.test_isinc              	   C   s  t dd| jk }tddg}t|| t dd| jk }tddg}t|| | jt ddk}t|| | j| jk}tddg}t|| | j| jk}t|| | j| jk}t|| | j| jk }tddg}t|| | j| jk}t|| | jtdddgdk}t|| | j| jjk}t|tddg | jj| jk}t|tddg | j| jjk}t|tddg | j| jjk}t|tddg | j| jjk}t|tddg | jj| jk}t|tddg | jdk}t|tddg | j| jj	k}t|tddg d	
d
dg}tjt|d | jdk W 5 Q R X tjt|d | jdk W 5 Q R X tjt|d | jtdk W 5 Q R X d}tjt|d | jtdk W 5 Q R X d S )Nr   r   FTr,   rL   r   r0   |z:not supported between instances of 'int' and '.*.Interval'z>Invalid comparison between dtype=interval\[int64, right\] and rh   zLengths must match to comparer4   )r   rE   r&   rB   r>   rD   r   r   r]   r0   joinrn   ro   rp   r(   rr   )r!   r   rF   rx   r   r   r   test_comparison%  sh    
z!TestIntervalIndex.test_comparisonc              	   C   s   t tjtdd|dtdd|dg}tjtjddgtjddg|d}||sRtd}tj	t
|d* tjtjddgtdddg|d W 5 Q R X tt|tdddg d S )	Nr   r   r   r   zMmissing values must be missing in the same location both left and right sidesrh   TF)r   r&   r)   r   r   r%   rZ   r;   rn   ro   rr   rB   r>   rD   r
   )r!   r   r   Zidx2rx   r   r   r   test_missing_valuese  s     
  z%TestIntervalIndex.test_missing_valuesc                 C   s   | j |d}| }t|| |jdd}t||d d d  ttddtjtddg}| }ttddtddtjg}t|| |jddd	}ttjtddtddg}t|| d S )
Nr   F)	ascendingr   r   r   r   first)r   Zna_position)r"   Zsort_valuesr>   r?   r   r   r&   r)   rV   r   r   r   test_sort_valuesw  s    z"TestIntervalIndex.test_sort_valuesr   Nc           
      C   s  t d|d}t|dd}t|}t d|d}t|dd}t|j| t d|d|ks\tt d|d|ksptt d|d|ksttt d|dt d	|d}tt d
|dt d|d}||kst||kst|	t d|d
 rt|	t d|d
 st|	t d|d
 s"tt d|d}t|ddd}||}	tjdddddddgdd}t|	| t d|d}t|ddd}||}	tjdddddddgdd}t|	| d S )Nz
2000-01-01r   r$   )startrc   z2000-01-01T12:00r9   z2000-01-01T12z
2000-01-02z
2000-01-03z
1999-12-31z1999-12-31T12:00r8   Z12H)r   rc   rf   r   r   r   r   r   r2   z2000-01-08T18:00Z6Hr#   )r   r   r   r   r>   r?   r@   r;   r   r   anyr   r&   rB   rD   )
r!   r   r   datesrE   rF   Ziv_trueZiv_falser   r   r   r   r   test_datetime  s@    

 

 


zTestIntervalIndex.test_datetimec                 C   s  t jddgddg|d}t jddgddg|d}||}t jddddgddddg|d}t|| |||g}t jddddddgddddddg|d}t|| dddd	h|h D ]H}t jddgddg|d}||}|t|t}t|| qd S )
Nr   r   r   r   r4   r0   r   re   rb   )r   r%   rl   r>   r?   rm   rC   )r!   r   Zindex1index2rS   rF   r   Zindex_other_closedr   r   r   test_append  s*    
     
zTestIntervalIndex.test_appendc                 C   s>  ddddg}t j||d}|jdks(tt j|d d d |d}|jdksNtdd	ddg}t j||d}|jd
ksvtt j|d d d |d}|jd
kstddddg}t j||d}|jd
kstt j|d d d |d}|jd
kst|dkrt jtd|d}|jd
ks:tn"t jtd|d}|jdks:td S )Nr{   r~   r   )r7   r8   r   Tr   r   r}   Fre   r5   )r   r   Zis_non_overlapping_monotonicr;   r   r    )r!   r   Ztplsr   r   r   r   !test_is_non_overlapping_monotonic  s(    
z3TestIntervalIndex.test_is_non_overlapping_monotoniczstart, shift, na_valuec           	         sL   fdddD }t j||d}|jdks0t||fg| ||fg }t j||d}|jdksdt fddtdD }t j||d}|jdkst||fg| ||fg }t j||d}|jdkst fd	dtdD }t j||d}|j}|d
k}||kst||fg| ||fg }t j||d}|j}||ksHtd S )Nc                    s(   g | ] }|   |d     fqS r   r   r/   nshiftr   r   r   r1     s     z9TestIntervalIndex.test_is_overlapping.<locals>.<listcomp>)r   r   r5   r   Fc                    s(   g | ] }|   |d     fqS )r   r   r   r   r   r   r1     s     r4   Tc                    s(   g | ] }|   |d     fqS r   r   r   r   r   r   r1     s     re   )r   r   Zis_overlappingr;   r    )	r!   r   r   Zna_valuer   tuplesrE   rS   rF   r   r   r   test_is_overlapping  s*    z%TestIntervalIndex.test_is_overlappingr   r   c                 C   s0   t |}| }tt|}t|| d S r   )r   r   	to_tuplesr   comasarray_tuplesafer>   r?   )r!   r   r   rS   rF   r   r   r   test_to_tuples  s    
z TestIntervalIndex.test_to_tuplesna_tupleTFc                 C   s   t |}|j|d}tt|d d }|d d }t|| |d }|rt|t	s^t
t|dksnt
tdd |D st
nt|st
d S )N)r   r   r   c                 s   s   | ]}t |V  qd S r   )r
   )r/   r   r   r   r   rQ   W  s     z6TestIntervalIndex.test_to_tuples_na.<locals>.<genexpr>)r   r   r   r   r   r   r>   r?   
isinstancetupler;   r:   allr
   )r!   r   r   r   rS   Zexpected_notnaZresult_notnaZ	result_nar   r   r   test_to_tuples_na3  s    
z#TestIntervalIndex.test_to_tuples_nac                 C   sB   t jdddd}t jdddd}t||j}d}||ks>td S )Nr   r5   i8r2   r   r6   @   )r&   r(   r   r%   nbytesr;   )r!   r0   r   rS   rF   r   r   r   test_nbytes[  s
    zTestIntervalIndex.test_nbytes
new_closedc                 C   s:   t dd||d}||}t dd||d}t|| d S )Nr   r6   )r   r   )r	   
set_closedr>   r?   )r!   r   r   r   rE   rS   rF   r   r   r   test_set_closedd  s    
z!TestIntervalIndex.test_set_closed
bad_closedr   LEFTc              	   C   s<   t dd}d| }tjt|d || W 5 Q R X d S )Nr   r6   zinvalid option for 'closed': rh   )r	   rn   ro   rr   r   )r!   r   rE   rx   r   r   r   test_set_closed_errorsl  s    

z(TestIntervalIndex.test_set_closed_errorsc                 C   s*   t tdtd}t|g}|jr&td S )Nz2017-01-01 00:00:00z2018-01-01 00:00:00)r   r   r   Z_is_all_datesr;   )r!   Z	year_2017Zyear_2017_indexr   r   r   test_is_all_datest  s     
z#TestIntervalIndex.test_is_all_dates)r   )r   )=__name__
__module____qualname__r   r%   rE   r"   r+   rG   rn   markparametrizer&   infrs   to_datetimeZto_timedeltarT   rW   r\   r^   r`   r	   r   r   rz   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)   ru   r   rA   r    r   r   r   r   r   r   r   r   r   r   r      s(  

)	

	
9G


	

	

	@
)!

%








	

r   c                  C   s,   t ddgddg} t| }d|ks(td S )Nr   r   r   r   )r   r%   dirr;   )rE   rS   r   r   r   test_dir}  s    r   c                 C   sf   t tddtddg}|| |}tjddg|jd}t|| |j| |}t|| d S )Nr   r   r   r2   )	r   r   searchsortedr&   rB   r3   r>   rD   rq   )Zlistlike_boxr]   rS   rF   r   r   r   ,test_searchsorted_different_argument_classes  s    r   argr   r   abz
2020-01-01zEurope/Londonr   c              	   C   sD   t tddtddg}d}tjt|d ||  W 5 Q R X d S )Nr   r   r   zL'<' not supported between instances of 'pandas._libs.interval.Interval' and rh   )r   r   rn   ro   rp   r   )r   r]   rx   r   r   r   "test_searchsorted_invalid_argument  s    r   )#	itertoolsr   r   numpyr&   rn   Zpandasrs   r   r   r   r   r   r   r	   r
   r   r   Zpandas._testingZ_testingr>   Zpandas.core.apir   Zpandas.core.commoncorecommonr   Zfixturer   r   r   r   r   r   r   r   r   r   r   <module>   s0   0
      e 