U
    U‚g¨µ  ã                   @  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
 d dlm  mZ d dlZd dlmZmZmZmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlm Z  ej!dd	d
dddgd�dd„ ƒZ"ej!dd„ ƒZ#ej!dd„ ƒZ$ej!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)ej*j+ded d!d"gƒj,ee -d"d#¡ffej.d$d%dd&�j,ee /d"d#¡ffej0d$d%dd&�j,effgd'd(„ d)�d*d+„ ƒZ1ej*j+d,ed d!d"gƒj,e /d"d#¡ej2ffej.d$d%dd&�j,e -d"d#¡ej2ffej0d$d%dd&�j,e /d"d#¡e -d"d#¡ej2ffgd-d(„ d)�d.d/„ ƒZ3ej* +d0ej.d1d2d3�jej4d1d2d3�jg¡d4d5„ ƒZ5ej* +d6d7d8g¡ej* +d9e 6d:d;g¡ed<d=gdd>�ed:d;gdd?�g¡ej* +d@e7ejejej8ej9ej:ej;g¡dAdB„ ƒƒƒZ<ej* +d9e 6d:d;g¡ed<d=gdd>�ed:d;gdd?�g¡ej* +dCd<d=gdDdEge
d:dFdG�gd= g¡dHdI„ ƒƒZ=ej* +d@e7e>ejej8g¡dJdK„ ƒZ?ej* +dLdMdNg¡dOdP„ ƒZ@ej!dQdRejAdSe BdT¡dU�ejAdVe BdV¡dU�gd�dWdX„ ƒZCej* +dLdMdNg¡dYdZ„ ƒZDdS )[é    )ÚannotationsN)ÚNaTÚOutOfBoundsDatetimeÚ	Timestamp)ÚDatetimeIndexÚPeriodÚPeriodIndexÚTimedeltaIndex)ÚDatetimeArrayÚPandasArrayÚPeriodArrayÚTimedeltaArray)Ú_sequence_to_dt64ns)Úsequence_to_td64nsÚDÚBÚWÚMÚQÚY)Úparamsc                 C  s   | j S )z:Fixture returning parametrized frequency in string format.)Úparam)Úrequest© r   úI/tmp/pip-unpacked-wheel-u1j4u1ka/pandas/tests/arrays/test_datetimelike.pyÚfreqstr#   s    r   c                 C  s   t jtdƒd| d�}|S )zò
    A fixture to provide PeriodIndex objects with different frequencies.

    Most PeriodArray behavior is already tested in PeriodIndex tests,
    so here we just test that the PeriodArray behavior matches
    the PeriodIndex behavior.
    ú
2000-01-01éd   ©ÚstartÚperiodsÚfreq)ÚpdÚperiod_ranger   )r   Úpir   r   r   Úperiod_index)   s    
r%   c                 C  s   t jtdƒd| d�}|S )zü
    A fixture to provide DatetimeIndex objects with different frequencies.

    Most DatetimeArray behavior is already tested in DatetimeIndex tests,
    so here we just test that the DatetimeArray behavior matches
    the DatetimeIndex behavior.
    r   r   r   )r"   Ú
date_ranger   )r   Údtir   r   r   Údatetime_index7   s    
r(   c                   C  s   t dddgƒS )a  
    A fixture to provide TimedeltaIndex objects with different frequencies.
     Most TimedeltaArray behavior is already tested in TimedeltaIndex tests,
    so here we just test that the TimedeltaArray behavior matches
    the TimedeltaIndex behavior.
    ú1 Dayú3 Hoursr   )r	   r   r   r   r   Útimedelta_indexE   s    	r+   c                   @  s  e Zd ZU ded< ejdd„ ƒZdd„ Zej 	de
jdd	d
�e
jdd	dd�e
jdd	d
�e
jdd	dd�g¡dd„ ƒZej 	dddg¡ej 	dddg¡dd„ ƒƒZdd„ Zej 	dddedddd ƒjg¡d!d"„ ƒZd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zej 	d1d2d3g¡d4d5„ ƒZd6d7„ Zej 	d8d9d:d;g¡d<d=„ ƒZd>d?„ Zd@dA„ ZdBdC„ Z dDdE„ Z!dFdG„ Z"ej 	d8e
j#e
j$e%j&e'e(g¡dHdI„ ƒZ)dJdK„ Z*ej 	dddg¡dLdM„ ƒZ+dNdO„ Z,ej 	d8e'e%j&e
j#e
j$g¡dPdQ„ ƒZ-dRdS„ Z.dTdU„ Z/dVdW„ Z0dXdY„ Z1d9S )ZÚSharedTestsz2type[DatetimeIndex | PeriodIndex | TimedeltaIndex]Ú	index_clsc                 C  s,   t jddd�d d d }| j|dd�}|S )	z5Fixture returning DatetimeArray with daily frequency.é
   Úi8©Údtypeé   é  é Êš;r   ©r!   )ÚnpÚarangeÚ	array_cls©ÚselfÚdataÚarrr   r   r   Úarr1dT   s    zSharedTests.arr1dc              	   C  sd   |}|   |¡}tjtdd�� ||d d… k W 5 Q R X tjtdd�� ||dg k W 5 Q R X d S )NzLengths must match©Úmatché   r   )r-   ÚpytestÚraisesÚ
ValueError)r:   r=   r<   Úidxr   r   r   Útest_compare_len1_raises[   s    
z$SharedTests.test_compare_len1_raisesÚresultZ2020é   ©r    ÚUTC)r    Útzz0 daysÚ2020Q1r   ©r    r!   c                 C  s.   t  |¡}t||kƒst‚t||kƒr*t‚d S ©N)r"   ÚCategoricalÚallÚAssertionErrorÚany)r:   rF   Úexpectedr   r   r   Útest_compare_with_Categoricalh   s    

z)SharedTests.test_compare_with_CategoricalÚreverseTFÚas_indexc                 C  sÎ   t j||d�}|rt  |¡}|| }}|r4|| }}tj|jtd�}| }	||k}
t |
|¡ ||k}
t |
|	¡ |sÊ|sÊ||k }
t |
|	¡ ||k}
t |
|¡ ||k}
t |
|	¡ ||k}
t |
|¡ d S )N)Úorderedr0   )	r"   rN   ÚCategoricalIndexr6   ÚonesÚshapeÚboolÚtmÚassert_numpy_array_equal)r:   r=   rU   rT   rV   ÚotherÚleftÚrightrX   ÚzerosrF   r   r   r   Útest_compare_categorical_dtypev   s*    


z*SharedTests.test_compare_categorical_dtypec                 C  s¼   t jddd�d d d }t j |¡ | jtk	r4d nd}| j||d�}| j |¡}d	d
dg}| |¡}| |¡}t	 
|  |¡|¡ t  d	d
dg¡}| |¡}| |¡}t	 
|  |¡|¡ d S )Nr   r/   r0   r2   r3   r4   r   r5   r@   é   é^   )r6   r7   ÚrandomÚshuffler8   r   r-   Ú_simple_newÚtaker[   Úassert_index_equalÚarray)r:   r;   r!   r<   rD   ZtakersrF   rR   r   r   r   Ú	test_take™   s    




zSharedTests.test_takeÚ
fill_valueé   g       @iå  r@   é   c              	   C  sj   t jddd�d d d }| j|dd�}d	|jj› d
�}tjt|d�� |jddgd|d� W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   úvalue should be a 'ú' or 'NaT'. Gotr>   r   r@   T©Z
allow_fillrk   )	r6   r7   r8   Ú_scalar_typeÚ__name__rA   rB   Ú	TypeErrorrg   )r:   rk   r;   r<   Úmsgr   r   r   Útest_take_fill_raises®   s
    z!SharedTests.test_take_fill_raisesc                 C  sš   t jddd�d d d }| j|dd�}|jd	d
gdd d�}|d tksLt‚|jd	d
gdt jd�}|d tksrt‚|jd	d
gdtd�}|d tks–t‚d S )Nr.   r/   r0   r2   r3   r4   r   r5   éÿÿÿÿr@   Trp   r   )r6   r7   r8   rg   r   rP   Únan©r:   r;   r<   rF   r   r   r   Útest_take_fill¸   s    zSharedTests.test_take_fillc              	   C  sv   |j ddgdt|d ƒd�}|ddg }t ||¡ d|jj› d�}tjt|d�� |j ddgddd� W 5 Q R X d S )	Nrv   r@   Trp   rn   ro   r>   Úfoo)	rg   Ústrr[   Úassert_equalrq   rr   rA   rB   rs   )r:   r=   rF   rR   rt   r   r   r   Útest_take_fill_strÆ   s    zSharedTests.test_take_fill_strc                 C  sŒ   |}|   |¡}| dt¡}|  |¡}| |d d… |dd … |g¡}| t¡}|   t |d d… |dd … |g¡d ¡}t	 
|   |¡|¡ d S )Nr   rv   r@   )r-   Úinsertr   r8   Ú_concat_same_typeÚastypeÚobjectr6   Zconcatenater[   rh   )r:   r=   r<   rD   rF   Úarr2rR   r   r   r   Útest_concat_same_typeÐ   s    

 
(z!SharedTests.test_concat_same_typec              	   C  sž   t jddd�d d d }| j|dd�}| |d	 ¡}|jjj}t||ƒsNt‚| t	¡}t||ƒsft‚d
| j
j› d�}tjt|d�� | d¡ W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   r   z'value' should be a Ú.r>   rz   )r6   r7   r8   Z_unbox_scalarÚ_ndarrayr1   ÚtypeÚ
isinstancerP   r   Úscalar_typerr   rA   rB   rC   )r:   r;   r<   rF   rR   rt   r   r   r   Útest_unbox_scalarÜ   s    

zSharedTests.test_unbox_scalarc                 C  sV   t jddd�d d d }| j|dd�}| |d	 ¡ | |d d
… ¡ | t¡ d S )Nr.   r/   r0   r2   r3   r4   r   r5   r   r@   )r6   r7   r8   Z_check_compatible_withr   r9   r   r   r   Útest_check_compatible_withê   s
    z&SharedTests.test_check_compatible_withc                 C  sN   t jddd�d d d }| j|dd�}| t|d	 ƒ¡}||d	 ksJt‚d S )
Nr.   r/   r0   r2   r3   r4   r   r5   r   )r6   r7   r8   Z_scalar_from_stringr{   rP   rx   r   r   r   Útest_scalar_from_stringò   s    z#SharedTests.test_scalar_from_stringc              	   C  sT   t jddd�d d d }| j|dd�}d	}tjt|d
�� | d¡ W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   z)does not support reduction 'not a method'r>   znot a method)r6   r7   r8   rA   rB   rs   Z_reduce)r:   r;   r<   rt   r   r   r   Útest_reduce_invalidø   s
    zSharedTests.test_reduce_invalidÚmethodÚpadZbackfillc                 C  sx   t jddd�d d d }| j|dd�}t|d	< |d
kr@|d n|d }|j|d�}|d	 |ksdt‚|d	 tkstt‚d S )Nr.   r/   r0   r2   r3   r4   r   r5   rb   rŽ   rG   é   )r�   )r6   r7   r8   r   ZfillnarP   )r:   r�   r;   r<   rk   rF   r   r   r   Ú%test_fillna_method_doesnt_change_orig   s    z1SharedTests.test_fillna_method_doesnt_change_origc                 C  sâ   t jddd�d d d }| j|dd�}| |d	 ¡}|d	ksBt‚|j|d
 dd�}|dks`t‚| |d	d… ¡}t jd	d
gt jd�}t ||¡ |j|d	d… dd�}t jd
dgt jd�}t ||¡ | t	¡}|dksÞt‚d S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   rl   r_   ©ZsiderG   )
r6   r7   r8   ÚsearchsortedrP   ri   Úintpr[   r\   r   )r:   r;   r<   rF   rR   r   r   r   Útest_searchsorted  s    
zSharedTests.test_searchsortedÚboxNÚindexZseriesc              
   C  sR  |}|d krn|dkr"|   |¡}n
t |¡}| t|d ƒ¡}|dksJt‚|jt|d ƒdd�}|dkslt‚| dd„ |dd… D ƒ¡}tjddgtjd	�}t	 
||¡ tjtt d
|jj› d�¡d�� | d¡ W 5 Q R X |dkrêdnd}t d|¡�N tjtt d
|jj› d|› d�¡d�� | t|d ƒdg¡ W 5 Q R X W 5 Q R X d S )Nr–   r@   rl   r_   r‘   rG   c                 S  s   g | ]}t |ƒ‘qS r   ©r{   ©Ú.0Úxr   r   r   Ú
<listcomp>:  s     zBSharedTests.test_searchsorted_castable_strings.<locals>.<listcomp>r0   rn   z/', 'NaT', or array of those. Got 'str' instead.r>   rz   ÚpythonZStringArrayZArrowStringArrayÚstring_storagez"', 'NaT', or array of those. Got 'z
' instead.Zbaz)r-   r"   ÚSeriesr’   r{   rP   r6   ri   r“   r[   r\   rA   rB   rs   ÚreÚescaperq   rr   Zoption_context)r:   r=   r•   r�   r<   rF   rR   Zarr_typer   r   r   Ú"test_searchsorted_castable_strings'  s:    
ÿþÿþz.SharedTests.test_searchsorted_castable_stringsc                 C  s\   t jdd„ tddƒD ƒdd�}| j|dd�}|d	  t |¡}|d	  t |¡}|d	  d S )
Nc                 S  s   g | ]}t j| ‘qS r   )r   Ú_value)r™   Únr   r   r   r›   V  s     zGSharedTests.test_getitem_near_implementation_bounds.<locals>.<listcomp>r@   r�   r/   r0   Únsr5   r   )r6   ÚasarrayÚranger8   r"   ÚIndexrž   )r:   Zi8valsr<   r–   Zserr   r   r   Ú'test_getitem_near_implementation_boundsS  s    

z3SharedTests.test_getitem_near_implementation_boundsc                 C  s    t |ƒ|jd d …tjf |jd�}|d d …tjf }t ||¡ |}t |ƒ|jd d…df |jd�}|d d…df }t ||¡ |d }|d }||ksœt‚d S )Nr0   rG   r   )rv   r   rv   )r†   r…   r6   Únewaxisr1   r[   r|   rP   )r:   r=   rR   rF   Úarr2dr   r   r   Útest_getitem_2d`  s    " zSharedTests.test_getitem_2dc                 C  s~   |j d d…tjf }t|ƒj||jd�}t|ƒ}t|ƒdks@t‚|D ]4}t	|t|ƒƒsZt‚|j
dksht‚|j|jksDt‚qDd S )NrG   r0   r@   )r…   r6   r©   r†   rf   r1   ÚlistÚlenrP   r‡   Úndim)r:   r=   Údata2drª   rF   rš   r   r   r   Útest_iter_2dq  s    zSharedTests.test_iter_2dc              
   C  sÄ   |j d d…tjf }t|ƒj||jd�}t|ƒ}t|tƒr~dt|ƒj	› d|d  
¡ › d|d  
¡ › d|d  
¡ › d	|j› �
}n6dt|ƒj	› d|d › d|d › d|d › d	|j› �
}||ksÀt‚d S )
NrG   r0   ú<z>
[
['r   z'],
['r@   rl   z']
]
Shape: (3, 1), dtype: )r…   r6   r©   r†   rf   r1   Úreprr‡   r   rr   Z
_repr_baserP   )r:   r=   r¯   rª   rF   rR   r   r   r   Útest_repr_2d{  s    
@ÿ4ÿ
zSharedTests.test_repr_2dc                 C  s¢   t jddd�d d d }| j|dd�}|d	 |d
< t jddd�d d d }|d	 |d
< t |j|¡ |dd … |d d…< |dd … |d d…< t |j|¡ d S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   r   éþÿÿÿrl   )r6   r7   r8   r[   r\   Úasi8©r:   r;   r<   rR   r   r   r   Útest_setitem˜  s    zSharedTests.test_setitemc                 C  s    |  ¡ d d d… }|jjdkr(| d ¡}|}|tkr>t|ƒ}nF|tjkrZt | t¡¡}n*|t	krv|tj
|td�ƒ}n||ƒ t¡}||d d …< t ||¡ d S )Nrv   )Úmr   r0   )Úcopyr1   ÚkindÚ
_with_freqr¬   r6   ri   r€   r�   r   r¥   r[   r|   )r:   r•   r=   rR   Úvalsr   r   r   Útest_setitem_object_dtype¦  s    


z%SharedTests.test_setitem_object_dtypec                 C  sŠ   |  ¡ }|dd … |ddg< |  ¡ }dd„ |dd … D ƒ|d d…< t ||¡ |  ¡ }|d |d< |  ¡ }t|d ƒ|d< t ||¡ d S )Nr´   r   r@   c                 S  s   g | ]}t |ƒ‘qS r   r—   r˜   r   r   r   r›   Ì  s     z1SharedTests.test_setitem_strs.<locals>.<listcomp>rl   rv   )r¹   r[   r|   r{   )r:   r=   rR   rF   r   r   r   Útest_setitem_strsÄ  s    zSharedTests.test_setitem_strsc                 C  sd   |  ¡ d d d… }t|tƒs&| d ¡}t |¡}|r>t |¡}|d d d… |d d …< t ||¡ d S )Nrv   )	r¹   r‡   r   r»   r"   rN   rW   r[   r|   )r:   r=   rU   rR   Úcatr   r   r   Útest_setitem_categorical×  s    



z$SharedTests.test_setitem_categoricalc              	   C  sØ   t jddd�d d d }| j|dd�}|d	 }tjtd
d�� ||d< W 5 Q R X tjtdd�� tƒ |d	< W 5 Q R X d}tjt|d�� |d g|g < W 5 Q R X d}tjt|d�� |d d… |dd…< W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   r   zindex 12 is out of boundsr>   rm   zvalue should be a.* 'object'z<cannot set using a list-like indexer with a different lengthr@   z=cannot set using a slice indexer with a different length thanrG   )	r6   r7   r8   rA   rB   Ú
IndexErrorrs   r�   rC   )r:   r;   r<   Úvalrt   r   r   r   Útest_setitem_raiseså  s    zSharedTests.test_setitem_raisesc              	   C  sp   d|j j› d�}tjt|d�� |ddgƒ|d d…< W 5 Q R X tjt|d�� |ddgƒ|d d…< W 5 Q R X d S )	Nrn   z ', 'NaT', or array of those. Gotr>   r   r@   rl   g        g      ð?)rq   rr   rA   rB   rs   )r:   r=   r•   rt   r   r   r   Útest_setitem_numeric_raisesú  s    ÿz'SharedTests.test_setitem_numeric_raisesc                 C  s„   t jddd�d d d }| j|dd�}|tjd	d
� }|tjd	d
�7 }t ||¡ |tjd	d
� }|tjd	d
�8 }t ||¡ d S )Nr.   r/   r0   r2   r3   r4   r   r5   r@   ©Údays)r6   r7   r8   r"   Ú	Timedeltar[   r|   r¶   r   r   r   Útest_inplace_arithmetic  s    z#SharedTests.test_inplace_arithmeticc              	   C  sT   t jddd�d d d }| j|dd�}tjtd	d
�� |jddd� W 5 Q R X d S )Nr.   r/   r0   r2   r3   r4   r   r5   zvalue should be ar>   r@   )rk   )r6   r7   r8   rA   rB   rs   Úshiftr9   r   r   r   Útest_shift_fill_int_deprecated  s    z*SharedTests.test_shift_fill_int_deprecatedc                 C  sô  |}t |ƒd dkr |d d… }|t |ƒd  }| ¡ }t|ƒt|ƒksLt‚||ksXt‚t|t |ƒd < t|tƒsš|t |ƒd d t |ƒd d …  ¡ }|jdd�tks®t‚| ¡ }t|ƒt|ƒksÊt‚||ksÖt‚|d d…  ¡ tksît‚|d d… jdd�tk�st‚| dd¡}|jd d�}t|ƒt|ƒk�s:t‚||k�sHt‚|jd dd�tk�s`t‚|jdd�}t|ƒj	|g|j
d	�}t ||¡ |jddd�}t|ƒj	tg|j
d	�}t ||¡ |jdd�}t ||¡ |jddd�}t ||¡ d S )
Nrl   r   rv   r@   F)Úskipna)Úaxis)rÌ   rË   r0   )r­   Zmedianr†   rP   r   r‡   r   ZmeanÚreshapeÚ_from_sequencer1   r[   r|   )r:   r=   r<   rR   rF   r‚   Z	expected2r   r   r   Útest_median  s>    
(zSharedTests.test_medianc                 C  sT   t jdddgt jd�}| j|| jd�}tj|dd�}| j|| jd�}t ||¡ d S )Nr@   rl   rG   r0   ZInt64)r6   ri   Úint64r8   Úexample_dtyper"   r[   Úassert_extension_array_equal)r:   r<   rR   r;   rF   r   r   r   Útest_from_integer_arrayM  s
    z#SharedTests.test_from_integer_array)2rr   Ú
__module__Ú__qualname__Ú__annotations__rA   Úfixturer=   rE   ÚmarkÚparametrizer"   r&   Útimedelta_ranger#   rS   ra   rj   r   Útimeru   ry   r}   rƒ   r‰   rŠ   r‹   rŒ   r�   r”   r¡   r¨   r«   r°   r³   r·   r§   rž   r6   ri   r¬   r   r½   r¾   rÀ   rÃ   rÄ   rÈ   rÊ   rÏ   rÓ   r   r   r   r   r,   Q   sp   

üþ	
!
	


+
ûþ



0r,   c                   @  sÒ   e Zd ZeZeZeZdZ	e
jdd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Ze
j dej¡dd„ ƒZe
j dej¡dd„ ƒZdd„ Zdd „ Zd!d"„ Zd#d$„ Z d%d&„ Z!d'S )(ÚTestDatetimeArrayúM8[ns]c                 C  s    |}t jdd||d�}|j}|S )zc
        Fixture returning DatetimeArray with parametrized frequency and
        timezones
        z2016-01-01 01:01:00r�   ©r    r!   rJ   )r"   r&   Ú_data)r:   Ztz_naive_fixturer   rJ   r'   Údtar   r   r   r=   ]  s    zTestDatetimeArray.arr1dc                 C  sj   |   |¡}|jdd�}|tjdd� }| d ¡}t ||¡ |j}|jdd�}|j d ¡}t ||¡ d S )NZ2Tr5   r@   )Úminutes)	r-   Úroundr"   rÇ   r»   r[   rh   rß   Úassert_datetime_array_equal)r:   r=   r'   rF   rR   rà   r   r   r   Ú
test_roundh  s    

zTestDatetimeArray.test_roundc                 C  s€  t |ƒ}t |¡}|j}||ks$t‚t ||¡ tj|dd�}||ksJt‚t ||¡ tj|dd�}|j}||ksvt‚t ||¡ tj|ddd�}||ksžt‚t ||¡ tj|dd�}||k	sÄt‚t ||¡ tj|td�}tjt	|ƒtd�}t ||¡ tj|dd�}||j
k	�st‚t ||¡�r,t‚|j
 ¡ }t ||¡ dtfD ]0}tj||d�}t |¡ |¡}t ||¡ �qJd S )NF©r¹   údatetime64[ns]r0   ©r1   r¹   rÐ   Úfloat64)r
   r6   r¥   r…   rP   r[   r\   ri   r�   r¬   rµ   Úmay_share_memoryr¹   r{   r€   )r:   r(   r<   rF   rR   r1   r   r   r   Útest_array_interfacev  s<    

z&TestDatetimeArray.test_array_interfacec                 C  sT   |}|   |¡}t t|ƒ¡}tj|td�}t ||¡ tj|td�}t ||¡ d S ©Nr0   )r-   r6   ri   r¬   r�   r[   r\   ©r:   r=   r<   r'   rR   rF   r   r   r   Útest_array_object_dtype   s    
z)TestDatetimeArray.test_array_object_dtypec                 C  s®   |}|   |¡}|j d¡}tj|dd�}t ||¡ tj|dd�}t ||¡ tj|ddd�}|j|jksnt‚|jd k	s|t‚tj|ddd�}|j|jksœt‚|jd k	sªt‚d S )NrÝ   r0   ræ   Frç   )	r-   rµ   Úviewr6   ri   r[   r\   ÚbaserP   rì   r   r   r   Útest_array_tz®  s    
zTestDatetimeArray.test_array_tzc                 C  s|   |}|   |¡}|j}tj|dd�}t ||¡ tj|tjd�}t ||¡ tj|ddd�}|j|jk	sjt‚|jd ksxt‚d S )Nr/   r0   Frç   )	r-   rµ   r6   ri   r[   r\   rÐ   rï   rP   rì   r   r   r   Útest_array_i8_dtypeÂ  s    
z%TestDatetimeArray.test_array_i8_dtypec                 C  sL   t jddgdd�}t|ƒ}|j|ks(t‚t|d d… ƒ}|jj|ksHt‚d S )Nr   z
2000-01-02rÝ   r0   r   )r6   ri   r
   r…   rP   rï   )r:   r<   rà   r   r   r   Útest_from_array_keeps_baseÒ  s
    z,TestDatetimeArray.test_from_array_keeps_basec                 C  sR   |}|   |¡}t|ƒt|ƒks"t‚t |¡}t|tƒs:t‚t|ƒt|ƒksNt‚d S rM   )r-   r¬   rP   r"   r§   r‡   r   )r:   r=   r<   r'   Zdti2r   r   r   Útest_from_dtiÛ  s    

zTestDatetimeArray.test_from_dtic                 C  sN   |}|   |¡}| d¡}t|tjƒs(t‚|jdks6t‚t|ƒt|ƒksJt‚d S ©NÚO©r-   r€   r‡   r6   ÚndarrayrP   r1   r¬   )r:   r=   r<   r'   Úasobjr   r   r   Útest_astype_objectå  s    

z$TestDatetimeArray.test_astype_objectc                 C  sN   |}t |ƒ}|j|d�}|j|d�}t|tƒs2t‚t t |¡t |¡¡ d S )Nr5   )	r
   Ú	to_periodr‡   r   rP   r[   rh   r"   r§   )r:   r(   r   r'   r<   rR   rF   r   r   r   Útest_to_periodî  s    z TestDatetimeArray.test_to_periodc              	   C  s`   |  dd¡}|jd krd nt}t |¡�" | d¡}| d¡  dd¡}W 5 Q R X t ||¡ d S )Nr@   rv   r   )rÍ   rJ   ÚUserWarningr[   Zassert_produces_warningrú   Zassert_period_array_equal)r:   r=   rª   ÚwarnrF   rR   r   r   r   Útest_to_period_2dú  s    
z#TestDatetimeArray.test_to_period_2dÚpropnamec                 C  sN   |   |¡}|}|j|jkst‚t||ƒ}tjt||ƒ|jd�}t ||¡ d S rë   )	r-   r!   rP   Úgetattrr6   ri   r1   r[   r\   ©r:   r=   rÿ   r'   r<   rF   rR   r   r   r   Útest_bool_properties  s    

z&TestDatetimeArray.test_bool_propertiesc                 C  s>   |   |¡}|}t||ƒ}tjt||ƒ|jd�}t ||¡ d S rë   )r-   r   r6   ri   r1   r[   r\   r  r   r   r   Útest_int_properties  s
    

z%TestDatetimeArray.test_int_propertiesc              	   C  sÖ  |}|   |¡}| |j¡}|jddgd|d�}|d |ks>t‚d|jj› d�}tjt	|d�� |jddgd|| d� W 5 Q R X tjt	|d�� |jddgdt
d	ƒd� W 5 Q R X |jd k	rÀd nd
}| |¡}d}tjt	|d�� |jddgd|d� W 5 Q R X tj}	d|jj› d�}tjt	|d�� |jddgd|	d� W 5 Q R X t dd¡}	tjt	|d�� |jddgd|	d� W 5 Q R X |jd k	�rÒ| d¡}	|jddgd|	d�}|jddgd|	 |jj¡d�}
t ||
¡ d S )Nrv   r@   Trp   r   rn   ro   r>   Z2014Q1z
US/Easternz:Cannot compare tz-naive and tz-aware datetime-like objectsr   r¤   zAustralia/Melbourne)r-   Útz_localizerJ   rg   rP   rq   rr   rA   rB   rs   r   r   r¢   r6   Útimedelta64Z
tz_convertr1   r[   r|   )r:   r=   Úfixed_now_tsr<   r'   ÚnowrF   rt   rJ   ÚvaluerR   r   r   r   Útest_take_fill_valid  s>    
""

ýz&TestDatetimeArray.test_take_fill_validc              	   C  sP   |}|j d kr| d¡}n
| d ¡}tjtdd�� | ||g¡ W 5 Q R X d S )NrI   zto_concat must have the samer>   )rJ   r  rA   rB   rC   r   )r:   r=   r<   r]   r   r   r   Útest_concat_same_type_invalidI  s    

z/TestDatetimeArray.test_concat_same_type_invalidc                 C  sf   t tjddddd�ƒ}t tjddddd�ƒ}t  ||g¡}t t dddd	g¡ d¡ƒ}t ||¡ d S )
NÚ2000rl   r   z
US/CentralrÞ   ÚHz2000-01-01 00:00:00z2000-01-02 00:00:00z2000-01-01 01:00:00)r
   r"   r&   r   Úto_datetimer  r[   rã   )r:   ÚaÚbrF   rR   r   r   r   Ú$test_concat_same_type_different_freqU  s    üÿùÿz6TestDatetimeArray.test_concat_same_type_different_freqc                 C  s6   |}|  d¡}tjdd„ |D ƒtd�}t ||¡ d S )Nú%Y %bc                 S  s   g | ]}|  d ¡‘qS )r  ©Ústrftime)r™   Útsr   r   r   r›   k  s     z3TestDatetimeArray.test_strftime.<locals>.<listcomp>r0   ©r  r6   ri   r�   r[   r\   ©r:   r=   r<   rF   rR   r   r   r   Útest_strftimeg  s    
zTestDatetimeArray.test_strftimec                 C  s>   t tdtgƒƒ}| d¡}tjdtjgtd�}t 	||¡ d S )Nú
2019-01-01ú%Y-%m-%dr0   )
r
   r   r   r  r6   ri   rw   r�   r[   r\   ©r:   r<   rF   rR   r   r   r   Útest_strftime_natn  s    
z#TestDatetimeArray.test_strftime_natN)"rr   rÔ   rÕ   r   r-   r
   r8   r   rˆ   rÑ   rA   r×   r=   rä   rê   rí   rð   rñ   rò   ró   rù   rû   rþ   rØ   rÙ   Ú	_bool_opsr  Ú
_field_opsr  r	  r
  r  r  r  r   r   r   r   rÜ   W  s2   

*	
		

	0rÜ   c                   @  sf   e Zd ZeZeZejZ	dZ
dd„ Zdd„ Zdd„ Zdd	„ Zej d
ej¡dd„ ƒZdd„ Zdd„ ZdS )ÚTestTimedeltaArrayúm8[ns]c                 C  sX   t ddgƒ}t|ƒ}t|ƒt|ƒks(t‚t |¡}t|t ƒs@t‚t|ƒt|ƒksTt‚d S )Nr)   r*   )r	   r   r¬   rP   r"   r§   r‡   )r:   Útdir<   Ztdi2r   r   r   Útest_from_tdi}  s    
z TestTimedeltaArray.test_from_tdic                 C  sT   t ddgƒ}t|ƒ}| d¡}t|tjƒs.t‚|jdks<t‚t|ƒt|ƒksPt‚d S )Nr)   r*   rõ   )	r	   r   r€   r‡   r6   r÷   rP   r1   r¬   )r:   r   r<   rø   r   r   r   rù   ‡  s    
z%TestTimedeltaArray.test_astype_objectc                 C  s,   |}t |ƒ}| ¡ }| ¡ }t ||¡ d S rM   )r   Zto_pytimedeltar[   r\   ©r:   r+   r   r<   rR   rF   r   r   r   Útest_to_pytimedelta�  s
    z&TestTimedeltaArray.test_to_pytimedeltac                 C  s.   |}t |ƒ}| ¡ }| ¡ }t ||j¡ d S rM   )r   Útotal_secondsr[   r\   Úvaluesr"  r   r   r   Útest_total_seconds˜  s
    z%TestTimedeltaArray.test_total_secondsrÿ   c                 C  s<   |}t |ƒ}t||ƒ}tjt||ƒ|jd�}t ||¡ d S rë   )r   r   r6   ri   r1   r[   r\   )r:   r+   rÿ   r   r<   rF   rR   r   r   r   r  ¡  s
    
z&TestTimedeltaArray.test_int_propertiesc                 C  s€  t |ƒ}t |¡}|j}||ks$t‚t ||¡ tj|dd�}||ksJt‚t ||¡ tj|dd�}|j}||ksvt‚t ||¡ tj|ddd�}||ksžt‚t ||¡ tj|dd�}||k	sÄt‚t ||¡ tj|td�}tjt	|ƒtd�}t ||¡ tj|dd�}||j
k	�st‚t ||¡�r,t‚|j
 ¡ }t ||¡ dtfD ]0}tj||d�}t |¡ |¡}t ||¡ �qJd S )NFrå   ztimedelta64[ns]r0   rç   rÐ   rè   )r   r6   r¥   r…   rP   r[   r\   ri   r�   r¬   rµ   ré   r¹   r{   r€   )r:   r+   r<   rF   rR   r1   r   r   r   rê   «  s<    

z'TestTimedeltaArray.test_array_interfacec           	   	   C  sô   |}t |ƒ}tjdd�}|jddgd|d�}|d |ks<t‚|}d|jj› d�}tjt	|d	�� |jddgd|d� W 5 Q R X | 
d
¡}tjt	|d	�� |jddgd|d� W 5 Q R X t dd¡}tjt	|d	�� |jddgd|d� W 5 Q R X d S )Nr@   rÅ   rv   Trp   r   rn   ro   r>   r   r   r¤   )r   r"   rÇ   rg   rP   rq   rr   rA   rB   rs   rú   r6   Ú
datetime64)	r:   r+   r  r   r<   Ztd1rF   r  rt   r   r   r   r	  Õ  s    
z'TestTimedeltaArray.test_take_fill_validN)rr   rÔ   rÕ   r	   r-   r   r8   r"   rÇ   rˆ   rÑ   r!  rù   r#  r&  rA   rØ   rÙ   r  r  rê   r	  r   r   r   r   r  w  s   
		
	*r  c                   @  s¾   e Zd ZeZeZeZeg dd�j	Z
ejdd„ ƒZdd„ Zdd„ Zd	d
„ Zej dddg¡dd„ ƒZdd„ Zdd„ Zej dej¡dd„ ƒZej dej¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS ) ÚTestPeriodArrayr   r5   c                 C  s   |j S )zW
        Fixture returning DatetimeArray from parametrized PeriodIndex objects
        )rß   )r:   r%   r   r   r   r=   ô  s    zTestPeriodArray.arr1dc                 C  sR   |   |¡}|}t|ƒt|ƒks"t‚t |¡}t|tƒs:t‚t|ƒt|ƒksNt‚d S rM   )r-   r¬   rP   r"   r§   r‡   r   )r:   r=   r$   r<   Zpi2r   r   r   Útest_from_piû  s    

zTestPeriodArray.test_from_pic                 C  sN   |   |¡}|}| d¡}t|tjƒs(t‚|jdks6t‚t|ƒt|ƒksJt‚d S rô   rö   )r:   r=   r$   r<   rø   r   r   r   rù     s    

z"TestPeriodArray.test_astype_objectc              	   C  s†   |}t j}d|jj› d�}tjt|d�� |jddgd|d� W 5 Q R X t 	dd	¡}tjt|d�� |jddgd|d� W 5 Q R X d S )
Nrn   ro   r>   rv   r@   Trp   r   r¤   )
r   r¢   rq   rr   rA   rB   rs   rg   r6   r  )r:   r=   r<   r  rt   r   r   r   r	    s    z$TestPeriodArray.test_take_fill_validÚhowÚSÚEc                 C  sT   |   |¡}|}t|j|d�ƒ}|j|d�}t|tƒs8t‚t t |¡t |¡¡ d S )N)r*  )	r-   r
   Úto_timestampr‡   rP   r[   rh   r"   r§   )r:   r*  r=   r$   r<   rR   rF   r   r   r   Útest_to_timestamp  s    
z!TestPeriodArray.test_to_timestampc           	      C  s¤   t jdddd�j}| ¡ }| ¡ }|jdks0t‚t ||¡ |d d d… }| ¡ }| ¡ }|jdksht‚t ||¡ | d¡}| ¡ }|jdks”t‚t ||¡ d S )Nz
2021-10-18rG   r   rL   rl   Z2B)	r"   r&   rß   rú   r-  r!   rP   r[   rÒ   )	r:   rà   ZparrrF   Zdta2Zparr2Zresult2Zparr3Zresult3r   r   r   Ú test_to_timestamp_roundtrip_bday(  s    
z0TestPeriodArray.test_to_timestamp_roundtrip_bdayc              	   C  s^   t jdddd�}d}tjt|d�� | ¡  W 5 Q R X tjt|d�� |j ¡  W 5 Q R X d S )NZ1500r   rG   )r!   r    z7Out of bounds nanosecond timestamp: 1500-01-01 00:00:00r>   )r"   r#   rA   rB   r   r-  rß   )r:   r$   rt   r   r   r   Útest_to_timestamp_out_of_bounds;  s    z/TestPeriodArray.test_to_timestamp_out_of_boundsrÿ   c                 C  s8   |   |¡}|}t||ƒ}t t||ƒ¡}t ||¡ d S rM   ©r-   r   r6   ri   r[   r\   ©r:   r=   rÿ   r$   r<   rF   rR   r   r   r   r  E  s
    

z$TestPeriodArray.test_bool_propertiesc                 C  s8   |   |¡}|}t||ƒ}t t||ƒ¡}t ||¡ d S rM   r1  r2  r   r   r   r  P  s
    

z#TestPeriodArray.test_int_propertiesc              	   C  s¼   |}t  |¡}t jt|ƒtd�}t ||¡ t j|td�}t ||¡ t j|dd�}t ||j¡ d}tj	t
|d�� t j|dd� W 5 Q R X t j|dd�}t  |¡ d¡}t ||¡ d S )Nr0   rÐ   zEfloat\(\) argument must be a string or a( real)? number, not 'Period'r>   rè   ZS20)r6   r¥   ri   r¬   r�   r[   r\   rµ   rA   rB   rs   r€   )r:   r=   r<   rF   rR   rt   r   r   r   rê   Z  s    
z$TestPeriodArray.test_array_interfacec                 C  s6   |}|  d¡}tjdd„ |D ƒtd�}t ||¡ d S )Nú%Yc                 S  s   g | ]}|  d ¡‘qS )r3  r  )r™   Zperr   r   r   r›   v  s     z1TestPeriodArray.test_strftime.<locals>.<listcomp>r0   r  r  r   r   r   r  r  s    
zTestPeriodArray.test_strftimec                 C  sB   t tdtgdd�ƒ}| d¡}tjdtjgtd�}t 	||¡ d S )Nr  z	period[D]r0   r  )
r   r   r   r  r6   ri   rw   r�   r[   r\   r  r   r   r   r  y  s    
z!TestPeriodArray.test_strftime_natN)rr   rÔ   rÕ   r   r-   r   r8   r   rˆ   r1   rÑ   rA   r×   r=   r)  rù   r	  rØ   rÙ   r.  r/  r0  r  r  r  r  rê   r  r  r   r   r   r   r(  î  s(   






	r(  zarr,casting_natsr)   r*   r   r¤   r   rG   rL   c                 C  s
   t | ƒjS rM   ©r†   rr   ©rš   r   r   r   Ú<lambda>�  ó    r6  )Úidsc                 C  sF   t | ƒ t| d | d g¡}|D ] }|  ¡ } || d< t | |¡ q d S )Nr@   rl   r   )r†   rÎ   r   r¹   r[   r|   )r<   Zcasting_natsrR   Únatr   r   r   Útest_casting_nat_setitem_array‚  s
    r:  zarr,non_casting_natsc                 C  s
   t | ƒjS rM   r4  r5  r   r   r   r6  ª  r7  c              
   C  s4   d}|D ]&}t jt|d�� || d< W 5 Q R X qd S )Nzwvalue should be a '(Timestamp|Timedelta|Period)', 'NaT', or array of those. Got '(timedelta64|datetime64|int)' instead.r>   r   )rA   rB   rs   )r<   Znon_casting_natsrt   r9  r   r   r   Útest_invalid_nat_setitem_arrayš  s
    ÿr;  r<   r  rb   rH   c                 C  sÈ   t | d< |  ¡ }|  ¡ }t |d ¡s*t‚| jdd�}|d dksFt‚| jddd�}|d dksdt‚| j| d  ¡ d�}|d |d ksŒt‚| j| d jdd	�d�}|d |d ks¸t‚t | |¡ d S )
Nr   rÐ   r0   lûÿÿÿ         )r1   Úna_valuer@   )r<  Frå   )r   r¹   Zto_numpyr6   ÚisnanrP   r[   r|   )r<   ÚoriginalrF   r   r   r   Útest_to_numpy_extra·  s    r?  rU   TFr%  z
2020-01-01z
2020-02-01r@   rl   )Úunitr5   Úklassc                 C  s<   |s
| j } |  || ƒ¡}tjddg|jd�}t ||¡ d S )Nr   r@   r0   )rß   r’   r6   ri   r1   r[   r\   )r%  rA  rU   rF   rR   r   r   r   Ú,test_searchsorted_datetimelike_with_listlikeÔ  s
    rB  Úargr  r  zEurope/London)rJ   c              	   C  s,   d}t jt|d�� |  |¡ W 5 Q R X d S )Nz [Unexpected type|Cannot compare]r>   )rA   rB   rs   r’   )r%  rC  rt   r   r   r   Ú:test_searchsorted_datetimelike_with_listlike_invalid_dtypeô  s    rD  c                 C  sB   ddgd }| |ƒ}t |dd�}t dd„ |D ƒƒ}t ||¡ d S )NrK   Z2020Q2rl   r   r5   c                 S  s   g | ]}t |ƒ‘qS r   )r   )r™   Úsr   r   r   r›     s     z?test_period_index_construction_from_strings.<locals>.<listcomp>)r   r[   rh   )rA  Ústringsr;   rF   rR   r   r   r   Ú+test_period_index_construction_from_strings  s
    rG  r1   rÝ   r  c                 C  sø   t jdddg| d�}t|ƒ}ttdœ|  }||ƒ}||ƒ}t ||¡ | |¡}| |¡}t ||¡ tt	dœ|  }||ƒd }||ƒd }t 
||¡ tjtjdœ|  }||ƒj}||ƒj}t 
||¡ ttdœ|  }||ƒ}||ƒ}t ||¡ d S )Nr@   rl   rG   r0   ©rÝ   r  r   )r6   ri   r   r
   r   r[   rÒ   rÎ   r   r   r|   r"   r  Úto_timedeltar   r	   rh   )r1   r;   r<   ÚclsrF   rR   ÚfuncÚidx_clsr   r   r   Útest_from_pandas_array  s*    



rM  Ú
memoryviewri   Údaskz
dask.array)ZmarksÚxarrayc                 C  s„   t jdddgt jd�}| j}|dkr.t|ƒ}nN|dkrDt d|¡}n8|dkrbd	d
l}|j |¡}n|dkr|d	d
l}| |¡}||fS )z¢
    Fixture giving a numpy array and a parametrized 'data' object, which can
    be a memoryview, array, dask or xarray object created from the numpy array.
    r@   rl   rG   r0   rN  ri   ÚirO  r   NrP  )r6   ri   rÐ   r   rN  Z
dask.arrayrP  Z	DataArray)r   r<   Únamer;   rO  Zxrr   r   r   Úarray_likes1  s    

rS  c           	      C  sÐ   |\}}t tdœ|  }||ƒ}| |¡}t ||¡ ttdœ|  }||ƒd }||ƒd }t ||¡ t|t	ƒs¢t
jt
jdœ|  }||ƒj}||ƒj}t ||¡ ttdœ|  }||ƒ}||ƒ}t ||¡ d S )NrH  r   )r
   r   rÎ   r[   rÒ   r   r   r|   r‡   rN  r"   r  rI  ri   r   r	   rh   )	r1   rS  r<   r;   rJ  rR   rF   rK  rL  r   r   r   Útest_from_obscure_arrayR  s$    



rT  )EÚ
__future__r   ri   rŸ   Znumpyr6   rA   Zpandas._libsr   r   r   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr"   r   r   r   r	   Zpandas._testingZ_testingr[   Zpandas.core.arraysr
   r   r   r   Zpandas.core.arrays.datetimesr   Zpandas.core.arrays.timedeltasr   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§   rN   rW   rB  rD  ÚtuplerG  rM  r   Z
skip_if_norS  rT  r   r   r   r   Ú<module>   sà   



    
  "w þþ÷ó
	þþþ÷ð
þþ
ýþùþýþ ÿ
	
 üÿ
