o
    i7C                     @   s  d dl mZ d dlZd dl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 d dlmZ d dlmZ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%dd Z&dS )    )partialN)is_categorical_dtype)IntervalDtype)	CategoricalCategoricalIndexIndexIntervalIntervalIndex
date_rangenotnaperiod_rangetimedelta_range)Float64Index
Int64Index)IntervalArrayfoo)paramsc                 C   s   | j S Nparam)request r   j/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/indexes/interval/test_constructors.pyname      r   c                   @   s4  e Zd ZdZejdejdg dej	ddde
edd	ee	d
ddedddeddddedddgdd Zejde
g ddfe
g ddfe
g ddfeg 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
g de
g deg dedddedddgdd Zejdejdejgd ejgd  ejgd! gd"d# Zejdejdg 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d)d* Zejd+eegd,d- Zd.d/ Zd0S )1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.
    +ignore:Passing keywords other:FutureWarningbreaks)         \   i  
   int64dtypei         g      ?20180101periodsz
US/Eastern)r+   tzz1 dayc                 C   s   |  ||}|d||d|}|j|ksJ |j|ksJ |jjt|ddks*J t|jt	|d d  t|j
t	|dd   d S )N)closedr   r%   r#      r   )get_kwargs_from_breaksr-   r   r%   subtypegetattrtmassert_index_equalleftr   right)selfconstructorr   r-   r   result_kwargsresultr   r   r   test_constructor)   s   z!ConstructorTests.test_constructorzbreaks, subtype)r   r/      r      float64zdatetime64[ns]ztimedelta64[ns]z
2017-01-01   c           
      C   sf   |  ||}|di |}|  |}t|d}|t|fD ]}|dd|i|}	t|	| qd S )Nr6   r%   r   )r0   astyper   strr3   r4   )
r7   r8   r   r1   expected_kwargsexpectedr9   iv_dtyper%   r:   r   r   r   test_constructor_dtype@   s   

z'ConstructorTests.test_constructor_dtypec              	   C   s   d }t |tr|jtu rt}t|j}| |}|t|fD ])}t	
| |d|dd|}W d    n1 s:w   Y  |jjdksGJ qd S )Nr5   r%   r-   r   )
isinstancer   funcr   FutureWarningr   r%   r0   rA   r3   assert_produces_warningr-   )r7   r8   r   warnrD   r9   r%   r:   r   r   r   test_constructor_pass_closedV   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-   r.   r$   r   )
r0   npr>   arrayobjectr-   r%   r1   r3   assert_numpy_array_equal)r7   r8   r   r-   r9   r:   expected_subtypeexpected_valuesr   r   r   test_constructor_nanr   s   
z%ConstructorTests.test_constructor_nanc                 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   )r0   rN   rO   rP   r2   r#   emptyr-   r%   r1   r3   rQ   )r7   r8   r   r-   r9   r:   rS   rR   r   r   r   test_constructor_empty   s   

z'ConstructorTests.test_constructor_empty
0123456789
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	TypeErrorr0   )r7   r8   r   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   )rN   aranger	   from_breaksr0   r3   r4   )r7   r8   ra   r   rC   
cat_breaksr9   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'rZ   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   )r0   ranger\   r]   
ValueErrorr^   r   )r7   r8   fillerr_   r+   periods_kwargsdecreasing_kwargsr   r   r   test_generic_errors   s0   
"z$ConstructorTests.test_generic_errorsN)__name__
__module____qualname____doc__r\   markfilterwarningsparametrizerN   rb   r   rg   r   r
   r   r;   rE   rL   nanrT   rO   rV   tuplelistrP   r`   r   r   re   rl   r   r   r   r   r   "   s~    












*


		
r   c                   @   sZ   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dS )TestFromArraysz+Tests specific to IntervalIndex.from_arraysc                 C      t jS r   )r	   from_arraysr7   r   r   r   r8      r   zTestFromArrays.constructorr6   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
        Nr.   r/   )r5   r6   r   r7   r   r-   r   r   r   r0      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orderedrY   rZ   r.   r/   )r   r/   r<   r<   r   z(left and right must have the same length)r   rv   r\   r]   r^   r	   ry   rh   )r7   datar_   r5   r6   r   r   r   test_constructor_errors   s   "z&TestFromArrays.test_constructor_errorszleft_subtype, right_subtypec           	      C   sp   t jd|d}t jdd|d}t||}t|}t|}t j}t|j| t|j	| |j
j|ks6J dS )z:mixed int/float left/right results in float for both sides	   r$   r/   r"   N)rN   rb   r	   ry   r   r>   r3   r4   r5   r6   r%   r1   )	r7   left_subtyperight_subtyper5   r6   r:   expected_leftexpected_rightrR   r   r   r   test_mixed_float_int   s   z#TestFromArrays.test_mixed_float_intNr6   )rm   rn   ro   rp   r\   fixturer8   r0   r   rq   rs   rN   r#   r>   r   r   r   r   r   rw      s    

rw   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   rx   r   )r	   rc   rz   r   r   r   r8     r   zTestFromBreaks.constructorr6   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
        r   r   r{   r   r   r   r0     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 )Nr|   Tr}   rY   rZ   )r   rv   r\   r]   r^   r	   rc   )r7   r   r_   r   r   r   r     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	   rc   r3   r4   )r7   r   r:   rC   r   r   r   test_length_one   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 )Nr?   )rN   rb   r	   rc   _data_leftbase_right)r7   r   r:   r   r   r   test_left_right_dont_share_data'  s   
(z.TestFromBreaks.test_left_right_dont_share_dataNr   )rm   rn   ro   rp   r\   r   r8   r0   r   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   rx   r   )r	   from_tuplesrz   r   r   r   r8   1  r   zTestFromTuples.constructorr6   c                 C   sl   t |dkr
d|iS tt|dd |dd }t|ttfr$d|iS t|r/d||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
        r   r   Nr.   r/   )	lenrv   ziprG   ru   r   _constructorcomasarray_tuplesafe)r7   r   r-   tuplesr   r   r   r0   5  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   r/   r<   r   r=   z5IntervalIndex.from_tuples received an invalid item, 2)trZ   )r   )r<   r   z>IntervalIndex.from_tuples requires tuples of length 2, got {t})r   )r<   r   r=   )r?      )r\   r]   r^   formatr	   r   rh   )r7   r   r_   r   r   r   r   D  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   )rN   rt   r	   r   r3   r4   )r7   na_tupleidx_na_tupleidx_na_elementr   r   r   test_na_tuplesU  s   
zTestFromTuples.test_na_tuplesNr   )
rm   rn   ro   rp   r\   r   r8   r0   r   r   r   r   r   r   r   .  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	d$d
dZ
dd Zdd Zdd Zejd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   idsc                 C   s   |j S r   r   )r7   r   r   r   r   r8   `  s   z!TestClassConstructors.constructorr6   c                    sv   t |dkr
d|iS  fddt|dd |dd D }t|tr'd|iS t|r2d||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
        r   r   c                    s(   g | ]\}}t |rt|| n|qS r   )r   r   ).0r5   r6   r-   r   r   
<listcomp>o  s    z@TestClassConstructors.get_kwargs_from_breaks.<locals>.<listcomp>Nr.   r/   r$   )	r   r   rG   rv   r   r   rN   rO   rP   )r7   r   r-   ivsr   r   r   r0   g  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   )r7   r8   r   r   r   rl   z  s   z)TestClassConstructors.test_generic_errorsc                 C   s   d S r   r   rz   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   r/   r6   r   r<   r   r5   z-intervals must all be closed on the same siderZ   zPIntervalIndex\(...\) must be called with a collection of some kind, 5 was passedr?   z?type <class 'numpy.int(32|64)'> with value 0 is not an interval)r   r\   r]   rh   r^   )r7   r8   r   r_   r   r   r   r     s   

"z-TestClassConstructors.test_constructor_errorsr   zdata, closedbothneitherr   r   r   r<   r?   r5   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   r5   r6   )r   ivr   r   r   r     s   $ zGTestClassConstructors.test_override_inferred_closed.<locals>.<listcomp>r   )rG   r	   	to_tuplesr   r3   r4   )r7   r8   r   r-   r   rC   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   r/   r<   r   r$   )	r   r   rP   typer3   rQ   valuesrN   rO   )r7   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   r/   r5   r   r<   r6   r   r   r=   r   r$   )r   r   rP   r3   r4   )r7   r   r:   rC   r   r   r   test_index_mixed_closed  s   z-TestClassConstructors.test_index_mixed_closedNr   )rm   rn   ro   rp   r\   r   r	   r   r   r8   r0   rl   r`   r   rq   rr   rs   rN   rt   r   rc   rg   r   rv   rO   r   r   r   r   r   r   r   r   ]  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 )Nr5   z*closed keyword does not match dtype.closedrZ   r   rF   )r   rN   r#   r\   r]   rh   r	   r   )r%   r_   r   r   r   test_dtype_closed_mismatch  s   "r   )'	functoolsr   numpyrN   r\   pandas.core.dtypes.commonr   pandas.core.dtypes.dtypesr   pandasr   r   r   r   r	   r
   r   r   r   pandas._testing_testingr3   pandas.core.apir   r   pandas.core.arraysr   pandas.core.commoncorecommonr   r   r   r   rw   r   r   r   r   r   r   r   r   <module>   s&    ,
 61&/r