
    OwgM              
           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   ejB                  ddg      d	        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jP                  jS                  dg d      d        Z*d Z+ejP                  jS                  dd ejX                  d ejZ                  d            g      d        Z.y)    )partialN)is_unsigned_integer_dtype)IntervalDtype)
CategoricalCategoricalDtypeCategoricalIndexIndexIntervalIntervalIndex
date_rangenotnaperiod_rangetimedelta_range)IntervalArrayfooparamsc                     | j                   S Nparam)requests    f/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/tests/indexes/interval/test_constructors.pynamer      s    ==    c                      e Zd ZdZ ej
                  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f eddd      df edd      dfg      d        Z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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       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      d,        Zd- Zy.)/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.
    )         \   i  
   int64dtypei            g      ?20180101periodsz<M8[ns]z
US/Easternr,   tzzdatetime64[ns, US/Eastern]z1 dayz<m8[ns]r   c                     |j                   S r   r   selfr   s     r   breaks_and_expected_subtypez,ConstructorTests.breaks_and_expected_subtype(   s      }}r   c                 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_breaksr4   r   r%   subtypetmassert_index_equalleftr	   right)	r1   constructorr2   r4   r   breaksexpected_subtyperesult_kwargsresults	            r   test_constructorz!ConstructorTests.test_constructor:   s    #>  33FFCGFGG}}&&&{{d"""||##'7777
fkk5DT+UV
fllE&*DT,UVr   zbreaks, subtype)r   r6      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 )Nr=   r%   r7   )r8   astyper   strr:   r;   )
r1   r>   r?   r9   expected_kwargsexpectedrA   iv_dtyper%   rB   s
             r   test_constructor_dtypez'ConstructorTests.test_constructor_dtypeG   s     55fmmG6LM1133F; '2H. 	4E >u>>F!!&(3	4r   r?   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)Nr<   r%   r4   r7   )r   r%   r8   rK   r:   assert_produces_warningr4   )r1   r>   r?   rN   rA   r%   rB   s          r   test_constructor_pass_closedz-ConstructorTests.test_constructor_pass_closed]   s     !.33F;H. 	1E++D1 R$Q5Q=QR<<&&&000	1R Rs   A>>B	rD   rE   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 )Nr4   r5   r$   r7   )
r8   nprF   arrayobjectr4   r%   r9   r:   assert_numpy_array_equal)r1   r>   r?   r4   rA   rB   r@   expected_valuess           r   test_constructor_nanz%ConstructorTests.test_constructor_nanr   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 )Nr4   r$   r%   r7   )r8   rV   rW   rX   getattrr#   emptyr4   r%   r9   r:   rY   )r1   r>   r?   r4   rA   rB   rZ   r@   s           r   test_constructor_emptyz'ConstructorTests.test_constructor_empty   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matchr7   )pytestraises	TypeErrorr8   )r1   r>   r?   msgs       r   test_constructor_stringz(ConstructorTests.test_constructor_string   sG      	 ]]9C0 	?>$55f=>	? 	? 	?s	   ?Acat_constructorc                     t        j                  dd      }t        j                  |      } ||      }| j	                  |      } |di |}t        j                  ||       y )Nr"   r#   r$   r7   )rV   aranger   from_breaksr8   r:   r;   )r1   r>   rl   r?   rM   
cat_breaksrA   rB   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're   r4   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 insteadr5   z+left side of interval must be <= right sider7   )r8   rangerg   rh   
ValueErrorri   r   )r1   r>   fillerrj   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<N) __name__
__module____qualname____doc__rg   fixturerV   r#   rn   r	   r\   rF   r   r   r2   rC   markparametrizerO   rS   nanr[   rW   r`   tuplelistrX   rk   r   r   rq   ry   r7   r   r   r   r   !   s^    V^^!288,RYYr)28849299S"BHH56A9299R29956		B9299RS)<bjjI
B/;:rlC, Wb19=
W [[?"((3Y??"((35EF?"((35FG?"**5w?a0':Wa0':	

	4
	4 [[/2/3/4|Q/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 r   )r   from_arraysr1   s    r   r>   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
        Nr5   r6   )r<   r=   r7   r1   r?   r4   s      r   r8   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orderedrd   re   r5   r6   )r   r6   rD   rD   r   z(left and right must have the same length)r   r   rg   rh   ri   r   r   ru   )r1   datarj   r<   r=   s        r   test_constructor_errorsz&TestFromArrays.test_constructor_errors   s    4-t<  	 ]]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$   r6   r"   N)rV   rn   r   r   r	   rF   r:   r;   r<   r=   r%   r9   )	r1   left_subtyperight_subtyper<   r=   rB   expected_leftexpected_rightr@   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   s)r,   unitrG   msr   UTC)r   r   as_unitr:   assert_equaltz_localize)r1   r   r<   r=   rB   rM   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r=   )rz   r{   r|   r}   rg   r~   r>   r8   r   r   r   rV   r#   rF   r   r   r   r   r7   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 r   )r   ro   r   s    r   r>   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
        r?   r7   r   s      r   r8   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   rd   re   )r   r   rg   rh   ri   r   ro   )r1   r   rj   s      r   r   z&TestFromBreaks.test_constructor_errors,  sP    4-t<  	 ]]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   ro   r:   r;   )r1   r?   rB   rM   s       r   test_length_onezTestFromBreaks.test_length_one6  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 )NrH   )rV   rn   r   ro   _data_leftbase_right)r1   r?   rB   s      r   test_left_right_dont_share_dataz.TestFromBreaks.test_left_right_dont_share_data=  s\    1**6288||  (FLL,=,=V]]EWEW,WWW,W(r   Nr   )rz   r{   r|   r}   rg   r~   r>   r8   r   r   r   r7   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 r   )r   from_tuplesr   s    r   r>   zTestFromTuples.constructorG  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   Nr5   r6   r%   )r   rg   skipr%   lenr   zip
isinstancer   r^   r   _constructorcomasarray_tuplesafe)r1   r?   r4   tupless       r   r8   z%TestFromTuples.get_kwargs_from_breaksK  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   r6   rD   r   rE   z5IntervalIndex.from_tuples received an invalid item, 2)tre   )r   )rD   r   z>IntervalIndex.from_tuples requires tuples of length 2, got {t})r   )rD   r   rE   )rH      )rg   rh   ri   formatr   r   ru   )r1   r   rj   s      r   r   z&TestFromTuples.test_constructor_errors]  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   )rD   r   )rV   r   r   r   r:   r;   )r1   na_tupleidx_na_tupleidx_na_elements       r   test_na_tupleszTestFromTuples.test_na_tuplesn  sV    RVVRVV,f5$00:&22FBFFF3KL
lN;r   Nr   )
rz   r{   r|   r}   rg   r~   r>   r8   r   r   r7   r   r   r   r   D  s*    5^^) )7$."<r   r   c                      e Zd ZdZ ej
                  e eed      gddg      d        Z	ej
                  d        Z
dd
Zd Zd Z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j0                  eeg      d        Zd Zy)TestClassConstructorsz6Tests specific to the IntervalIndex/Index constructorsintervalr$   r   r	   )r   idsc                     |j                   S r   r   r0   s     r   klasszTestClassConstructors.klassy  s     }}r   c                     t         S r   )r   r   s    r   r>   z!TestClassConstructors.constructor  s    r   r=   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   Nr5   r6   r%   r$   )r   rg   r   r%   r   r   r   r
   r   r   r^   r   r   rV   rW   rX   )r1   r?   r4   r<   r=   ivss         r   r8   z,TestClassConstructors.get_kwargs_from_breaks  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
        Nr7   )r1   r>   s     r   ry   z)TestClassConstructors.test_generic_errors  s    r   c                      y r   r7   r   s    r   rk   z-TestClassConstructors.test_constructor_string  s     	r   c                    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   r6   r=   r4   rD   r   r<   z-intervals must all be closed on the same sidere   zX(IntervalIndex|Index)\(...\) must be called with a collection of some kind, 5 was passedrH   z?type <class 'numpy.int(32|64)'> with value 0 is not an interval)r
   rg   rh   ru   ri   )r1   r   r   rj   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   rD   rH   r<   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   r<   r=   r   r:   r;   )r1   r>   r   r4   r   ivrM   rB   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   r6   rD   r   r$   )	r
   r	   rX   typer:   rY   valuesrV   rW   )r1   r   	intervalsr   rB   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   r6   r<   r   rD   r=   r   r   rE   r   r$   )r
   r	   rX   r:   r;   )r1   r   rB   rM   s       r   test_index_mixed_closedz-TestClassConstructors.test_index_mixed_closed  sc     Q&)Q'*Q),Q&)	
	 y!&1
fh/r   Nr   )rz   r{   r|   r}   rg   r~   r   r   r	   r   r>   r8   ry   rk   r   r   r   rV   r   r
   ro   rt   r   r   rW   r   r   r   r7   r   r   r   r   v  sK   @V^^wuJ?@g&	 ^^ 5,( [[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}t        j                  ddgdd	g||
      }t        j                  |d d |dd  |      }t        j                  ||       y )N2022r   r-   zinterval[datetime64[ns, z], ]z
2022-01-01z
2022-01-02z
2022-01-03r4   r%   r5   r6   r   )r   r   r   r:   r;   )r   inclusive_endpoints_fixturedatesr%   rB   rM   s         r   test_interval_index_subtyper     s     vqX6E&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)Nr<   z*closed keyword does not match dtype.closedre   r   rQ   )r   rV   r#   rg   rh   ru   r   r   )r%   rj   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?r<   )r9   r4   r   r   )r   r   r   r%   rJ   r:   r;   )r%   binsinterval_dtyperB   rM   s        r   test_ea_dtyper     sm     
#D"5@N&&tF.QF<<>)))((f=DD^TH&(+r   )/	functoolsr   numpyrV   rg   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_testingr:   pandas.core.arraysr   pandas.core.commoncorecommonr   r~   r   r   r   r   r   r   r   r   r   r   r   
skip_if_nor   r7   r   r   <module>r     s      ) ) ? 3    ,     e}% &r- r-jE,% E,P#X% #XL/<% /<du0, u0p %AB, C, 
9 /}r}}Y7OPQ,	,r   