
    iM              
          d dl mZ d dlZd dlZd dlmc mZ d dl	m
Z
 d dlm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c mZ   G d d      Z! G d	 d
e!      Z" G d de!      Z# G d de!      Z$ G d de!      Z%ejL                  jO                  dg d      d        Z(d Z)ejL                  jO                  dd ejT                  d ejV                  d            g      d        Z,y)    )partialN)is_unsigned_integer_dtype)IntervalDtype)
CategoricalCategoricalDtypeCategoricalIndexIndexIntervalIntervalIndex
date_rangenotnaperiod_rangetimedelta_range)IntervalArrayc                   "   e Zd ZdZej
                  j                  dg dej                  f ej                  dd      ej                  f e
 ej                  ddej                              ej                  f e
 ej                  dd	ej                              ej                  f e
 ej                  d
dd      ej                        ej                  f eddd      df edddd      df edd      dfg      ej
                  j                  dddg      d               Zej
                  j                  d e
g dej                        df e
g dej                        df e
g dej                        df e
g dej                        df ed d!d      df edd!      dfg      d"        Zej
                  j                  d# e
g dej                         e
g dej                         e
g dej                         ed d!d       edd!      g      d$        Zej
                  j                  d#ej$                  gd%z  ej$                  gd&z  ej$                  gd'z  g      d(        Zej
                  j                  d#g  ej(                  g d       ej(                  g d)       ej(                  g d       ej(                  g d       ej(                  g d      g      d*        Zej
                  j                  d# ed+       ed,       ej(                   ed,      e       ej(                   ed,      d-      g      d.        Zej
                  j                  d/eeg      d0        Zd1 Zy)2ConstructorTestsz
    Common tests for all variations of IntervalIndex construction. Input data
    to be supplied in breaks format, then converted by the subclass method
    get_kwargs_from_breaks to the expected format.
    breaks_and_expected_subtype)         \   i  
   int64dtypei            g      ?20180101nsperiodsunitzM8[ns]z
US/Easternr#   tzr$   zdatetime64[ns, US/Eastern]z1 dayr#   zm8[us]nameNfooc                 z   |\  }}| j                  ||      } |d||d|}|j                  |k(  sJ |j                  |k(  sJ |j                  j                  |k(  sJ t        j                  |j                  t        |d d |             t        j                  |j                  t        |dd  |             y )N)closedr(   r       )
get_kwargs_from_breaksr+   r(   r   subtypetmassert_index_equalleftr	   right)	selfconstructorr   r+   r(   breaksexpected_subtyperesult_kwargsresults	            l/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/tests/indexes/interval/test_constructors.pytest_constructorz!ConstructorTests.test_constructor#   s    $ $?  33FFCGFGG}}&&&{{d"""||##'7777
fkk5DT+UV
fllE&*DT,UV    zbreaks, subtype)r   r-      r      float64zdatetime64[ns]ztimedelta64[ns]
2017-01-01   c                     | j                  |j                  |            } |di |}| j                  |      }t        |d      }|t        |      fD ]"  } |dd|i|}	t	        j
                  |	|       $ y )Nr4   r   r.   )r/   astyper   strr1   r2   )
r5   r6   r7   r0   expected_kwargsexpectedr9   iv_dtyper   r:   s
             r;   test_constructor_dtypez'ConstructorTests.test_constructor_dtypeA   s     55fmmG6LM1133F; '2H. 	4E >u>>F!!&(3	4r=   r7   c                    t        |j                        }| j                  |      }|t        |      fD ]F  }t	        j
                  d       5   |d|dd|}d d d        j                  j                  dk(  rFJ  y # 1 sw Y   'xY w)Nr3   r   r+   r.   )r   r   r/   rE   r1   assert_produces_warningr+   )r5   r6   r7   rH   r9   r   r:   s          r;   test_constructor_pass_closedz-ConstructorTests.test_constructor_pass_closedW   s     !.33F;H. 	1E++D1 R$Q5Q=QR<<&&&000	1R Rs   A>>B	r>   r?   2   c                 @   | j                  |      } |dd|i|}t        j                  }t        j                  |d d t              }|j
                  |k(  sJ |j                  j                  |k(  sJ t        j                  t        j                  |      |       y )Nr+   r,   r   r.   )
r/   npr@   arrayobjectr+   r   r0   r1   assert_numpy_array_equal)r5   r6   r7   r+   r9   r:   r8   expected_valuess           r;   test_constructor_nanz%ConstructorTests.test_constructor_nanl   s     33F;<F<m<::((6#2;f=}}&&&||##'7777
##BHHV$4oFr=   uint64c                 l   | j                  |      } |dd|i|}t        j                  g t              }t	        |dt        j
                        }|j                  sJ |j                  |k(  sJ |j                  j                  |k(  sJ t        j                  t        j                  |      |       y )Nr+   r   r   r.   )r/   rP   rQ   rR   getattrr   emptyr+   r   r0   r1   rS   )r5   r6   r7   r+   r9   r:   rT   r8   s           r;   test_constructor_emptyz'ConstructorTests.test_constructor_emptyy   s     33F;<F<m<((2V4"67BHH=|||}}&&&||##'7777
##BHHV$4oFr=   
0123456789
abcdefghijz<U1c                     d}t        j                  t        |      5   |di | j                  |       d d d        y # 1 sw Y   y xY w)NIcategory, object, and string subtypes are not supported for IntervalIndexmatchr.   )pytestraises	TypeErrorr/   )r5   r6   r7   msgs       r;   test_constructor_stringz(ConstructorTests.test_constructor_string   sH     X 	 ]]9C0 	?>$55f=>	? 	? 	?s	   ?Acat_constructorc                     t        j                  dd      }t        j                  |      } ||      }| j	                  |      } |di |}t        j                  ||       y )Nr   r   r   r.   )rP   aranger   from_breaksr/   r1   r2   )r5   r6   rf   r7   rG   
cat_breaksr9   r:   s           r;   "test_constructor_categorical_validz3ConstructorTests.test_constructor_categorical_valid   s[     2W- ,,V4$V,
33J?-}-
fh/r=   c                    | j                  t        d            }d}t        j                  t        |      5   |dddi| d d d        d}t        j                  t
        |      5   |dddi| d d d        d	}t        j                  t
        |      5   |dddi| d d d        t        d
d      }| j                  |      }d}t        j                  t        |      5   |di | d d d        | j                  t        ddd            }d}t        j                  t        |      5   |di | d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   y xY w)Nr   z8closed must be one of 'right', 'left', 'both', 'neither'r_   r+   invalidz)dtype must be an IntervalDtype, got int64r   r   z(data type ["']invalid["'] not understoodz
2000-01-01r'   z:Period dtypes are not supported, use a PeriodIndex insteadr,   z+left side of interval must be <= right sider.   )r/   rangera   rb   
ValueErrorrc   r   )r5   r6   fillerrd   r#   periods_kwargsdecreasing_kwargss          r;   test_generic_errorsz$ConstructorTests.test_generic_errors   sk   ,,U2Y7 I]]:S1 	43y3F3	4 :]]9C0 	10g00	1 ;]]9C0 	32i262	3 |R844W=J]]:S1 	*).)	* !77b"b8IJ;]]:S1 	-,+,	- 	-/	4 	4
	1 	1
	3 	3	* 	*	- 	-s;   E(EE&	E'0	E3EEE$'E03E<)__name__
__module____qualname____doc__ra   markparametrizerP   r   rh   r	   rV   r@   r   r   r<   rI   rM   nanrU   rQ   rZ   tuplelistrR   re   r   r   rk   rs   r.   r=   r;   r   r      s    [[%!288,RYYr)28849299S"BHH56A9299R29956		B9299RS)<bjjI
BT:HE:rlN, Wb18<	
  [[VdE]3W 4!"W [[?"((3Y??"((35EF?"((35FG?"**5w?ad;WEWa0':	

	4
	4 [[/2/3/4|QT:GQ/	
		1		1 [[X1rvvhlRVVHrM'RS
G T
G [[BHHRw'BHHRx(BHHRy)BHHR/0BHHR01	

G
G [[,BHHT,'v6BHHT,'u5		
?? [[.>N0OP	0 Q	0-r=   r   c                   *   e Zd ZdZej
                  d        Zd
dZd Zej                  j                  dej                  ej                  fej                  ej                  fg      d        Zej                  j                  deeg      d        Zy	)TestFromArraysz+Tests specific to IntervalIndex.from_arraysc                 "    t         j                  S )z1Fixture for IntervalIndex.from_arrays constructor)r   from_arraysr5   s    r;   r6   zTestFromArrays.constructor        (((r=   c                     |dd |dd dS )z
        converts intervals in breaks format to a dictionary of kwargs to
        specific to the format expected by IntervalIndex.from_arrays
        Nr,   r-   )r3   r4   r.   r5   r7   r+   s      r;   r/   z%TestFromArrays.get_kwargs_from_breaks   s    
 sfQRj99r=   c                 l   t        t        d      d      }d}t        j                  t        |      5  t        j                  |d d |dd         d d d        g d}d	d
g}d}t        j                  t        |      5  t        j                  ||       d d d        y # 1 sw Y   NxY w# 1 sw Y   y xY w)N
01234abcdeTorderedr^   r_   r,   r-   )r   r-   r>   r>   r   z(left and right must have the same length)r   r|   ra   rb   rc   r   r   ro   )r5   datard   r3   r4   s        r;   test_constructor_errorsz&TestFromArrays.test_constructor_errors   s    4-t<W 	 ]]9C0 	;%%d3Biab:	; A8]]:S1 	3%%dE2	3 	3	; 	;	3 	3s   B>B*B'*B3zleft_subtype, right_subtypec                    t        j                  d|      }t        j                  dd|      }t        j                  ||      }t	        |t         j
                        }t	        |t         j
                        }t         j
                  }t        j                  |j                  |       t        j                  |j                  |       |j                  j                  |k(  sJ y)z:mixed int/float left/right results in float for both sides	   r   r-   r   N)rP   rh   r   r   r	   r@   r1   r2   r3   r4   r   r0   )	r5   left_subtyperight_subtyper3   r4   r:   expected_leftexpected_rightr8   s	            r;   test_mixed_float_intz#TestFromArrays.test_mixed_float_int   s    
 yy,/		!R}5**47d"**5uBJJ7::
fkk=9
fllN;||##'7777r=   interval_clsc                 V   t        ddd      }t        ddd      }|j                  ||      }|j                  |j                  d      |      }t        j                  ||       ||d   z
  }||d   z
  }|j                  ||      }|j                  |j                  d      |      }	t        j                  ||	       |j                  d      }
|j                  d      }|j                  |
|      }|j                  |
j                  d      |      }t        j                  ||       y )	Nz
2016-01-01r   sr"   rA   msr   UTC)r   r   as_unitr1   assert_equaltz_localize)r5   r   r3   r4   r:   rG   left2right2result2	expected2left3right3result3	expected3s                 r;   .test_from_arrays_mismatched_datetimelike_resosz=TestFromArrays.test_from_arrays_mismatched_datetimelike_resos   s    ,<<>))$6++DLL,>F
) tAwa**5&9 ,,U]]4-@&I	
+   '""5)**5&9 ,,U]]4-@&I	
+r=   Nr4   )rt   ru   rv   rw   ra   fixturer6   r/   r   rx   ry   rP   r   r@   r   r   r   r   r.   r=   r;   r~   r~      s    5^^) ):3  [[%2::(>RXX@V'W88 [[^m]-KL, M,r=   r~   c                   N    e Zd ZdZej
                  d        ZddZd Zd Z	d Z
y)	TestFromBreaksz+Tests specific to IntervalIndex.from_breaksc                 "    t         j                  S )z1Fixture for IntervalIndex.from_breaks constructor)r   ri   r   s    r;   r6   zTestFromBreaks.constructor  r   r=   c                 
    d|iS )z
        converts intervals in breaks format to a dictionary of kwargs to
        specific to the format expected by IntervalIndex.from_breaks
        r7   r.   r   s      r;   r/   z%TestFromBreaks.get_kwargs_from_breaks  s    
 &!!r=   c                     t        t        d      d      }d}t        j                  t        |      5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   Tr   r^   r_   )r   r|   ra   rb   rc   r   ri   )r5   r   rd   s      r;   r   z&TestFromBreaks.test_constructor_errors&  sN    4-t<W 	 ]]9C0 	,%%d+	, 	, 	,s   AAc                     dg}t        j                  |      }t        j                  g       }t        j                  ||       y)z3breaks of length one produce an empty IntervalIndexr   N)r   ri   r1   r2   )r5   r7   r:   rG   s       r;   test_length_onezTestFromBreaks.test_length_one/  s9    **62 ,,R0
fh/r=   c                     t        j                  d      }t        j                  |      j                  }|j
                  j                  /|j
                  j                  |j                  j                  usJ y y )NrB   )rP   rh   r   ri   _data_leftbase_right)r5   r7   r:   s      r;   test_left_right_dont_share_dataz.TestFromBreaks.test_left_right_dont_share_data6  s\    1**6288||  (FLL,=,=V]]EWEW,WWW,W(r=   Nr   )rt   ru   rv   rw   ra   r   r6   r/   r   r   r   r.   r=   r;   r   r     s0    5^^) )",0Xr=   r   c                   H    e Zd ZdZej
                  d        ZddZd Zd Z	y)TestFromTuplesz+Tests specific to IntervalIndex.from_tuplesc                 "    t         j                  S )z1Fixture for IntervalIndex.from_tuples constructor)r   from_tuplesr   s    r;   r6   zTestFromTuples.constructor@  r   r=   c                 t   t        |      r"t        j                  |j                   d       t	        |      dk(  rd|iS t        t        |dd |dd             }t        |t
        t        f      rd|iS t        t        |dd      t              rd|j                  |      iS dt        j                  |      iS )z
        converts intervals in breaks format to a dictionary of kwargs to
        specific to the format expected by IntervalIndex.from_tuples
        z- not relevant IntervalIndex.from_tuples testsr   r   Nr,   r-   r   )r   ra   skipr   lenr|   zip
isinstancer{   rX   r   _constructorcomasarray_tuplesafe)r5   r7   r+   tupless       r;   r/   z%TestFromTuples.get_kwargs_from_breaksE  s    
 %V,KK6<<.(UVWv;!F##c&"+vabz23ftUm,F##68HIF//788--f566r=   c                 "   g d}d}t        j                  t        |j                  |            5  t	        j
                  |       d d d        g d}d}t        j                  t        |j                  |            5  t	        j
                  |       d d d        g d}t        j                  t        |j                  |            5  t	        j
                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   cxY w# 1 sw Y   y xY w)N)r   r-   r>   r   r?   z5IntervalIndex.from_tuples received an invalid item, 2)tr_   )r   )r>   r   z>IntervalIndex.from_tuples requires tuples of length 2, got {t})r   )r>   r   r?   )rB      )ra   rb   rc   formatr   r   ro   )r5   r   rd   s      r;   r   z&TestFromTuples.test_constructor_errorsW  s    $E]]9CJJJ,@A 	.%%f-	. (N]]:SZZ&Z-AB 	.%%f-	. -]]:SZZ&Z-AB 	.%%f-	. 	.	. 	.	. 	.	. 	.s#   C-C9D-C69DDc                     dt         j                  t         j                  fdg}t        j                  |      }t        j                  dt         j                  dg      }t	        j
                  ||       y )Nr   )r>   r   )rP   rz   r   r   r1   r2   )r5   na_tupleidx_na_tupleidx_na_elements       r;   test_na_tupleszTestFromTuples.test_na_tuplesh  sV    RVVRVV,f5$00:&22FBFFF3KL
lN;r=   Nr   )
rt   ru   rv   rw   ra   r   r6   r/   r   r   r.   r=   r;   r   r   =  s*    5^^) )7$."<r=   r   c                      e Zd ZdZej
                  d        ZddZd Zd Z	ej                  j                  de eed	      gd
dg      d        Zej                  j                  dg dfej"                  ej"                  gdf eddd       eddd      gdf eddd       eddd      gdf ej&                   ed      d      dfg      d        Zej                  j                  deej.                  eeg      d        Zd Zy)TestClassConstructorsz6Tests specific to the IntervalIndex/Index constructorsc                     t         S )z+Fixture for IntervalIndex class constructor)r   r   s    r;   r6   z!TestClassConstructors.constructors  s
     r=   r4   c           	         t        |      r"t        j                  |j                   d       t	        |      dk(  rd|iS t        |dd |dd       D cg c]  \  }}t        |      rt        |||      n|! }}}t        |t              rd|iS t        t        |dd      t              rd|j                  |      iS dt        j                  |t              iS c c}}w )	z
        converts intervals in breaks format to a dictionary of kwargs to
        specific to the format expected by the IntervalIndex/Index constructors
        z) not relevant for class constructor testsr   r   Nr,   r-   r   r   )r   ra   r   r   r   r   r   r
   r   r|   rX   r   r   rP   rQ   rR   )r5   r7   r+   r3   r4   ivss         r;   r/   z,TestClassConstructors.get_kwargs_from_breaksx  s    
 %V,KK6<<.(QRSv;!F##  #6#2;qr
;
e .34[HT5&)dB
 

 fd#C= 68HIF//455F344
s   $Cc                      y)z
        override the base class implementation since errors are handled
        differently; checks unnecessary since caught at the Interval level
        Nr.   )r5   r6   s     r;   rs   z)TestClassConstructors.test_generic_errors  s    r=   c                      y )Nr.   r   s    r;   re   z-TestClassConstructors.test_constructor_string  s     	r=   klassintervalr   r   r	   )idsc                    t        ddd      t        ddd      g}d}t        j                  t        |	      5   ||       d d d        d
}t        j                  t        |	      5   |d       d d d        d}t        j                  t        |	      5   |ddg       d d d        y # 1 sw Y   hxY w# 1 sw Y   FxY w# 1 sw Y   y xY w)Nr   r-   r4   r+   r>   r   r3   z-intervals must all be closed on the same sider_   zX(IntervalIndex|Index)\(...\) must be called with a collection of some kind, 5 was passedrB   z?type <class 'numpy.int(32|64)'> with value 0 is not an interval)r
   ra   rb   ro   rc   )r5   r   r   rd   s       r;   r   z-TestClassConstructors.test_constructor_errors  s     1W-x1V/LM=]]:S1 	#J	
& 	 ]]9C0 	!H	 P]]9C0 	1a&M	 		 		 	
	 	s#   	B*(	B6C*B36B?Czdata, closedbothneitherr   r   r   r>   rB   r3   c                 "   t        |t              r|j                         }n2|D cg c]'  }t        |      r|j                  |j
                  fn|) }}t        j                  ||      } |||      }t        j                  ||       y c c}w )Nr   )	r   r   	to_tuplesr   r3   r4   r   r1   r2   )r5   r6   r   r+   r   ivrG   r:   s           r;   test_override_inferred_closedz3TestClassConstructors.test_override_inferred_closed  sy    $ dM*^^%FIMN2U2Yrww)B>NFN ,,VFCT&1
fh/ Os   ,Bvalues_constructorc                    t        dd      t        dd      t        dd      g} ||      }t        |t              }t        |      t        u sJ t	        j
                  |j                  t        j                  |             y )Nr   r-   r>   r   r   )	r
   r	   rR   typer1   rS   valuesrP   rQ   )r5   r   	intervalsr   r:   s        r;   test_index_object_dtypez-TestClassConstructors.test_index_object_dtype  sg    
 a^Xa^Xa^D	#I.vV,F|u$$$
##FMM288F3CDr=   c                     t        ddd      t        ddd      t        ddd      t        dd	d
      g}t        |      }t        |t              }t        j                  ||       y )Nr   r-   r3   r   r>   r4   r   r   r?   r   r   )r
   r	   rR   r1   r2   )r5   r   r:   rG   s       r;   test_index_mixed_closedz-TestClassConstructors.test_index_mixed_closed  sc     Q&)Q'*Q),Q&)	
	 y!&1
fh/r=   Nr   )rt   ru   rv   rw   ra   r   r6   r/   rs   re   rx   ry   r   r   r	   r   rP   rz   r
   ri   rn   r   r|   rQ   r   r   r   r.   r=   r;   r   r   p  sR   @^^ 5, [[	Z89g&  

( [[Lffbffy)!Qy18Aq3ST
 !Qv.Ag0NO ']&&uQx?I	
 0! 0 [[tRXX}mLEE
0r=   r   timezone)r   z
US/PacificGMTc                     t        dd| d      }d|  d| d}t        j                  dd	gd	d
g||      }t        j                  |d d |dd  |      }t        j                  ||       y )N2022r   r!   r%   zinterval[datetime64[ns, z], ]z
2022-01-01z
2022-01-02z
2022-01-03r+   r   r,   r-   r   )r   r   r   r1   r2   )r   inclusive_endpoints_fixturedatesr   r:   rG   s         r;   test_interval_index_subtyper     s     vqXDAE&xj4O3PPQRE&&	|$	|$*	F ((cr
E!"I&AH &(+r=   c                  4   t        t        j                  d      } d}t        j                  t
        |      5  t        g | d       d d d        t        j                  t
        |      5  t        g | d       d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)Nr3   z*closed keyword does not match dtype.closedr_   r   rK   )r   rP   r   ra   rb   ro   r   r   )r   rd   s     r;   test_dtype_closed_mismatchr     s~     "((F+E
6C	z	- 9bi89 
z	- 9bi89 99 99 9s   B*BBBr   Float64zfloat64[pyarrow]pyarrow)marksc                     ddg}t        | d      }t        j                  |d|      }|j                  |k(  sJ t        j                  |d      j	                  |      }t        j                  ||       y )N)g        皙?)r   g333333?r3   )r0   r+   r   r   )r   r   r   r   rD   r1   r2   )r   binsinterval_dtyper:   rG   s        r;   test_ea_dtyper     sm     
#D"5@N&&tF.QF<<>)))((f=DD^TH&(+r=   )-	functoolsr   numpyrP   ra   pandas.util._test_decoratorsutil_test_decoratorstdpandas.core.dtypes.commonr   pandas.core.dtypes.dtypesr   pandasr   r   r   r	   r
   r   r   r   r   r   pandas._testing_testingr1   pandas.core.arraysr   pandas.core.commoncorecommonr   r   r~   r   r   r   rx   ry   r   r   param
skip_if_nor   r.   r=   r;   <module>r     s       ) ) ? 3    ,    p- p-fE,% E,P#X% #XL0<% 0<fs0, s0l %AB, C, 
9 /}r}}Y7OPQ,	,r=   