o
    $jM                  	   @   sV  d dl mZ d dlZd dlZd dlm  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  mZ  ej!ddgdd	d
 Z"G dd dZ#G dd de#Z$G dd de#Z%G dd de#Z&G dd de#Z'ej()dg ddd Z*dd Z+ej()ddej,de-ddgd d! Z.dS )"    )partialN)is_unsigned_integer_dtype)IntervalDtype)
CategoricalCategoricalDtypeCategoricalIndexIndexIntervalIntervalIndex
date_rangenotnaperiod_rangetimedelta_range)IntervalArrayZfooparamsc                 C   s   | j S Nparam)request r   p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/pandas/tests/indexes/interval/test_constructors.pyname      r   c                   @   s  e Zd ZdZejg dejfejdddejfe	ejddejdejfe	ejddej
dej
fe	ed	d
dejdejfeddddfedddddfeddddfgddd Zdd Zejde	g dejddfe	g dejddfe	g dejddfe	g dejddfeddddfeddddfgd d! Zejd"e	g dejde	g dej
de	g dejdedddedddgd#d$ Zejd"ejgd% ejgd& ejgd' gd(d) Zejd"g ejg ddejg d*dejg ddejg ddejg ddgd+d, Zejd"ed-ed.ejed.edejed.d/dgd0d1 Zejd2eegd3d4 Zd5d6 Zd7S )8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      ?Z20180101periodsz<M8[ns]z
US/Easternr(   tzzdatetime64[ns, US/Eastern]z1 dayz<m8[ns]r   c                 C      |j S r   r   selfr   r   r   r   breaks_and_expected_subtype(   s   z,ConstructorTests.breaks_and_expected_subtypec           	      C   s   |\}}|  ||}|d||d|}|j|ksJ |j|ks"J |jj|ks*J t|jt|d d |d t|j	t|dd  |d d S )N)closedr   r!      r   )
get_kwargs_from_breaksr/   r   r"   subtypetmassert_index_equalleftr   right)	r-   constructorr.   r/   r   breaksexpected_subtyperesult_kwargsresultr   r   r   test_constructor:   s   "z!ConstructorTests.test_constructorzbreaks, subtype)r   r1      r      float64zdatetime64[ns]ztimedelta64[ns]
2017-01-01   c           
      C   sf   |  ||}|di |}|  |}t|d}|t|fD ]}|dd|i|}	t|	| qd S )Nr7   r"   r   )r2   astyper   strr4   r5   )
r-   r8   r9   r3   Zexpected_kwargsexpectedr;   iv_dtyper"   r<   r   r   r   test_constructor_dtypeG   s   

z'ConstructorTests.test_constructor_dtyper9   c              	   C   sx   t |j}| |}|t|fD ])}td  |d|dd|}W d    n1 s,w   Y  |jjdks9J qd S )Nr6   r"   r/   r   )r   r"   r2   rD   r4   Zassert_produces_warningr/   )r-   r8   r9   rF   r;   r"   r<   r   r   r   test_constructor_pass_closed]   s   

z-ConstructorTests.test_constructor_pass_closedr>   r?   2   c                 C   sl   |  |}|dd|i|}tj}tj|d d td}|j|ks#J |jj|ks+J t	t|| d S )Nr/   r0   r!   r   )
r2   npr@   arrayobjectr/   r"   r3   r4   assert_numpy_array_equal)r-   r8   r9   r/   r;   r<   r:   expected_valuesr   r   r   test_constructor_nanr   s   
z%ConstructorTests.test_constructor_nanuint64c                 C   sv   |  |}|dd|i|}tjg td}t|dtj}|js!J |j|ks(J |jj	|ks0J t
t|| d S )Nr/   r!   r"   r   )r2   rK   rL   rM   getattrr    emptyr/   r"   r3   r4   rN   )r-   r8   r9   r/   r;   r<   rO   r:   r   r   r   test_constructor_empty   s   

z'ConstructorTests.test_constructor_empty
0123456789Z
abcdefghijz<U1c                 C   sL   d}t jt|d |di | | W d    d S 1 sw   Y  d S )NIcategory, object, and string subtypes are not supported for IntervalIndexmatchr   )pytestraises	TypeErrorr2   )r-   r8   r9   msgr   r   r   test_constructor_string   s
   "z(ConstructorTests.test_constructor_stringcat_constructorc                 C   sH   t jddd}t|}||}| |}|di |}t|| d S )Nr   r    r!   r   )rK   aranger
   from_breaksr2   r4   r5   )r-   r8   r^   r9   rE   Z
cat_breaksr;   r<   r   r   r   "test_constructor_categorical_valid   s   

z3ConstructorTests.test_constructor_categorical_validc                 C   s  |  td}d}tjt|d |dddi| W d    n1 s$w   Y  d}tjt|d |dddi| W d    n1 sFw   Y  d	}tjt|d |dddi| W d    n1 shw   Y  td
dd}|  |}d}tjt|d |di | W d    n1 sw   Y  |  tddd}d}tjt|d |di | W d    d S 1 sw   Y  d S )Nr   z8closed must be one of 'right', 'left', 'both', 'neither'rW   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 insteadr0   z+left side of interval must be <= right sider   )r2   rangerY   rZ   
ValueErrorr[   r   )r-   r8   Zfillerr\   r(   Zperiods_kwargsZdecreasing_kwargsr   r   r   test_generic_errors   s0   
"z$ConstructorTests.test_generic_errorsN) __name__
__module____qualname____doc__rY   fixturerK   r    r_   r   rQ   r@   r   r   r.   r=   markparametrizerG   rI   nanrP   rL   rT   tuplelistrM   r]   r   r   ra   re   r   r   r   r   r   !   s~    





*


		
r   c                   @   st   e Zd ZdZejdd ZdddZdd Zej	
d	ejejfejejfgd
d Zej	
deegdd ZdS )TestFromArraysz+Tests specific to IntervalIndex.from_arraysc                 C      t jS r   )r
   from_arraysr-   r   r   r   r8      r   zTestFromArrays.constructorr7   c                 C   s   |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
        Nr0   r1   )r6   r7   r   r-   r9   r/   r   r   r   r2      s   z%TestFromArrays.get_kwargs_from_breaksc                 C   s   t tddd}d}tjt|d t|d d |dd   W d    n1 s*w   Y  g d}d	d
g}d}tjt|d t|| W d    d S 1 sRw   Y  d S )N
01234abcdeTorderedrV   rW   r0   r1   )r   r1   r>   r>   r   z(left and right must have the same length)r   ro   rY   rZ   r[   r
   rr   rd   )r-   datar\   r6   r7   r   r   r   test_constructor_errors   s   "z&TestFromArrays.test_constructor_errorszleft_subtype, right_subtypec           	      C   s|   t jd|d}t jdd|d}t||}t|t jd}t|t jd}t j}t|j| t|j	| |j
j|ks<J dS )z:mixed int/float left/right results in float for both sides	   r!   r1   r   N)rK   r_   r
   rr   r   r@   r4   r5   r6   r7   r"   r3   )	r-   Zleft_subtypeZright_subtyper6   r7   r<   Zexpected_leftZexpected_rightr:   r   r   r   test_mixed_float_int   s   z#TestFromArrays.test_mixed_float_intinterval_clsc                 C   s   t dddd}t dddd}|||}||d|}t|| ||d  }||d  }|||}||d|}	t||	 |d}
|d}||
|}||
d|}t|| d S )	Nz
2016-01-01r   s)r(   unitrA   msr   UTC)r   rr   Zas_unitr4   Zassert_equalZtz_localize)r-   r|   r6   r7   r<   rE   Zleft2Zright2Zresult2Z	expected2Zleft3Zright3Zresult3Z	expected3r   r   r   .test_from_arrays_mismatched_datetimelike_resos  s   

z=TestFromArrays.test_from_arrays_mismatched_datetimelike_resosNr7   )rf   rg   rh   ri   rY   rj   r8   r2   ry   rk   rl   rK   r    r@   r{   r   r
   r   r   r   r   r   rp      s    


rp   c                   @   s@   e Zd ZdZejdd ZdddZdd Zd	d
 Z	dd Z
dS )TestFromBreaksz+Tests specific to IntervalIndex.from_breaksc                 C   rq   r   )r
   r`   rs   r   r   r   r8   !  r   zTestFromBreaks.constructorr7   c                 C   s   d|iS )z
        converts intervals in breaks format to a dictionary of kwargs to
        specific to the format expected by IntervalIndex.from_breaks
        r9   r   rt   r   r   r   r2   %  s   z%TestFromBreaks.get_kwargs_from_breaksc                 C   sR   t tddd}d}tjt|d t| W d    d S 1 s"w   Y  d S )Nru   Trv   rV   rW   )r   ro   rY   rZ   r[   r
   r`   )r-   rx   r\   r   r   r   ry   ,  s   "z&TestFromBreaks.test_constructor_errorsc                 C   s*   dg}t |}t g }t|| dS )z3breaks of length one produce an empty IntervalIndexr   N)r
   r`   r4   r5   )r-   r9   r<   rE   r   r   r   test_length_one6  s   

zTestFromBreaks.test_length_onec                 C   s>   t d}t|j}|jjd u s|jj|jjusJ d S d S )NrB   )rK   r_   r
   r`   _data_leftbase_right)r-   r9   r<   r   r   r   test_left_right_dont_share_data=  s   
(z.TestFromBreaks.test_left_right_dont_share_dataNr   )rf   rg   rh   ri   rY   rj   r8   r2   ry   r   r   r   r   r   r   r     s    


r   c                   @   s8   e Zd ZdZejdd ZdddZdd Zd	d
 Z	dS )TestFromTuplesz+Tests specific to IntervalIndex.from_tuplesc                 C   rq   r   )r
   from_tuplesrs   r   r   r   r8   G  r   zTestFromTuples.constructorr7   c                 C   s   t |rt|j d t|dkrd|iS tt|dd |dd }t|ttfr1d|iS tt	|ddt
rAd||iS dt|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   rx   Nr0   r1   r"   )r   rY   skipr"   lenro   zip
isinstancern   rR   r   _constructorcomZasarray_tuplesafe)r-   r9   r/   tuplesr   r   r   r2   K  s   z%TestFromTuples.get_kwargs_from_breaksc                 C   s   g d}d}t jt|j|dd t| W d    n1 s!w   Y  g d}d}t jt|j|dd t| W d    n1 sGw   Y  g d}t jt|j|dd t| W d    d S 1 slw   Y  d S )N)r   r1   r>   r   r?   z5IntervalIndex.from_tuples received an invalid item, 2)trW   )r   )r>   r   z>IntervalIndex.from_tuples requires tuples of length 2, got {t})r   )r>   r   r?   )rB      )rY   rZ   r[   formatr
   r   rd   )r-   r   r\   r   r   r   ry   ]  s   "z&TestFromTuples.test_constructor_errorsc                 C   s>   dt jt jfdg}t|}tdt jdg}t|| d S )Nr   )r>   r   )rK   rm   r
   r   r4   r5   )r-   Zna_tupleZidx_na_tupleZidx_na_elementr   r   r   test_na_tuplesn  s   
zTestFromTuples.test_na_tuplesNr   )
rf   rg   rh   ri   rY   rj   r8   r2   ry   r   r   r   r   r   r   D  s    

r   c                   @   s  e Zd ZdZejeeeddgddgddd Z	ejd	d
 Z
d%ddZdd Zdd Zdd Zejdg dfejejgdfeddddeddddgdfeddddeddddgdfejeddddfgdd Zejdeejeegd d! Zd"d# Zd$S )&TestClassConstructorsz6Tests specific to the IntervalIndex/Index constructorsintervalr!   r
   r   )r   Zidsc                 C   r+   r   r   r,   r   r   r   klassy  s   zTestClassConstructors.klassc                 C   s   t S r   )r
   rs   r   r   r   r8     s   z!TestClassConstructors.constructorr7   c                    s   t |rt|j d t|dkrd|iS  fddt|dd |dd D }t|tr4d|iS tt|d	dt	rDd|
|iS dtj|td
iS )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   rx   c                    s(   g | ]\}}t |rt|| n|qS r   )r   r	   ).0r6   r7   r/   r   r   
<listcomp>  s    z@TestClassConstructors.get_kwargs_from_breaks.<locals>.<listcomp>Nr0   r1   r"   r!   )r   rY   r   r"   r   r   r   ro   rR   r   r   rK   rL   rM   )r-   r9   r/   ivsr   r   r   r2     s   

z,TestClassConstructors.get_kwargs_from_breaksc                 C   s   dS )z
        override the base class implementation since errors are handled
        differently; checks unnecessary since caught at the Interval level
        Nr   )r-   r8   r   r   r   re     s    z)TestClassConstructors.test_generic_errorsc                 C   s   d S r   r   rs   r   r   r   r]     s   z-TestClassConstructors.test_constructor_stringc                 C   s   t ddddt ddddg}d}tjt|d	 || W d    n1 s&w   Y  d
}tjt|d	 |d W d    n1 sCw   Y  d}tjt|d	 |ddg W d    d S 1 scw   Y  d S )Nr   r1   r7   r   r>   r   r6   z-intervals must all be closed on the same siderW   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	   rY   rZ   rd   r[   )r-   r   r   r\   r   r   r   ry     s   

"z-TestClassConstructors.test_constructor_errorszdata, closedbothneitherr   r   r   r>   rB   r6   c                 C   sL   t |tr
| }ndd |D }tj||d}|||d}t|| d S )Nc                 S   s$   g | ]}t |r|j|jfn|qS r   )r   r6   r7   )r   Zivr   r   r   r     s   $ zGTestClassConstructors.test_override_inferred_closed.<locals>.<listcomp>r   )r   r
   Z	to_tuplesr   r4   r5   )r-   r8   rx   r/   r   rE   r<   r   r   r   test_override_inferred_closed  s   

z3TestClassConstructors.test_override_inferred_closedvalues_constructorc                 C   sX   t ddt ddt ddg}||}t|td}t|tu s J t|jt| d S )Nr   r1   r>   r   r!   )	r	   r   rM   typer4   rN   valuesrK   rL   )r-   r   	intervalsr   r<   r   r   r   test_index_object_dtype  s
   z-TestClassConstructors.test_index_object_dtypec                 C   sX   t ddddt ddddt ddddt dd	d
dg}t|}t|td}t|| d S )Nr   r1   r6   r   r>   r7   r   r   r?   r   r!   )r	   r   rM   r4   r5   )r-   r   r<   rE   r   r   r   test_index_mixed_closed  s   z-TestClassConstructors.test_index_mixed_closedNr   )rf   rg   rh   ri   rY   rj   r
   r   r   r   r8   r2   re   r]   ry   rk   rl   rK   rm   r	   r`   rc   r   ro   rL   r   r   r   r   r   r   r   r   v  s@    





	r   timezone)r   z
US/PacificGMTc                 C   sj   t dd| d}d|  d| d}tjddgdd	g||d
}tj|d d |dd  |d}t|| d S )NZ2022r   r)   zinterval[datetime64[ns, z], ]z
2022-01-01z
2022-01-02z
2022-01-03r/   r"   r0   r1   r   )r   r
   rr   r4   r5   )r   Zinclusive_endpoints_fixturedatesr"   r<   rE   r   r   r   test_interval_index_subtype  s   r   c                  C   s   t tjd} d}tjt|d tg | dd W d    n1 s!w   Y  tjt|d tg | dd W d    d S 1 s@w   Y  d S )Nr6   z*closed keyword does not match dtype.closedrW   r   rH   )r   rK   r    rY   rZ   rd   r
   r   )r"   r\   r   r   r   test_dtype_closed_mismatch  s   "r   r"   ZFloat64zfloat64[pyarrow]Zpyarrow)Zmarksc                 C   sV   ddg}t | dd}tj|d|d}|j|ksJ tj|dd|}t|| d S )N)g        皙?)r   g333333?r6   )r3   r/   r   r   )r   r
   r   r"   rC   r4   r5   )r"   ZbinsZinterval_dtyper<   rE   r   r   r   test_ea_dtype  s   r   )/	functoolsr   numpyrK   rY   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandas.core.dtypes.commonr   Zpandas.core.dtypes.dtypesr   Zpandasr   r   r   r   r	   r
   r   r   r   r   Zpandas._testingZ_testingr4   Zpandas.core.arraysr   Zpandas.core.commoncorecommonr   rj   r   r   rp   r   r   r   rk   rl   r   r   r   Z
skip_if_nor   r   r   r   r   <module>   s4    0
 6H&2x
