U
    +ifV                     @   s  d Z ddlmZ ddlmZ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     )	timedelta)given
strategiesN)lib)NaTiNaT)	TimedeltaTimedeltaIndexoffsetsto_timedeltac                   @   s   e Zd Zdd Zdd ZdS )TestTimedeltaUnaryOpsc              	   C   s   t ddd}d}tjt|d |  W 5 Q R X tjt|d |   W 5 Q R X d}tjt|d |   W 5 Q R X d S )N
   dunitzbad operand type for unary ~matchz0ufunc 'invert' not supported for the input types)r   pytestraises	TypeErrorto_pytimedeltato_timedelta64)selftdmsgZumsg r   _/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/scalar/timedelta/test_timedelta.pytest_invert   s    z!TestTimedeltaUnaryOps.test_invertc                 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 )Nr   r   r   z-10dZ10d)r   AssertionErrorabsr   r   r   r   r   test_unary_ops+   s    z$TestTimedeltaUnaryOps.test_unary_opsN)__name__
__module____qualname__r   r"   r   r   r   r   r      s   r   c                   @   sb  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ejedU ejdVdWejdXej ej!ej"gdYdZ Z#d[d\ Z$d]d^ Z%d_d` Z&dadb Z'dcdd Z(dedf Z)dgdh Z*didj Z+dkdl Z,dmdn Z-doS )p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_scalarI   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   r   r   
isinstancer   r1   timedelta64r*   r   )r   r   ZpydtZtd64r   r   r   test_conversionR   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)r7   intr   )r*   r   r   r   checkg   s    z)TestTimedeltas.test_fields.<locals>.checkz1 days, 10:11:12   i@  r   z('Timedelta' object has no attribute '{}'hoursr   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nanosecondsr   r   AttributeErrorformatr>   r?   r@   r   r    r+   r*   
components)r   r<   r4   r   r   tupr   r   r   test_fieldsf   st    











zTestTimedeltas.test_fieldsc                 C   s    t ddd}td|kstd S )Nr=   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int64r2   )r   to_numpyZ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>)rU   wc                 C   s   g | ]}|d fqS )Dr   rV   r   r   r   rX      s     )rZ   r   rE   dayZDaysZDayc                 C   s   g | ]}|d fqS )mr   rV   r   r   r   rX      s   )	r\   minuteminr?   tZMinuteZMinZMinutesTc                 C   s   g | ]}|d fqS )r)   r   rV   r   r   r   rX      s   )r)   rF   secsecondSZSecondsZSecZSecondc                 C   s   g | ]}|d fqS )r(   r   rV   r   r   r   rX      s   )r(   r@   ZmillisecondZmilliZmillislZMSZMillisecondsZMillisecondZMilliZMillisLc                 C   s   g | ]}|d fqS )r'   r   rV   r   r   r   rX      s   )r'   rG   microsecondmicromicrosuZUSZMicrosecondsZMicrosecondZMicroZMicrosUc                 C   s   g | ]}|d fqS )r6   r   rV   r   r   r   rX      s   )r6   rH   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   )r1   r8   )rW   i)np_unitr   r   rX     s     z3TestTimedeltas.test_unit_parser.<locals>.<listcomp>   r   c                    s   g | ]}|   qS r   r   )rW   xr   r   r   rX     s        ztimedelta64[ns]2)r	   r1   Zarangetolistr   ranger/   Zassert_index_equalr   r8   rS   r   )r   r   rp   rn   r,   r-   Zstr_reprr   )rp   r   r   test_unit_parser   s*    WzTestTimedeltas.test_unit_parserr   YyrO   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 supportedr   r   r=   rs   )r   r   
ValueErrorr   r   )r   r   r   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   r6   r   r   r'   r(   r)   r   rZ   )r   r1   r8   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 )	Nr=   rF   r)   m8[ns])rG   r'   rE   rZ   )r   r   r1   r8   rS   r   r|   r   r   r   test_timedelta_conversionsE  s    

z)TestTimedeltas.test_timedelta_conversionsc              	   C   sn   t d}| | kstd}tjt|d |d W 5 Q R X tjt|d |jdd W 5 Q R X d S )NZ10m7sz$dtype and copy arguments are ignoredr   zm8[s]T)copy)r   r   rQ   r   r   r   rz   )r   r   r   r   r   r   test_to_numpy_aliasN  s    z"TestTimedeltas.test_to_numpy_aliasz
freq,s1,s2rm   1 days 02:34:56.789123456-1 days 02:34:56.789123456rj   z1 days 02:34:56.789123000z-1 days 02:34:56.789123000re   z1 days 02:34:56.789000000z-1 days 02:34:56.789000000rc   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t2r1r2r   r   r   
test_roundZ  s    

zTestTimedeltas.test_roundc              
   C   s>   t d}dD ],\}}tjt|d || W 5 Q R X qd S )Nr   ))rx   z,<YearEnd: month=12> is a non-fixed frequency)rO   z#<MonthEnd> is a non-fixed frequency)ZfoobarzInvalid frequency: foobarr   )r   r   r   rz   r   )r   r   r   r   r   r   r   test_round_invalid  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)   r=   r~   ii2zvalue too larger   |z)Python int too large to convert to C longzint too big to convert)
r   r^   ceilr   maxfloorr   r   OverflowErrorjoin)r   r-   r,   r   r   r   r    test_round_implementation_bounds  s    z/TestTimedeltas.test_round_implementation_boundsr=   )Z	min_valueZ	max_value)valmethodc                 C   s  t |}t|}||d|ks$t||d}d}t || j|k sJt|j| dks\t||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 st|j| dkst||d}d}t || j|k s.t|j| dksBt||d}d}t || j|k sjt|j| dks~td S )Nr6   r'     r   r(   @B r)    ʚ;r^   l    Xp7 hl     qarZ   l     "R: )r1   rP   r   r   r    r*   )r   r   r   r   resrk   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 )Nrq   r   r   r=   r2   )	r   rv   r
   ZHourr   floatr1   r2   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   r7   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   rS   r   r   r   r   conv  s    z9TestTimedeltas.test_short_format_converters.<locals>.conv10r   r6   Z10ns100d   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1dr=   rZ   z-1dZ1DZ10DZ100DZ1000DZ10000Dz 10000D z
 - 10000D zinvalid unit abbreviationr   Z1foozunit abbreviation w/o a numberZfoo)r   r1   r8   r   r   r   rz   )r   r   r   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>.convr=   rZ   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 unitsr   z- 1days, 00)r1   r8   r   r   r   r   rz   )r   r   Zd1r   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 )Nr=   rZ   r   rs   c                 S   s    g | ]}t d dt |d qS )r=   r~   r   )r   )rW   rl   r   r   r   rX   8  s     z?TestTimedeltas.test_timedelta_hash_equality.<locals>.<listcomp>   c                 s   s"   | ]}t |t | kV  qd S r:   )hashr   )rW   r   r   r   r   	<genexpr>9  s     z>TestTimedeltas.test_timedelta_hash_equality.<locals>.<genexpr>r6   )r   r   r   r   rv   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 )Nr=   r6   zint too (large|big) to convertr   rs   )r   r^   r   r*   r   r   r   i8maxr   r   r   r   )r   Zmin_tdZmax_tdr   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   r0   r   r|   r   r   r   test_total_seconds_precision\  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 )Nr=   r   rZ      rE   r>   r   )rE   r?   r`   )rE   rF   rc   )rE   r@   re   )rE   rG   rj   )rE   rH   rm   )r   Zresolution_stringr   r|   r   r   r   test_resolution_stringe  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   r=   )rH   )r   
resolutionr   )r   r   r-   r   r   r   test_resolution_deprecatedn  s
    z)TestTimedeltas.test_resolution_deprecatedN).r#   r$   r%   r   markparametrizer.   r5   r9   rM   rN   rT   r1   arraylistpdIndexrw   r{   r}   r   r   r   r   r   r   r   stZintegersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r&   9   s   
	J	.?S

	

 $2		r&   zvalue, expectedZ10STz-10Sr   r6   r   Fr   c                 C   s   t | |kstd S r:   )boolr   )r*   r,   r   r   r   test_truthinessz  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, r6   r   iQ r   r   )r   rE   rF   rG   rH   r*   r   )r   r-   r,   r   r   r   "test_timedelta_attribute_precision  s    



r   )__doc__datetimer   Z
hypothesisr   r   r   numpyr1   r   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>   s8       E



