U
    c4                     @   sV  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
mZm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(d)d*d+d,d-d.gd/d0 Zejd1d2e
d3d4d5d6d6d7d8fd9e
d:d4d5d6d6d7d8fd;e
d<d7d=d>d?fd@e
dAdBfdCe
d6dDfdEe
dFdGfdHe
dFdIfdJe
dFdKdLdLd?fdMe
dFdNfdOe
d dNfdPe
dQd dRfdSe
dFdTfdUe
dFdFdVfdWe
dQdTfdXe
dYdNfdZe
dFdTfd[e
d:d5d\fd]e
d:d^d\fd_e
d3d^d\fgd`da Zejdbdcdddedfdgdhdigdjdk Zejdle
dmdBdnfe
dFdFdFdFdFdFdFdFdodpfe
dFdDe
dFdB dqfe
dFdDe
dFdB drfe
dFdDd>e
dsdB  dtfgdudv Z dwdx Z!dydz Z"ejd{e
d|de#d}ffed|de#d}ffed~dd5gde#d}ffgdd Z$ejddd dD dd Z%dd Z&dS )    )	timedelta)productN)OutOfBoundsTimedelta)	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matchl     NZoWunitg NgmC)pytestraisesr   r    r   r   S/tmp/pip-unpacked-wheel-g7fro6k3/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 )Ni[hz123456789 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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
   Dm8[ns]i8dr   g      $@z10 daysdays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minutesz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 3us   )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  msg      %@   Z1Hz0 days, 02:00:00zfoo bar)r   r   astypeviewr   valueAssertionErrorstrr   r   r   
ValueErrorr   r   ZHourZSecond)expectedmsgresultr   r   r   test_construction(   s                      r>   itemr   r   usr3   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%   r   r   )r   r   r5   r6   r   r7   r8   )rC   r?   ZpykwargZnpkwargr;   r   r   r   #test_td_construction_with_np_dtypes   s    rD   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   r7   r8   r9   Z
_repr_base)rE   tdr   r   r   test_td_from_repr_roundtrip   s
    rI   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 d	}tjt|d t td
d W 5 Q R X d S )NZ1dayi3zCCannot cast 1742682816000000000000 from ns to 'ns' without overflowr   z2Cannot cast 139993 from D to 'ns' without overflowi" r   r   z<Cannot cast 259987 days, 0:00:00 to unit=ns without overflowi r   )r   r7   r   r   r   r   r7   r<   r   r   r   test_overflow_on_construction   s    rK   zval, unit, name)i  Mz months)i;  r
   z weeks)i  r   z days)i ' r   z hours)i)	rA   z minutes)l   }K r   z secondsc              	   C   s   t | |}|dddk s$tt| | }tjt|d t	| W 5 Q R X t	|d |d ksjt|d9 }|dddksttjtd| d t	| W 5 Q R X t	|d |d kstd S )Nr   r   r   r   r%   -)
r   r   r5   r6   r8   r9   r   r   r   r   )rE   r   nameZtd64r<   r   r   r   $test_construction_out_of_bounds_td64   s    rP   zfmt,expzP6DT0H50M3.010010012S   2   r/   r      )r   r'   r!   r"   r#   nanosecondszP-6DT0H50M3.010010012SiZP4DT12H30M5S         r.   zP0DT0H0M0.000000123S{   rT   zP0DT0H0M0.00001Sr,   zP0DT0H0M0.001Sr%   r+   Z
P0DT0H1M0Sr&   ZP1DT25H61M61S   =   ZPT1Sr)   ZPT0SZP1WT0S   r    ZP1Dr   ZP1DT1Hr-   ZP1WZPT300Si,  ZP1DT0H0M00000000000SzPT-6H3M)r$   r'   z-PT6H3Mz	-PT-6H+3Mc                 C   s   t | |kstd S Nr   r8   )fmtexpr   r   r   test_iso_constructor  s    -rb   r`   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   r:   r   )r`   r<   r   r   r   test_iso_constructor_raises<  s    
re   zconstructed_td, conversiond   Z100ns)r   r$   r'   rB   r!   r"   r#   rT   l   )D^_ Z1us1nsZ999nsZ990nsc                 C   s   | t |kstd S r^   r_   )Zconstructed_td
conversionr   r   r   "test_td_constructor_on_nanosecondsN  s    ri   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   abcrY   )r   r   	TypeErrorr   )r<   r   r   r   test_td_constructor_value_errori  s    rl   c                  C   s(   t tdd} t | }|| ks$td S )Nr%   r   )r   r   r   r8   )r;   r=   r   r   r   #test_timedelta_constructor_identityo  s    rm   z%constructor, value, unit, expectationZ10szunit must not be specified1r4   c              	   C   s2   |\}}t j||d | ||d}W 5 Q R X d S )Nr   r   )r   r   )constructorr7   r   Zexpectationra   r	   _r   r   r   test_string_with_unitv  s    	rq   r7   c                 C   s(   g | ] }t d |dD ]}d|qqS )z+-, )repeat )r   join).0Z
repetitionelementsr   r   r   
<listcomp>  s    rw   )r%   r4   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 numberr1   r   rd   rJ   r   r   r   test_string_without_numbers  s    rx   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|   r*   )r   
isinstancer8   )r|   rH   r   r   r   test_subclass_respected  s    r~   )'datetimer   	itertoolsr   Znumpyr   r   Zpandas._libs.tslibsr   Zpandasr   r   r   r   r   r>   markZparametrizelistitemsZint64Zint32Zint16Zfloat64Zfloat32Zfloat16rD   rI   rK   rP   rb   re   ri   rl   rm   r:   rq   rx   r~   r   r   r   r   <module>   s&  	} 

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