U
    f/eS                     @   s   d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
 ddlZddlmZmZmZmZ ddlmZ G dd dZG d	d
 d
Zejdeddfeddfeddddfeddddfeddddfeddfe	dfgdd Zdd ZdS )z test the scalar Timedelta     )	timedeltaN)lib)NaTiNaT)	TimedeltaTimedeltaIndexoffsetsto_timedeltac                   @   s   e Zd Zdd ZdS )TestTimedeltaUnaryOpsc                 C   s   t ddd}| t dddks"t| t dks4t|
 t dddksJtt||ksZtt| |ksltt| t dkstd S )N
   dunitz-10dZ10d)r   AssertionErrorabsselftd r   P/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/scalar/timedelta/test_timedelta.pytest_unary_ops   s    z$TestTimedeltaUnaryOps.test_unary_opsN)__name__
__module____qualname__r   r   r   r   r   r
      s   r
   c                   @   sZ  e Zd Zejddddg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d dD  dd dD  dd dD  dd dD  dd dD  dd d D  ejd!ejeejgd"d# Zejd$d%d&d'gd(d) Zd*d+ Zd,d- Zd.d/ Zejd0d1ed2ed3fd4ed5ed6fd7ed8ed9fd:ed;ed<fd=ed>ed?fd@edAedBfdCedDedEfdFedGedHfdIedJedKfdLedMedNfg
dOdP ZdQdR ZdSdT ZejdUedVejdWejejejgdXdY ZdZd[ Zd\d] Z d^d_ Z!d`da Z"dbdc Z#ddde Z$dfdg Z%dhdi Z&djdk Z'dldm Z(dnS )oTestTimedeltaszunit, value, expected)usgsh|#@i'  )msgr#@i )sgh#@l   c(	 c                 C   s<   t ||d}|j|kstt t|| }|j|ks8td S )Nr   )r   valuer   str)r   r   r   expectedresultr   r   r   &test_rounding_on_int_unit_construction'   s    
z5TestTimedeltas.test_rounding_on_int_unit_constructionc                 C   s<   t d}d}t| | t tj}t| s8td S )Nz1 days, 10:11:12.100123456g@)r   tmZassert_almost_equaltotal_secondsnpnanisnanr   )r   rngZexptr   r   r   test_total_seconds_scalar6   s
    
z(TestTimedeltas.test_total_seconds_scalarc                 C   s   t dddt dfD ]}| }|t |ks0t||ks<tt|trPt|t rTt|t|jdksjt| }|t|jdkst||kstt|tjstqt d}|| kstd S )Nr   r   r   z1 days, 10:11:12.012345nsz1 days, 10:11:12.012345678)	r   to_pytimedeltar   
isinstancer   r&   timedelta64r   to_timedelta64)r   r   ZpydtZtd64r   r   r   test_conversion?   s    zTestTimedeltas.test_conversionc              	   C   sR  dd }t d}|jdkst|jdks,t|jdks:t|jdksHtd}tjt|	dd	 |j
 W 5 Q R X tjt|	d
d	 |j W 5 Q R X tjt|	dd	 |j W 5 Q R X ||j ||j ||j ||j td}t|tdkstt|dkst| tdks*ttdj dks@ttdjdksTtt d}|jdkslt|jdks|t|jdkst|jdkstd}tjt|	dd	 |j
 W 5 Q R X tjt|	d
d	 |j W 5 Q R X tjt|	dd	 |j W 5 Q R X t ddj}|jdks.t|j
dks>t|jdksNt|jdks^t|jdksnt|jdks~t|jdkst||j ||j
 ||j ||j ||j ||j ||j tdj}|jdkst|j
dkst|jdkst|jdkst|jdks.t|jdks>t|jdksNtd S )Nc                 S   s   t | tstd S N)r-   intr   )r   r   r   r   checkT   s    z)TestTimedeltas.test_fields.<locals>.checkz1 days, 10:11:12   i@  r   z('Timedelta' object has no attribute '{}'hoursmatchminutesmillisecondsz-1 days, 10:11:12z13:48:48z-1 days +10:11:12z0 days 13:48:48l     g4 l  g4 z-1 days, 10:11:12.100123456i i  r      ;   i  z-1 days 1 us)r	   daysr   secondsmicrosecondsnanosecondspytestraisesAttributeErrorformatr5   r8   r9   r   r   r    r   
components)r   r3   r)   msgr   tupr   r   r   test_fieldsS   st    











zTestTimedeltas.test_fieldsc                 C   s    t ddd}td|kstd S )Nr4   r   r   Z
P0DT0H0M1S)r   r	   r   )r   r!   r   r   r   test_iso_conversion   s    z"TestTimedeltas.test_iso_conversionc                 C   s`   t d }|jjdkst|dtks.tt d }|jjdksJt|dtks\td S )NZnatMint64r'   )r	   to_numpydtypekindr   astyper   )r   r"   r   r   r   test_nat_converters   s    z"TestTimedeltas.test_nat_converterszunit, np_unitc                 C   s   g | ]}|d fqS )Wr   .0r   r   r   r   
<listcomp>   s     zTestTimedeltas.<listcomp>)rR   wc                 C   s   g | ]}|d fqS )Dr   rS   r   r   r   rU      s     )rW   r   r>   dayZDaysZDayc                 C   s   g | ]}|d fqS )mr   rS   r   r   r   rU      s   )	rY   minuteminr8   tZMinuteZMinZMinutesTc                 C   s   g | ]}|d fqS )r   r   rS   r   r   r   rU      s   )r   r?   secsecondSZSecondsZSecZSecondc                 C   s   g | ]}|d fqS )r   r   rS   r   r   r   rU      s   )r   r9   ZmillisecondZmilliZmillislZMSZMillisecondsZMillisecondZMilliZMillisLc                 C   s   g | ]}|d fqS )r   r   rS   r   r   r   rU      s   )r   r@   microsecondmicroZmicrosuZUSZMicrosecondsZMicrosecondZMicroZMicrosUc                 C   s   g | ]}|d fqS )r+   r   rS   r   r   r   rU      s   )r+   rA   Z
nanosecondZnanonanosnZNSZNanosecondsZ
NanosecondZNanoZNanosNwrapperc                    s*  t  fddtd D }t|tdd}t|| t |tdd}t|| fddtdD }t||}t|| t||}t|| tt	d 
d}tdd}||ksttdd}||ksttd }||ks
ttd }||ks&td S )	Nc                    s   g | ]}t | qS r   )r&   r.   )rT   i)np_unitr   r   rU     s     z3TestTimedeltas.test_unit_parser.<locals>.<listcomp>   r   c                    s   g | ]}|   qS r   r   )rT   xr   r   r   rU   
  s        ztimedelta64[ns]2)r   r&   Zarangetolistr	   ranger$   Zassert_index_equalr   r.   rP   r   )r   r   rl   rj   r!   r"   Zstr_reprr   )rl   r   r   test_unit_parser   s*    WzTestTimedeltas.test_unit_parserr   YyrK   c              	   C   sx   d}t jt|d td| W 5 Q R X t jt|d td| W 5 Q R X t jt|d tddg| W 5 Q R X d S )Nz/Units 'M', 'Y', and 'y' are no longer supportedr6   r   r4   ro   )rB   rC   
ValueErrorr   r	   )r   r   rG   r   r   r   test_unit_m_y_raises  s    z#TestTimedeltas.test_unit_m_y_raisesc                 C   s   t dtddkstt dtddks0tt dddtddksLtt dddtddkshtt dddtddkstt dddtddkstt dddtdd	kstd S )
Nr   r+   r   r   r   r   r   r   rW   )r   r&   r.   r   r   r   r   r   test_numeric_conversions(  s    z'TestTimedeltas.test_numeric_conversionsc                 C   sp   t tddtdddks$tt tddtdddksHtt tddtdddksltd S )	Nr4   r?   r   m8[ns])r@   r   r>   rW   )r   r   r&   r.   rP   r   rx   r   r   r   test_timedelta_conversions2  s    

z)TestTimedeltas.test_timedelta_conversionsc                 C   s    t d}| | kstd S )NZ10m7s)r   r/   rM   r   r   r   r   r   test_to_numpy_alias;  s    z"TestTimedeltas.test_to_numpy_aliasz
freq,s1,s2ri   1 days 02:34:56.789123456-1 days 02:34:56.789123456rf   z1 days 02:34:56.789123000z-1 days 02:34:56.789123000rb   z1 days 02:34:56.789000000z-1 days 02:34:56.789000000r`   z1 days 02:34:57z-1 days 02:34:57Z2Sz1 days 02:34:56z-1 days 02:34:56Z5Sz1 days 02:34:55z-1 days 02:34:55r]   z1 days 02:35:00z-1 days 02:35:00Z12Tz1 days 02:36:00z-1 days 02:36:00Hz1 days 03:00:00z-1 days 03:00:00r   z1 daysz-1 daysc                 C   s@   t d}t d}||}||ks&t||}||ks<td S )Nr   r   )r   roundr   )r   freqs1s2t1t2Zr1Zr2r   r   r   
test_round@  s    

zTestTimedeltas.test_roundc              
   C   s>   t d}dD ],\}}tjt|d || W 5 Q R X qd S )Nr   ))rt   z,<YearEnd: month=12> is a non-fixed frequency)rK   z#<MonthEnd> is a non-fixed frequency)ZfoobarzInvalid frequency: foobarr6   )r   rB   rC   rv   r   )r   r   r   rG   r   r   r   test_round_invalidf  s    z!TestTimedeltas.test_round_invalidc              	   C   s   t jd}t jt dd t d }||ks0tt jd}t jt d }||ksVttjtdd t jd W 5 Q R X d	d	d
g}tjt|d t jd W 5 Q R X d S )Nr   r4   rz   ii2zvalue too larger6   |z)Python int too large to convert to C longzint too big to convert)
r   r[   ceilr   maxfloorrB   rC   OverflowErrorjoin)r   r"   r!   rG   r   r   r    test_round_implementation_boundsq  s    z/TestTimedeltas.test_round_implementation_boundsrh   d   methodc                 C   s  t jjtd tjt jd}t|}||d|ks4t||d}d}t 	|| j
|k sZt|j
| dkslt||d}d}t 	|| j
|k st|j
| dkst||d	}d
}t 	|| j
|k st|j
| dkst||d}d}t 	|| j
|k st|j
| dkst||d}d}t 	|| j
|k s@t|j
| dksTt||d}d}t 	|| j
|k s|t|j
| dkstd S )Nr4   )rN   r+   r     r   r   @B r    ʚ;r[   l    Xp7 hl     qarW   l     "R: )r&   randomrandintr   r   i8maxrL   r   r   r   r   )r   r   rh   requestvalr   resrg   r   r   r   test_round_sanity  s6    





z TestTimedeltas.test_round_sanityc                 C   sp   t tdddtd }td tdtjfD ]}||ks,tq,t tg}td tdtjfD ]}||ksZtqZd S )Nrm   r   r   r4   r'   )	r	   rr   r   ZHourr   floatr&   r'   r   )r   r   vr   r   r   test_contains  s    
zTestTimedeltas.test_containsc                 C   s,   t ddd}t|t stt|ts(td S )Nr   r   r   )r   r-   r   r   r   r   r   r   test_identity  s    zTestTimedeltas.test_identityc              	   C   sz  dd }t dtddks tt dtddks8tt dtddksPtt d	tddkshtt d
tddkstt dtddkstt dtddkstt dtddkstt dtddkstt dtddkstt dtddkstt dtddks,tt dtddksFtt dtddks`tt dtddksztt dtddkstt dtdd kstt dtddkstt dtd dkstt d!td"dkstt d#td$dkstt d%|td&d'ks6tt d(|td&d' ksVtt d)|td&d'ksttt d*|tdd'kstt d+|tdd'kstt d,|tdd'kstt d-|tdd'kstt d.|tdd'ks
tt d/|tdd' ks*td0}tjt|d1 t d2 W 5 Q R X d3}tjt|d1 t d4 W 5 Q R X d S )5Nc                 S   s
   |  dS Nr{   rP   r   r   r   r   conv  s    z9TestTimedeltas.test_short_format_converters.<locals>.conv10r   r+   Z10nsZ100r   Z100nsZ1000r   Z1000nsZ1000NSZ10usi'  Z100usi Z1000usr   Z1000UsZ1000uSZ1msZ10msi Z100msi Z1000msr   z-1sZ1sZ10sl    d(	 Z100sl    h] Z1000sl    J)Z1dr4   rW   z-1dZ1DZ10DZ100DZ1000DZ10000Dz 10000D z
 - 10000D zinvalid unit abbreviationr6   Z1foozunit abbreviation w/o a numberZfoo)r   r&   r.   r   rB   rC   rv   )r   r   rG   r   r   r   test_short_format_converters  sJ      z+TestTimedeltas.test_short_format_convertersc              	   C   sR  dd }t dd}td||ks(ttd||ks<ttd|| ksRttd|t dd	ksnttd
|t dd	ksttd|t dd	ksttd|t ddksttd|| t dd	 ksttd||t dd	 ksttd||t dd ks(td}tjt|d td W 5 Q R X d S )Nc                 S   s
   |  dS r   r   r   r   r   r   r     s    z8TestTimedeltas.test_full_format_converters.<locals>.convr4   rW   Z1daysz1days,z- 1days,z00:00:01r   z06:00:01iaT  z
06:00:01.0z06:00:01.01iIr   z- 1days, 00:00:01z1days, 06:00:01z1days, 06:00:01.01zhave leftover unitsr6   z- 1days, 00)r&   r.   r   r   rB   rC   rv   )r   r   d1rG   r   r   r   test_full_format_converters  s*    

"z*TestTimedeltas.test_full_format_convertersc                 C   s"   t d}t|}||kstd S )Nz1 days 10:11:12.0123456)r   r$   Zround_trip_pickler   )r   r   Zv_pr   r   r   test_pickle  s    
zTestTimedeltas.test_picklec                 C   s   t dd}tdd}t|t|ks(t|di}|| dks@tdd tdD }tdd	 |D shtt dd
}t|t| kstd S )Nr4   rW   r|   ro   c                 S   s    g | ]}t d dt |d qS )r4   rz   r|   )r   )rT   rh   r   r   r   rU     s     z?TestTimedeltas.test_timedelta_hash_equality.<locals>.<listcomp>   c                 s   s"   | ]}t |t | kV  qd S r1   )hashr,   )rT   r   r   r   r   	<genexpr>  s     z>TestTimedeltas.test_timedelta_hash_equality.<locals>.<genexpr>r+   )r   r   r   r   rr   allr,   )r   r   r   r   ZtdsZns_tdr   r   r   test_timedelta_hash_equality  s    


z+TestTimedeltas.test_timedelta_hash_equalityc              	   C   s  t t j}t t j}|jtd ks&t|jtjks6t|t dd tksLtd}t	j
t|d |t dd  W 5 Q R X t	j
t|d |t dd  W 5 Q R X t |jd d}|tkstt	j
t|d t |jd d W 5 Q R X t	j
t|d t |jd d W 5 Q R X d S )Nr4   r+   zint too (large|big) to convertr6   ro   )r   r[   r   r   r   r   r   r   r   rB   rC   r   )r   Zmin_tdZmax_tdrG   r   r   r   r   test_implementation_limits%  s     

z)TestTimedeltas.test_implementation_limitsc                 C   s   t d dkstt d dks(tt d dks<tt d dksPtt d d d	k shtdt d  d	k std S )
NZ30Sg      >@0g        z-2Sg       z5.324SgK@g#B;)r   r%   r   rx   r   r   r   test_total_seconds_precisionB  s    z+TestTimedeltas.test_total_seconds_precisionc                 C   s   t ddjdkstt dddjdks*tt dddjdks@tt ddd	jd
ksVtt dddjdksltt dddjdkstt dddjdkstd S )Nr4   r|   rW      r>   r5   r   )r>   r8   r]   )r>   r?   r`   )r>   r9   rb   )r>   r@   rf   )r>   rA   ri   )r   Zresolution_stringr   rx   r   r   r   test_resolution_stringK  s    z%TestTimedeltas.test_resolution_stringc                 C   s@   t ddd}|j}|t ddks$tt j}|t ddks<td S )N      r   r4   )rA   )r   
resolutionr   )r   r   r"   r   r   r   test_resolution_deprecatedT  s
    z)TestTimedeltas.test_resolution_deprecatedN))r   r   r   rB   markparametrizer#   r*   r0   rI   rJ   rQ   r&   arraylistpdZIndexrs   rw   ry   r}   r~   r   r   r   r   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   &   s   
	J	.?S

	

 $2		r   zvalue, expectedZ10STz-10Sr   r+   r   Fr   c                 C   s   t | |kstd S r1   )boolr   )r   r!   r   r   r   test_truthiness`  s    r   c                  C   sZ   t ddd} | jd }|| j7 }|d9 }|| j7 }|d9 }|| j7 }| j}||ksVtd S )Nl   ?2\BT, r+   r   iQ r   r   )r   r>   r?   r@   rA   r   r   )r   r"   r!   r   r   r   "test_timedelta_attribute_precisionq  s    



r   )__doc__datetimer   Znumpyr&   rB   Zpandas._libsr   Zpandas._libs.tslibsr   r   Zpandasr   r   r   r   r	   Zpandas._testingZ_testingr$   r
   r   r   r   r   r   r   r   r   r   <module>   s6       >



