U
    f/e'                     @   sv   d dl mZmZ d dlZd dlZd dl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 G dd dZdS )    )time	timedeltaN)OutOfBoundsTimedelta)SeriesTimedeltaIndexisnato_timedelta)TimedeltaArrayc                   @   s   e Zd Zejdddgdd Zdd Zdd	 Zd
d Z	dd Z
ejddefdefdefdefdefdefddddg
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)d*d+d,d-d.gejd/ejegd0d1 Zd2d3 Zd4S )5TestTimedeltasreadonlyTFc                 C   s>   t jg td}|r|jdd t|}tg }t|| d S )NdtypeF)write)nparrayobjectZsetflagsr   tmassert_index_equal)selfr   arrresultexpected r   H/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/tools/test_to_timedelta.pytest_to_timedelta_readonly   s    z)TestTimedeltas.test_to_timedelta_readonlyc                 C   s  t ddg}t| stt ttddg}tttddg}t	
|| ttddtdddg}t tddg}t	|| ttdd	td
ddg}t dd
gdd}t	
|| tjdgd dd}t |dd}ttddgd }t	
|| tjdgd dd}t |dd}ttddgd }t	
|| tjdgd dd}t |dd}ttddgd }t	
|| tjdgd dd}t |}ttddgd }t	
|| tjdgd dd}t |}ttddgd }t	
|| d S )N    sdays)r   secondsZ1dz1days 00:00:01r   ns
   m8[ns]unit   int64r   mhtimedelta64[s]ztimedelta64[D]D)r   r   allAssertionErrorr   r   timedelta64pdIndexr   r   r   r   assert_series_equalr   astype)r   r   r   r   r   r   r   test_to_timedelta!   sB    z TestTimedeltas.test_to_timedeltac              	   C   s   t jtjjd gdd}d}tjt|d t| W 5 Q R X tjt|d t	| W 5 Q R X tjt|d t
| W 5 Q R X d S )Nr   r*   r   zBOut of bounds for nanosecond timedelta64\[s\] -9223372036854775807match)r   r   r/   NaTvaluepytestraisesr   r   r   r	   Z_from_sequence)r   r   msgr   r   r   test_to_timedelta_oob_non_nanoQ   s    z-TestTimedeltas.test_to_timedelta_oob_non_nanoc                 C   s   t ddd}tt ddd}||fD ]V}tjtdd t| W 5 Q R X dD ]*}tjtdd t||d W 5 Q R X q\q2d S )Nr"      r&   z	1-d arrayr4   )ignoreraisecoerceerrors)	r   arangeZreshaper/   Z	DataFramer8   r9   	TypeErrorr   )r   r   ZdfargrA   r   r   r   test_to_timedelta_dataframe^   s    z*TestTimedeltas.test_to_timedelta_dataframec              	   C   s  d}t jt|d tdgdd W 5 Q R X d}t jt|d tddgdd	 W 5 Q R X t jt|d tddd	 W 5 Q R X d
}t jt|d ttdd W 5 Q R X ttddddtjkstd}t jt|d tddg W 5 Q R X t	t
tjtjgtddgdd t	t
dtjdgtdddgdd d}|t|ddksVtddg}ttj|tdt|dd tddg}t	|t|dd tddg}t|t|dd d S )Nzerrors must be one ofr4   Zfooneverr@   zinvalid unit abbreviation: foor   r<   r$   zIValue must be Timedelta, string, integer, float, timedelta or convertible)secondr?   z*Could not convert 'foo' to NumPy timedeltabar1 dayz1 minZappler=   z1 daysr   )r8   r9   
ValueErrorr   r   r/   r6   r-   r   r   r   assert_numpy_array_equalr   r   r   r0   r   r1   )r   r:   Zinvalid_datar   r   r   test_to_timedelta_invalidi   sL    
 
z(TestTimedeltas.test_to_timedelta_invalidzval, warningZ1Mz1 MZ1Yz1 YZ1yz1 y)Z1mN)z1 mN)rI   N)Z2dayNc              	   C   s,   d}t j||dd t| W 5 Q R X d S )Nz=Units 'M', 'Y' and 'y' do not represent unambiguous timedeltaF)r5   Zcheck_stacklevel)r   assert_produces_warningr   )r   valwarningr:   r   r   r   !test_unambiguous_timedelta_values   s    z0TestTimedeltas.test_unambiguous_timedelta_valuesc                 C   sL   t tddg}t dgt}t|| t tdg}t|| d S )Nr   r   00:00:01)r   r   r.   applyr   r   r1   r   r   r   r   r   r   test_to_timedelta_via_apply   s
    z*TestTimedeltas.test_to_timedelta_via_applyc              	   C   sN   dt jg}td  t|}W 5 Q R X tt jddt jg}t|| d S )NrQ   r   )r    )r/   r6   r   rM   r   r   	Timedeltar   )r   valsr   r   r   r   r   +test_to_timedelta_inference_without_warning   s
    
z:TestTimedeltas.test_to_timedelta_inference_without_warningc              	   C   s   t d}ttdt jg}tt dd|gdd}t|| tjtdd tdt	j
g}W 5 Q R X |jd	ksvtt|}t|| tt j}|j|d
ksttt	j
}|j|d
kstd S )Nr6   rQ    ʚ;r!   z<m8[ns]r   zInferring timedelta64r4   r#   r'   )r   r.   r   r   nanr   r1   rM   FutureWarningr/   r6   r   r-   r7   r2   )r   Ztimedelta_NaTactualr   Zserr   r   r   #test_to_timedelta_on_missing_values   s     
 

z2TestTimedeltas.test_to_timedelta_on_missing_valuesc                 C   sF   t ddddd  }t|dd}t jddd	d
d}t|j| d S )Nr   r   gư>ir   r$   i;rX   i  r'   r   )r   rB   r   r   rK   Zasi8)r   r   r   Zexpected_asi8r   r   r   test_to_timedelta_float   s    z&TestTimedeltas.test_to_timedelta_floatc                 C   sF   t jdddgtd}t|ddd}tddtjgdd}t|| d S )	Nr   r<   errorr   r!   r?   r%   rA   r$   )r   r   r   r   r/   r6   r   r   )r   r   r   r   r   r   r   %test_to_timedelta_coerce_strings_unit   s    z4TestTimedeltas.test_to_timedelta_coerce_strings_unitc                 C   s2   t jdddgtd}t|ddd}t|| d S )Nr   r<   r^   r   r!   r=   r_   )r   r   r   r   r   rK   )r   r   r   r   r   r   %test_to_timedelta_ignore_strings_unit   s    z4TestTimedeltas.test_to_timedelta_ignore_strings_unitc                 C   sv   t tddtddg}tt ddgdddd}t|| t tddd g}tt dd gdddd}t|| d S )Nr   r   r<   ZInt64r   r   r$   )r   r   r   r   r1   rS   r   r   r   &test_to_timedelta_nullable_int64_dtype   s    z5TestTimedeltas.test_to_timedelta_nullable_int64_dtype)inputr   )z8:53:08.71800000001z8:53:08.718)8:53:08.718001rd   )8:53:08.7180000001re   )z-8:53:08.71800000001z-8:53:08.718)z8:53:08.7180000089z8:53:08.718000008funcc                 C   s"   t |}||}||kstd S )N)r/   rU   r-   )r   rc   r   rf   r   r   r   r   &test_to_timedelta_precision_over_nanos   s    
z5TestTimedeltas.test_to_timedelta_precision_over_nanosc              	   C   sx   t j  }t|}d}tjt|d t	| W 5 Q R X |
d}t	|}t|t js`t|j|
dksttd S )NzYValue must be Timedelta, string, integer, float, timedelta or convertible, not datetime64r4   r#   i8)r/   Z	TimestampnowZto_datetime64r   r   r8   r9   rJ   r   view
isinstancerU   r-   r7   )r   Zdt64rD   r:   Zarg2r   r   r   r   test_to_timedelta_zerodim  s    

z(TestTimedeltas.test_to_timedelta_zerodimN)__name__
__module____qualname__r8   markZparametrizer   r3   r;   rE   rL   rZ   rP   rT   rW   r\   r]   r`   ra   rb   r/   rU   r   rg   rl   r   r   r   r   r
      sP   
	06
	

r
   )datetimer   r   Znumpyr   r8   Zpandas.errorsr   Zpandasr/   r   r   r   r   Zpandas._testingZ_testingr   Zpandas.core.arraysr	   r
   r   r   r   r   <module>   s   