U
    NZfC                     @   s  d dl mZ 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 dd Zd	d
 Zdd Zdd Zdd Zdd Zejdedddddddd ejdejejejejejejgdd Z ejdd d!d"d#d$d%d&d'd(d)d*gd+d, Z!d-d. Z"ejd/d0d1d2d3d4d5gd6d7 Z#ejd/d8d9d:d;d<gd=d> Z$ejd?d@edAdBdCdDdDdEdFfdGedHdBdCdDdDdEdFfdIedJdEdKdLdMfdNedOdPfdQedDdRfdSedTdUfdVedTdWfdXedTdYdZdZdMfd[edTd\fd]ed d\fd^ed_d d`fdaedTdbfdcedTdTddfdeed_dbfdfedgd\fdhedTdbfdiedHdCdjfdkedHdldjfdmedAdldjfgdndo Z%ejdpdqdrdsdtdudvdwgdxdy Z&ejdzed{dPd|fedTdTdTdTdTdTdTdTd}d~fedTdRedTdP dfedTdRedTdP dfedTdRdLeddP  dfgdd Z'dd Z(dd Z)dd Z*ejdedde+dffedde+dffedddCgde+dffgdd Z,ejddd dD dd Z-dd Z.dd Z/dd Z0dS )    )	timedelta)productN)OutOfBoundsTimedelta)NpyDatetimeUnit)NaT	Timedeltaoffsetsto_timedeltac                	   C   sP   t jtdd tddd W 5 Q R X t jtdd tddd W 5 Q R X d S )Nzwithout overflowmatch     NZoWunitg NgmC)pytestraisesr   r    r   r   S/tmp/pip-unpacked-wheel-nbcvw55c/pandas/tests/scalar/timedelta/test_constructors.py'test_construct_with_weeks_unit_overflow   s    r   c               	   C   s~   t dd} tjtdd t| dd W 5 Q R X tjtdd t| dd W 5 Q R X tjtdd t|  W 5 Q R X d S )Nl    J.mhz123456789000000000 hoursr
   Zpsr   ns)nptimedelta64r   r   r   r   )objr   r   r   "test_construct_from_td64_with_unit   s    r   c                  C   s   t dd} t| }|j| dks(t|jtjj	ks:tt dd}t|}|jtj
j	ks`t||kslt|jdksztt dd}t|}| dkst|jtjj	kstd S )	Ni90  msi8i  Dr   usl    J))r   r   r   _valueviewAssertionError_cresor   	NPY_FR_msvalueNPY_FR_sdaystotal_seconds	NPY_FR_us)r   tdobj2td2Zobj3Ztd3r   r   r    test_from_td64_retain_resolution*   s    r,   c                  C   s:   t ddd} t| }| | ks$t|jtjjks6td S )N      )r&   minutes)r   r   Zto_pytimedeltar!   r"   r   r(   r$   )r)   resultr   r   r   test_from_pytimedelta_us_reso@   s    r1   c                  C   s   t  } t| jtjjkstt  } t| jtj	jks<tt 
 } t| jtjjksZtt  } t| jtjjksxtt  } t| jtjjkstt  } t| jtjjkstt  } t| jtjjkstd S N)r   ZNanor   r"   r   Z	NPY_FR_nsr$   r!   ZMicror(   ZMillir#   Secondr%   ZMinuteHourZDay)Ztickr   r   r   test_from_tick_resoH   s    r5   c               	   C   s  t dddd} tdddj| ks.ttdddj| ksDttdj| ksVttdd	j| ksjttdd	j| ks~t| t dd
dd7 } tdj| ksttdddj| ksttdddj| ksttdddj| ksttdjdkstdttdksttdjdks,tdttdksBttdtddksZttdtddksrt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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d0ks(ttd1tdd0ks@ttd2tdd0ksXttd3tdd0kspttd4td5ksttd6td7ksttd8td7ksttd9td7ksttd:tddd;ksttd<tddd;ksttd=tddddd>ksttd?tddddd> ks:ttd?tddddd> ksZttd@tdddddAdB ks|ttdCtddddDdAdB kstdE}t	j
t|dF tdG W 5 Q R X t	j
t|dF tdH W 5 Q R X dI}t	j
t|dF tdJ W 5 Q R X dK}t	j
t|dF t  W 5 Q R X dL}t	j
t|dF tdM W 5 Q R X dN}t	j
t|dF tddO W 5 Q R X t dd
ddt dPdQdd } tdRd
dj| kstttdStdSdkstttdStdSdkstttdStdSd%ks ttdT} tdT}|| ks>tttdStdUksZtdL}t	j
t|dF tdV W 5 Q R X d S )WN
   r   m8[ns]r   dr   g      $@z10 daysr&   sz10 days 00:00:10r&   secondsi'  )r&   millisecondsi )r&   microsecondsl   >P- z0 days 22:58:59.999850l   @B]? z1 days 10:11:12.001z0:00:00r   )hoursz00:00:00z-1:00:00   z	-01:00:00z1 hz1 hourz1 hrz1 hoursz-1 hoursz1 mr/   z1.5 mZ   r<   1 minutez	1 minutesz1 sz1 secondz	1 secondsz1 msr=   z1 milliz1 millisecondz1 usr>   u   1 µsz1 microsz1 microsecondz1.5 microsecondz00:00:00.000001500z1 nsz00:00:00.000000001z1 nanoz1 nanosecondz10 days 1 hourr&   r?   z10 days 1 hz10 days 1 h 1m 1sr&   r?   r/   r<   z-10 days 1 h 1m 1sz-10 days 1 h 1m 1s 3usr.   )r&   r?   r/   r<   r>   z-10 days 1 h 1.5m 1s 3us   'only leading negative signs are allowedr
   z-10 days -1 h 1.5m 1s 3usz10 days -1 h 1.5m 1s 3uszno units specifiedz3.1415zcannot construct a Timedeltazunit abbreviation w/o a numberZfoozMcannot construct a Timedelta from the passed arguments, allowed keywords are )dayi  r   g      %@   Z1Hz0 days, 02:00:00zfoo bar)r   r   astyper    r   r   r!   strr   r   r   
ValueErrorr	   r   r4   r3   )expectedmsgr0   r   r   r   test_construction`   s                      rR   itemr   r:   r   r   mr   r   )r&   r<   r>   r=   r/   r?   weeksnpdtypec                 C   s@   |\}}t d|dd}tf || dij|ks<td S )Nr@   r7   r   )r   r   rM   r    r   r   r!   )rV   rS   ZpykwargZnpkwargrP   r   r   r   #test_td_construction_with_np_dtypes   s    rW   valZ1sz-1sZ1usz-1usz1 dayz-1 dayz-23:59:59.999999z-1 days +23:59:59.999999z-1nsZ1nsz-23:59:59.999999999c                 C   s^   t | }t |j|kstt t||ks.tt |jdd|ksFtt | |ksZtd S )Nall)format)r   r   r!   rN   Z
_repr_base)rX   r)   r   r   r   test_td_from_repr_roundtrip   s
    r[   c               	   C   s   t djd } d}tjt|d t |  W 5 Q R X d}tjt|d t ddd W 5 Q R X t td	d
}|jtjj	ks~t
|jd	kst
d S )NZ1dayi3zCCannot cast 1742682816000000000000 from ns to 'ns' without overflowr
   z2Cannot cast 139993 from D to 'ns' without overflowi" r   r   i r9   )r   r   r   r   r   r   r"   r   r(   r$   r!   r&   )r$   rQ   r)   r   r   r   test_overflow_on_construction  s    r\   z	val, unit)i  M)i;  r   )i  r   )i ' r   )i)	rT   )l   }K r:   c              	   C   s   t | |}|dddk s$tt|}|dkrB|j|ksBt|jjdksRtd}tj	t
|d |d W 5 Q R X t|d	 |d	 kst|d
9 }|dddkstt|}d}tj	t
|d |d W 5 Q R X t|d	 |d	 kstd S )Nr7   r   r   r]   zm8[s]z:Cannot cast 1067\d\d days .* to unit='ns' without overflowr
   r   r@   z;Cannot cast -1067\d\d days .* to unit='ns' without overflow)r   r   rM   r    r!   r   asm8Zdtyper   r   r   as_unit)rX   r   td64r)   rQ   r+   r   r   r   &test_construction_out_of_bounds_td64ns!  s"    rb   )l    0
r]   )l    ~L{7r   )l     F\ r   )l     hH r   )l    rT   c              	   C   sN   t | |}tjtt|d t| W 5 Q R X t|d |d ksJtd S )Nr
   i ʚ;)r   r   r   r   r   rN   r   r!   )rX   r   ra   r   r   r   %test_construction_out_of_bounds_td64sM  s    rc   zfmt,expzP6DT0H50M3.010010012S   2   r.   r6      )r&   r/   r<   r=   r>   nanosecondszP-6DT0H50M3.010010012SiZP4DT12H30M5Sr-         rH   zP0DT0H0M0.000000123S{   rg   zP0DT0H0M0.00001SrF   zP0DT0H0M0.001Sr@   rE   Z
P0DT0H1M0SrA   ZP1DT25H61M61S   =   ZPT1SrC   ZPT0SZP1WT0S   r;   ZP1Dr9   ZP1DT1HrG   ZP1WZPT300Si,  ZP1DT0H0M00000000000SzPT-6H3M)r?   r/   z-PT6H3Mz	-PT-6H+3Mc                 C   s   t | |kstd S r2   r   r!   )fmtexpr   r   r   test_iso_constructor`  s    -rs   rq   ZPPPPPPPPPPPPZPDTHMSZP0DT999H999M999SzP1DT0H0M0.0000000000000SzP1DT0H0M0.SPz-Pc              	   C   s0   d|  }t jt|d t|  W 5 Q R X d S )Nz#Invalid ISO 8601 Duration format - r
   r   r   rO   r   )rq   rQ   r   r   r   test_iso_constructor_raises  s    
rv   zconstructed_td, conversiond   Z100ns)r&   r?   r/   rU   r<   r=   r>   rg   l   )D^_ Z1us1nsZ999nsZ990nsc                 C   s   | t |kstd S r2   rp   )Zconstructed_td
conversionr   r   r   "test_td_constructor_on_nanoseconds  s    rz   c               	   C   s,   d} t jt| d tdd W 5 Q R X d S )Nz1Invalid type <class 'str'>. Must be int or float.r
   abcrk   )r   r   	TypeErrorr   )rQ   r   r   r   test_td_constructor_value_error  s    r}   c                  C   s(   t tdd} t | }|| ks$td S )Nr@   r:   )r   r   r   r!   )rP   r0   r   r   r   #test_timedelta_constructor_identity  s    r~   c               	   C   s8   t dd} d}tjt|d t | dd W 5 Q R X d S )Nr@   r9   zRCannot pass both a Timedelta input and timedelta keyword arguments, got \['days'\]r
   rL   )r   r   r   rO   )r)   rQ   r   r   r   (test_timedelta_pass_td_and_kwargs_raises  s
    
r   z%constructor, value, unit, expectationZ10szunit must not be specified1rL   c              	   C   s2   |\}}t j||d | ||d}W 5 Q R X d S )Nr
   r   )r   r   )constructorr$   r   Zexpectationrr   r   _r   r   r   test_string_with_unit  s    	r   r$   c                 C   s(   g | ] }t d |dD ]}d|qqS )z+-, )repeat )r   join).0Z
repetitionelementsr   r   r   
<listcomp>  s    r   )r@   rL   c              	   C   s6   | dkrdnd}t jt|d t|  W 5 Q R X d S )Nz--zsymbols w/o a numberrJ   r
   ru   )r$   rQ   r   r   r   test_string_without_numbers  s    r   c                  C   s    t dd} t| tkstd S )Nr   r   )r   r   r   r   r!   )Znatr   r   r   test_timedelta_new_npnat  s    r   c                  C   s*   G dd dt } | d}t|| s&td S )Nc                   @   s   e Zd ZdS )z2test_subclass_respected.<locals>.MyCustomTimedeltaN)__name__
__module____qualname__r   r   r   r   MyCustomTimedelta  s   r   rD   )r   
isinstancer!   )r   r)   r   r   r   test_subclass_respected  s    r   c               	   C   st   t ddddj} | dks td}t dddd }tjt|d |j W 5 Q R X |jd	} | d
ksptd S )Nr6   r   r   r:   l     ,Z6G zCannot convert Timedelta to nanoseconds without overflow. Use `.asm8.view\('i8'\)` to cast represent Timedelta in its own unit \(here, s\).$i  r
   r   l    `;P )	r   r`   r$   r!   r   r   OverflowErrorr_   r    )r0   rQ   r)   r   r   r   test_non_nano_value  s    r   )1datetimer   	itertoolsr   Znumpyr   r   Zpandas._libs.tslibsr   Zpandas._libs.tslibs.dtypesr   Zpandasr   r   r   r	   r   r   r,   r1   r5   rR   markZparametrizelistitemsZint64Zint32Zint16Zfloat64Zfloat32Zfloat16rW   r[   r\   rb   rc   rs   rv   rz   r}   r~   r   rO   r   r   r   r   r   r   r   r   r   <module>   sH  	} 


!

	,





	