B
    u9a                @   sz  d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlZddlmZmZ ddlmZ dd	lm Z  dd
lm!Z! ddlm"Z" ddlm#Z#mZ ddl!Z$ddl%Z%ddl&Z&e	j'e	j(hZ)dd e*e	j+d D Z,dddi g dfZ-e.dZ/e.dZ0G dd dej1Z2G dd de Z3G dd de3Z4G dd de Z5G dd dej1Z6G d d! d!ej1Z7G d"d# d#Z8G d$d% d%e8ej1Z9G d&d' d'ej1Z:G d(d) d)e#Z;G d*d+ d+e8ej1Z<G d,d- d-eZ=G d.d/ d/e<Z>G d0d1 d1e>Z?G d2d3 d3e!Z@G d4d5 d5e8ej1ZAG d6d7 d7ZBG d8d9 d9eAeBej1ZCG d:d; d;e>eBej1ZDd<d= ZEedZFedd>ZGedd?ZHedd@ZIeddAddBZJedddCdZKG dDdE dEe ZLeLdFdGdHdIZMeLdJdKdLdMZNeLdNdOdPdQZOeLdRdSdTdUZPe3ddVdZQe3dWdXdZRG dYdZ dZej1ZSG d[d\ d\ej1ZTG d]d^ d^e ZUG d_d` d`eUZVeVdFdadHdIZWeVdJdbdLdMZXeVdNdcdPdQZYeVdRdddTdUZZG dedf dfe Z[G dgdh dhej1Z\eddZ]didj Z^G dkdl dle Z_G dmdn dnej1Z`G dodp dpejaZbG dqdr dre`ZcG dsdt dtej1Zddudv Zeefdwkrveg  dS )xzTTest date/time type.

See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
    )is_resource_enabledN)array)	ltlegtgeeqnetruedivfloordivmod)support)MINYEARMAXYEAR)	timedelta)tzinfo)time)timezone)datedatetimec             C   s   g | ]}t t |fqS  )pickle).0protor   r   $/usr/lib/python3.7/datetimetester.py
<listcomp>+   s   r      
   g     @A@abcr   infnanc               @   s$   e Zd Zdd Zdd Zdd ZdS )
TestModulec             C   s$   t }| |jd | |jd d S )Nr   i'  )datetime_moduleassertEqualr   r   )selfr   r   r   r   test_constants=   s    zTestModule.test_constantsc             C   sd   d| j jkr| d t}tdd t|D }tddddd	d
ddddg
}| || tg  d S )NZ_Purez"Only run for Fast C implementationc             s   s&   | ]}| d s|d s|V  qdS )__N)
startswithendswith)r   namer   r   r   	<genexpr>G   s    z/TestModule.test_name_cleanup.<locals>.<genexpr>r   r   r   r   Zdatetime_CAPIr   r   r   r   sys)	__class____name__skipTestr"   setdirr#   )r$   r   namesZallowedr   r   r   test_name_cleanupB   s    


zTestModule.test_name_cleanupc             C   s  d| j jkr| d t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d	 | |ddd	 | |ddd | |ddd | |ddd	 d S )N_Fastz'Only run for Pure Python implementationi            ir         i)r,   r-   r.   r"   Z_divide_and_roundr#   )r$   Zdarr   r   r   test_divide_and_roundN   s"    
z TestModule.test_divide_and_roundN)r-   
__module____qualname__r%   r2   r=   r   r   r   r   r!   ;   s   r!   c               @   s6   e Zd ZdddZdd Zdd Zdd	 Zd
d ZdS )FixedOffset*   c             C   s>   t |trt|d}t |tr(t|d}|| _|| _|| _d S )N)minutes)
isinstanceintr   _FixedOffset__offset_FixedOffset__name_FixedOffset__dstoffset)r$   offsetr)   	dstoffsetr   r   r   __init__o   s    



zFixedOffset.__init__c             C   s
   | j  S )N)rF   lower)r$   r   r   r   __repr__w   s    zFixedOffset.__repr__c             C   s   | j S )N)rE   )r$   dtr   r   r   	utcoffsety   s    zFixedOffset.utcoffsetc             C   s   | j S )N)rF   )r$   rM   r   r   r   tzname{   s    zFixedOffset.tznamec             C   s   | j S )N)rG   )r$   rM   r   r   r   dst}   s    zFixedOffset.dstN)rA   )r-   r>   r?   rJ   rL   rN   rO   rP   r   r   r   r   r@   m   s
   
r@   c               @   s   e Zd ZdddZdd ZdS )PicklableFixedOffsetNc             C   s   t | ||| d S )N)r@   rJ   )r$   rH   r)   rI   r   r   r   rJ      s    zPicklableFixedOffset.__init__c             C   s   | j S )N)__dict__)r$   r   r   r   __getstate__   s    z!PicklableFixedOffset.__getstate__)NNN)r-   r>   r?   rJ   rS   r   r   r   r   rQ      s   
rQ   c               @   s   e Zd Zdd ZdS )_TZInfoc             C   s   t   S )N)random)r$   r"   r   r   r   rN      s    z_TZInfo.utcoffsetN)r-   r>   r?   rN   r   r   r   r   rT      s   rT   c               @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )
TestTZInfoc          	   C   s>   t  }tddddddd|}| t |  W d Q R X d S )Ni  r8             r5   r   )rT   r   assertRaises	TypeErrorrN   )r$   Ztz1dt1r   r   r   test_refcnt_crash_bug_22044   s    z&TestTZInfo.test_refcnt_crash_bug_22044c             C   s@   t  }tj}| t|j| | t|j| | t|j| d S )N)r   r   maxrZ   NotImplementedErrorrO   rN   rP   )r$   ZuselessrM   r   r   r   test_non_abstractness   s
    z TestTZInfo.test_non_abstractnessc             C   sr   G dd dt }| t|t  |dd}| |t  t }| t|j| | t|j	| | t|j
| d S )Nc               @   s   e Zd Zdd ZdS )z9TestTZInfo.test_subclass_must_override.<locals>.NotEnoughc             S   s   || _ || _d S )N)Z_NotEnough__offsetZ_NotEnough__name)r$   rH   r)   r   r   r   rJ      s    zBTestTZInfo.test_subclass_must_override.<locals>.NotEnough.__init__N)r-   r>   r?   rJ   r   r   r   r   	NotEnough   s   ra   r5   ZNotByALongShot)r   
assertTrue
issubclassassertIsInstancer   nowrZ   r_   rO   rN   rP   )r$   ra   r	   rM   r   r   r   test_subclass_must_override   s    
z&TestTZInfo.test_subclass_must_overridec             C   sr   t dd}| |t xVt d fD ]F}| ||tdd | ||d | |	|tdd q$W d S )Nr5   ZThree)rB   rA   )
r@   rd   r   r   re   r#   rN   r   rO   rP   )r$   forM   r   r   r   test_normal   s    
zTestTZInfo.test_normalc             C   sX   t t }| t|t  x8tD ]0\}}}|||}||}| t|t  q W d S )N)r   __new__assertIstypepickle_choicesdumpsloads)r$   origpickler	unpicklerr   greenderivedr   r   r   test_pickling_base   s    

zTestTZInfo.test_pickling_basec             C   s   t dd}xt|dfft|fft|dffgD ]\}}|| }|d }| |t | t|| | |	d | | |d | xht
D ]`\}}}|||}	||	}
| |
t | t|
| | |
	d | | |
d | qW q,W d S )Ni)rB   cookieEST)r   rQ   r   rO   rd   r   rj   rk   r#   rN   rl   rm   rn   )r$   rH   Zotypeargsro   Zonamerp   rq   r   rr   rs   r   r   r   test_pickling_subclass   s$    



z!TestTZInfo.test_pickling_subclassc                s`   t dd  G  fdddt}| }tddddd|d	}||}| ||  | d S )
Nr   )hoursc                   s0   e Zd ZdZfddZ fddZdd ZdS )	z0TestTZInfo.test_issue23600.<locals>.UKSummerTimez~Simple time zone which pretends to always be in summer time, since
                that's what shows the failure.
            c                s    S )Nr   )r$   rM   )	DSTOFFSETr   r   rN      s    z:TestTZInfo.test_issue23600.<locals>.UKSummerTime.utcoffsetc                s    S )Nr   )r$   rM   )DSTDIFFr   r   rP      s    z4TestTZInfo.test_issue23600.<locals>.UKSummerTime.dstc             S   s   dS )NUKSummerTimer   )r$   rM   r   r   r   rO      s    z7TestTZInfo.test_issue23600.<locals>.UKSummerTime.tznameN)r-   r>   r?   __doc__rN   rP   rO   r   )r{   rz   r   r   r|      s   r|   i  r:         )r   )r   r   r   fromutcr#   rN   )r$   r|   tzutr   )r{   rz   r   test_issue23600   s    
zTestTZInfo.test_issue23600N)
r-   r>   r?   r]   r`   rf   rh   rt   rx   r   r   r   r   r   rV      s   
rV   c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestTimeZonec             C   s8   t tddd| _t tdd d| _tddd| _d S )Ng      #@)ry   ACDTr6   rv   i  r   )r   r   r   rv   r   DT)r$   r   r   r   setUp   s    zTestTimeZone.setUpc             C   s<   x6| j | jtjtjtjgD ]}| t||d  qW d S )N)	r   rv   r   utcminr^   r#   strrO   )r$   r   r   r   r   test_str   s    zTestTimeZone.test_strc             C   sB   t }x8| j| jtjtjtjgD ]}t|}| |t	| qW d S )N)
r"   r   rv   r   r   r   r^   reprr#   eval)r$   r   r   Ztzrepr   r   r   	test_repr   s
    zTestTimeZone.test_reprc             C   sN   t ddd}| tjd t | tjd |  | tjd | d S )N   ;   )ry   rB   )r   r#   r   r   rN   ZEROr   r^   )r$   limitr   r   r   test_class_members   s    zTestTimeZone.test_class_membersc          	   C   sd  |  tjttd | tjttdd | tjttdd x@tddtddgD ](}t|}| |d tdd d q\W x8tddtdgD ]"}| t	t| | t	t|  qW | t
 td  W d Q R X | t
 td W d Q R X | t
 ttd  W d Q R X | t
 ttd W d Q R X | t
 ttdd	 W d Q R X d S )
Nr   UTCr   )microseconds)seconds)rB   rA   ABCextra)rj   r   r   r   assertIsNotr#   assertNotEqualrN   rZ   
ValueErrorr[   r   )r$   Z	subminuter   Zinvalidr   r   r   test_constructor  s&          zTestTimeZone.test_constructorc             C   s    |  tjt |  | jt d S )N)rd   r   r   r   rv   )r$   r   r   r   test_inheritance  s    zTestTimeZone.test_inheritancec          	   C   s   | j }xDdD ]<}|t }| |t|| | | t| | qW | t | jd W d Q R X | t | jd W d Q R X d S )N)r   g      ?r    r6   )r   HOURr#   r   rN   rZ   r[   rv   )r$   dummyhrH   r   r   r   test_utcoffset  s    
  zTestTimeZone.test_utcoffsetc          	   C   s\   |  tj| j | t | jd W d Q R X | t | jd W d Q R X d S )Nr   r6   )assertIsNoner   r   rP   r   rZ   r[   rv   )r$   r   r   r   test_dst&  s
      zTestTimeZone.test_dstc          	   C   sn  |  dtjd  |  dttd  |  dtdt d  |  dtdt d  |  dttddd  |  d	tdt d	d  |  d
ttd
d  |  dttddd  |  dttdd d  |  dttdddd  |  dttddd d  | t | j	d W d Q R X | t | j	d W d Q R X d S )Nr   z	UTC-05:00z	UTC+09:30g      #@z	UTC-00:01)rB   ZXYZu   zUTC+01:06:40r   i  zUTC-01:06:40zUTC+01:06:40.000001r   zUTC-01:06:40.000001r   r6   )
r#   r   r   rO   r   r   r   rZ   r[   rv   )r$   r   r   r   test_tzname,  s$      zTestTimeZone.test_tznamec          	   C   s   |  t tj| j W d Q R X |  t tjd W d Q R X x\| j| jt	gD ]J}| jj
|d}||}| || || | || jj
tjd qVW d S )Nznot datetime)r   )rZ   r   r   r   r   r   r[   rv   r   Easternreplacer#   rN   )r$   r   Zutctimelocalr   r   r   test_fromutcB  s    
zTestTimeZone.test_fromutcc          	   C   s   |  tttt | tttt | tdt tdt d | t ttttk  W d Q R X | tttth | ttd k | 	ttd k d S )Nr   rv   )
r   r   r   r   r#   rZ   r[   assertInrb   assertFalse)r$   r   r   r   test_comparisonN  s     zTestTimeZone.test_comparisonc             C   s   t ddd}xrtjtjtjgD ]^}| |||j|d  | |||j|d  | |	||j|d	  qW d S )Nr   )r   )
r   r   r   r^   r   r#   rO   r   rN   rP   )r$   r   r   r   r   r   test_aware_datetimeW  s    z TestTimeZone.test_aware_datetimec             C   s   xN| j | jtjtjfD ]6}x0tD ](\}}}||||}| || q W qW tj	}x0tD ](\}}}||||}| 
|| q\W d S )N)r   rv   r   r   r^   rl   rn   rm   r#   r   rj   )r$   r   rp   rq   r   tz_copyr   r   r   test_pickleb  s    zTestTimeZone.test_picklec             C   sT   x2| j | jtjtjfD ]}t|}| || qW tj}t|}| || d S )N)	r   rv   r   r   r^   copyr#   r   rj   )r$   r   r   r   r   r   	test_copyl  s    

zTestTimeZone.test_copyc             C   sT   x2| j | jtjtjfD ]}t|}| || qW tj}t|}| 	|| d S )N)
r   rv   r   r   r^   r   Zdeepcopyr#   r   rj   )r$   r   r   r   r   r   test_deepcopyt  s    

zTestTimeZone.test_deepcopyN)r-   r>   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   	
r   c               @   s   e Zd Zdd Zdd ZdS )HarmlessMixedComparisonc             C   sr   |  ddd}| |dk | |dk | d|k | d|k | |ddg |g | g |ddg g d S )Nr   r      )theclassr   rb   r   )r$   mer   r   r   test_harmless_mixed_comparison  s    z6HarmlessMixedComparison.test_harmless_mixed_comparisonc                s   |  ddd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fd	d | t fd
d d S )Nr   c                  s    dk S )Nr   r   r   )r   r   r   <lambda>      zGHarmlessMixedComparison.test_harmful_mixed_comparison.<locals>.<lambda>c                  s    dkS )Nr   r   r   )r   r   r   r     r   c                  s    dkS )Nr   r   r   )r   r   r   r     r   c                  s    dkS )Nr   r   r   )r   r   r   r     r   c                  s   d k S )Nr   r   r   )r   r   r   r     r   c                  s   d kS )Nr   r   r   )r   r   r   r     r   c                  s   d kS )Nr   r   r   )r   r   r   r     r   c                  s   d kS )Nr   r   r   )r   r   r   r     r   )r   rZ   r[   )r$   r   )r   r   test_harmful_mixed_comparison  s    z5HarmlessMixedComparison.test_harmful_mixed_comparisonN)r-   r>   r?   r   r   r   r   r   r   r     s   r   c               @   s   e Zd ZeZdd Zdd Zdd Zej	dd Z
d	d
 Zdd Zdd Z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  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4TestTimeDeltac             C   sv  | j }t}|| |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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|dd ||dd|dd ||dd|dd d S )Nr   )weeksdaysry   rB   r   millisecondsr   r   )r   )r   )r   )r   r8      )ry   <   )rB   i  )r   g$I$I?gUUUUUU?g?gMbP?)r#   r   )r$   r   tdr   r   r   r     s&    zTestTimeDelta.test_constructorc             C   sj  | j }t}|d}|dd}|ddd}||| | |ddd ||| |dd ||||dd || |d ||
 |d || |dd || |dd	d
 |t|| |t| | ||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 |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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| 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 d|  |d| d d|  |d| d& d|  |d | d& d|  |d| d d|  |d| d d|  |d| d' d|  |d| d' d|  x2td(dD ]$}||| d | t|d  qW x2td(dD ]$}||| d | t|d  qW ||dd!d) |d%d ||d*d	d+|d*d	d, |ddd ||d*dd|d*dd |ddd d S )-Nr8   r   r   i  r<   iDQ ir   iQ iX> iQ i r   F   iX  i'  r7   i  r   r   i@  i6 i@ g      ?   x   )r   r5   r9   r6   r4   r   )r   g~Ϛ?i@ g6+1?iS	 g       @g       ig`""K?-?iɚ;i?B i>B )r#   r   __rsub__absrangeround)r$   r   r   abcusir   r   r   test_computations  s    

$$zTestTimeDelta.test_computationsc                s   t d xddD ]\| t fdd | t fdd | t fdd | t fdd qW d| t fd	d | t fd
d | t fdd | t fdd | t fdd d S )NrA   )r   g      ?c                  s     S )Nr   r   )r   r   r   r   r     r   z<TestTimeDelta.test_disallowed_computations.<locals>.<lambda>c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   r   c                  s     S )Nr   r   )r   zeror   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r      r   c                  s     S )Nr   r   )r   r   r   r   r   !  r   c                  s    d S )Ng        r   r   )r   r   r   r   "  r   c                  s    d S )Nr   r   r   )r   r   r   r   #  r   )r   rZ   r[   ZeroDivisionError)r$   r   )r   r   r   r   test_disallowed_computations  s    
z*TestTimeDelta.test_disallowed_computationsc             C   s,   t d}| t|jt | t|jt d S )NrA   )r   rZ   r   __mul__NAN__truediv__)r$   r   r   r   r   test_disallowed_special%  s    z%TestTimeDelta.test_disallowed_specialc             C   sD   d\}}}t |||}| |j| | |j| | |j| d S )N)r   r8      )r   r#   r   r   r   )r$   r   r   r   r   r   r   r   test_basic_attributes+  s
    
z#TestTimeDelta.test_basic_attributesc             C   sx   t dd}| | d x&dD ]}t |d}| | | q W x0dD ](}t |d}| | |t dd  qHW d S )	Nim  )r   g    8~A)g˟$@g˟$g~Ϛ?r   g    .A)r   )r   r7   i)r   r   )r   r#   total_seconds)r$   r   r   msr   r   r   test_total_seconds2  s    




z TestTimeDelta.test_total_secondsc             C   s.   t ddddddd}t dd	}| || d S )
Nd   ii8r4   r   g   A)r   r   ry   rB   r   r   r   )r   )r   r#   )r$   t1t2r   r   r   test_carries>  s    
zTestTimeDelta.test_carriesc             C   s   t ddddddd}t  }| t|t| |t dd	7 }|t d
d7 }| || | t|t| |di}d||< | t|d | || d d S )Nr   ii8r4   r   i z
)r   r   ry   rB   r   r   r8   )r   1   )r   r   r9   )r   r#   hashlen)r$   r   r   dr   r   r   test_hash_equalityH  s     z TestTimeDelta.test_hash_equalityc             C   sF   d}t | }x4tD ],\}}}|||}||}| || qW d S )N)r   "   8   )r   rl   rm   rn   r#   )r$   rw   ro   rp   rq   r   rr   rs   r   r   r   test_pickling\  s    
zTestTimeDelta.test_picklingc                s,  t dddt ddd}| | | |k | |k | |k | |k  | |k xdD ]}t | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k qpW xtD ] |  kd |  kd |  kd |  kd | t fdd | t fd	d | t fd
d | t fdd | t fdd | t fdd | t fdd | t fdd q.W d S )Nr9   r5   r:   ))r5   r5   r5   )r9   r:   r:   )r9   r5   r6   FTc                  s    kS )Nr   r   )badargr   r   r   r     r   z,TestTimeDelta.test_compare.<locals>.<lambda>c                  s    k S )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    k S )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   )r   r#   rb   r   
OTHERSTUFFrZ   r[   )r$   r   rw   r   )r   r   r   test_compared  sF    

zTestTimeDelta.test_comparec          	   C   s   t }| j}|t|dd |t|dd |t|dd |t|dd |t|d	d
ddd |t|ddddd |t|ddd	ddd |t|ddd |t|ddd |t|ddddddd d S )Nr   z1 day, 0:00:00r   z-1 day, 0:00:00r9   z2 days, 0:00:00r7   z-2 days, 0:00:00r   :   r   )ry   rB   r   z12:58:59r5   r:   z2:03:04ir   r   )r   ry   rB   r   z-210 days, 23:12:34)r   z0:00:00.001000)r   z0:00:00.000003iɚ;i?B )r   ry   rB   r   r   z999999999 days, 23:59:59.999999)r   r#   r   )r$   r   r   r   r   r   r     s    zTestTimeDelta.test_strc             C   s   d| j j }| t|  dd|  | t|  ddd|  | t|  dddd	|  | t| j d
dd|  | t|   d|  | t| j ddd|  | t| j dddd|  | t| j dddd|  d S )Nz	datetime.r   z
%s(days=1)r   r9   z%s(days=10, seconds=2)ii z,%s(days=-10, seconds=2, microseconds=400000)r   )r   z%s(seconds=60)z%s(0)r   )r   z%s(microseconds=100))r   r   z%s(days=1, microseconds=100))r   r   z%s(seconds=1, microseconds=100))r   r-   r#   r   )r$   r)   r   r   r   r     s"    






zTestTimeDelta.test_reprc             C   s   xt ddddddt ddt ddd	t dd
ddfD ]Z}t|}| |d |dd  }t|}| || t |j|j|j}| || q4W d S )Niɚ;r   r   i?B )r   ry   rB   r   r   i6e)r   r   )r   r   r9   r5   )r   r   r   z	datetime.	   )	r   r   rb   r'   r   r#   r   r   r   )r$   r   sZtd2r   r   r   test_roundtrip  s    

zTestTimeDelta.test_roundtripc             C   s~   |  tjt |  tjt |  tjt | tjtjk | tjtd | tjtddd | tjtddd d S )Ni6eiɚ;iQ g    ~.Ar   r   )rd   r   r   r^   
resolutionrb   r#   )r$   r   r   r   test_resolution_info  s    z"TestTimeDelta.test_resolution_infoc             C   s   t j}t j| }||8 }| t|j| | t|j|  t j| }||7 }| t|j| | t|j|  | tdd  t d}| t|jd | t|jd | t|j	d | t|j	d | t|j	d d S )	Nc               S   s   t j S )N)r   r^   r   r   r   r   r     r   z-TestTimeDelta.test_overflow.<locals>.<lambda>r   i ʚ;g    eAg#B;g|=gr{>)
r   r   r   rZ   OverflowError__sub____add__r^   r   r   )r$   tinyr   dayr   r   r   test_overflow  s     

zTestTimeDelta.test_overflowc             C   s.   t d}| t|jt | t|jt  d S )Nr   )r   rZ   r   r   INF)r$   r   r   r   r   _test_overflow_special  s    z$TestTimeDelta._test_overflow_specialc             C   s  t }| 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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	d ||d| d|d ||d| d|d ||d| d| d|dd ||d dd |d!d  ||d d|j d |j |j  d S )"Ng-C6:?)r   r   g-C6:gMb@?)r   gMb@ga2U0*C?r   ga2U0*Cr   g~jtX?r9   g~jtXr7   gƠ>)r   gƠg      ?i  g      i|g   tAr   g?)r   g?)ry   )r   ry   gٿgɿg      ?g      ?)r   r#   r   )r$   r   r   Zus_per_hourZ
us_per_dayr   r   r   test_microsecond_rounding  s0      z'TestTimeDelta.test_microsecond_roundingc             C   s&   t dd}| |j|j|jfd d S )Nr   )r   )r   iQ i?B )r   r#   r   r   r   )r$   r   r   r   r   test_massive_normalization  s    
z(TestTimeDelta.test_massive_normalizationc             C   sR   |  td |  tdd |  tddd |  tdd | td d S )Nr   r   )r   )rb   r   r   )r$   r   r   r   	test_bool  s
    zTestTimeDelta.test_boolc                s   G  fdddt   dd}| t|  | | d  ddd}| t|  | | d	 || }| t|t   |}| t|  | |j|j | |j|j | |j|j | t	|t	| | | d d S )
Nc                   s$   e Zd Ze fddZdd ZdS )z0TestTimeDelta.test_subclass_timedelta.<locals>.Tc                s    | j | j| jS )N)r   r   r   )r   )Tr   r   from_td  s    z8TestTimeDelta.test_subclass_timedelta.<locals>.T.from_tdc             S   s&   | j d | jd  | jd  }t|S )Nr   g      @g   tA)r   r   r   r   )r$   sumr   r   r   as_hours  s    z9TestTimeDelta.test_subclass_timedelta.<locals>.T.as_hoursN)r-   r>   r?   staticmethodr   r  r   )r   r   r   r     s   r   r   )r   r   r   i)r   r   i)
r   rj   rk   r#   r  r   r   r   r   r   )r$   r   r   t3t4r   )r   r   test_subclass_timedelta  s     

z%TestTimeDelta.test_subclass_timedeltac             C   s   t dddd}t dd}| || d | || d t dd	d
}t dd}| || d | || d t d}| tt|| | tt|| d S )Nr   r      )ry   rB   r   )r   g     ó@i  r9      )rB   r   )rB   g      @r   )r   r#   rZ   r   r
   r   )r$   r   secondminutezerotdr   r   r   test_division7  s    

zTestTimeDelta.test_divisionc             C   s   t ddd}t dd}|| }| |t dd t ddd}|| }| |t dd t d}| tt|| | tt|d	 d S )
Nr9   r  )rB   r   r   )rB   )r   r7   r   r   )r   r#   rZ   r   r   r[   )r$   r   r	  rr
  r   r   r   test_remainderJ  s    
zTestTimeDelta.test_remainderc             C   s   t ddd}t dd}t||\}}| |d | |t dd t ddd}t||\}}| |d | |t dd t d}| tt|| | tt|d	 d S )
Nr9   r  )rB   r   r   )rB   )r   r7   r   r   )r   divmodr#   rZ   r   r[   )r$   r   r	  qr  r
  r   r   r   test_divmodY  s    
zTestTimeDelta.test_divmodc          
   C   s   dd }|  t t |dd>   W d Q R X |  t t |dd>   W d Q R X xTdD ]L}|  t t ||  W d Q R X |  t t ||  W d Q R X q^W d S )Nc                s   G  fdddt }| S )Nc                   s   e Zd Z fddZdS )zFTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloatc                s    S )Nr   )r$   )	bad_ratior   r   as_integer_ratioo  s    zWTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloat.as_integer_ratioN)r-   r>   r?   r  r   )r  r   r   BadFloatn  s   r  )float)r  r  r   )r  r   get_bad_floatm  s    z4TestTimeDelta.test_issue31293.<locals>.get_bad_floatr   i  )r   )rA   )r   r9   r5   )rZ   r[   r   r   )r$   r  r  r   r   r   test_issue31293j  s    
zTestTimeDelta.test_issue31293c                sn  G  fdddt }G fddd G fdddt x,dD ]"| jd
 yt|d	d
 W n tk
r~   Y nX yt|d	d W n tk
r   Y nX yt|d	d W n ttfk
r   Y nX ytd	|d	  W n ttfk
r   Y nX y|d	td	  W n tk
r.   Y nX ytd	|d	  W n tk
rZ   Y nX W d Q R X qBW d S )Nc                   s<   e Zd Z fddZ fddZ fddZ fddZd	S )
z-TestTimeDelta.test_issue31752.<locals>.BadIntc                s     S )Nr   )r$   other)Prodr   r   r     s    z5TestTimeDelta.test_issue31752.<locals>.BadInt.__mul__c                s     S )Nr   )r$   r  )r  r   r   __rmul__  s    z6TestTimeDelta.test_issue31752.<locals>.BadInt.__rmul__c                s     S )Nr   )r$   r  )r  r   r   __floordiv__  s    z:TestTimeDelta.test_issue31752.<locals>.BadInt.__floordiv__c                s     S )Nr   )r$   r  )r  r   r   __rfloordiv__  s    z;TestTimeDelta.test_issue31752.<locals>.BadInt.__rfloordiv__N)r-   r>   r?   r   r  r  r  r   )r  r   r   BadInt  s   r  c                   s$   e Zd Z fddZ fddZdS )z+TestTimeDelta.test_issue31752.<locals>.Prodc                s     S )Nr   )r$   r  )Sumr   r   r     s    z3TestTimeDelta.test_issue31752.<locals>.Prod.__add__c                s     S )Nr   )r$   r  )r  r   r   __radd__  s    z4TestTimeDelta.test_issue31752.<locals>.Prod.__radd__N)r-   r>   r?   r   r  r   )r  r   r   r    s   r  c                   s   e Zd Z fddZdS )z*TestTimeDelta.test_issue31752.<locals>.Sumc                s    S )Nr   )r$   r  )divmodresultr   r   
__divmod__  s    z5TestTimeDelta.test_issue31752.<locals>.Sum.__divmod__N)r-   r>   r?   r   r   )r  r   r   r    s   r  )Nr   )r   r   r9   )r   r   )r  r   )r   )ry   )r   )rD   subTestr   r[   r   )r$   r  r   )r  r  r  r   test_issue31752~  s:    
zTestTimeDelta.test_issue31752N) r-   r>   r?   r   r   r   r   r   r   Zrequires_IEEE_754r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r"  r   r   r   r   r     s4   S
(	!r   c               @   s   e Zd Zdd ZdS )TestDateOnlyc             C   s   t ddd}tdddddd}t|j}| |td || }| |||  || }| |||  || }| |||  | }t|j}| |td || }| |||  || }| |||  || }| |||  d S )	Ni  r   r9   r5   r:   r6   )r   ry   rB   r   r   r7   )r   r   r   r#   )r$   rM   deltar   dt2r   r   r   test_delta_non_days_ignored  s(    


z(TestDateOnly.test_delta_non_days_ignoredN)r-   r>   r?   r&  r   r   r   r   r#    s   r#  c               @   s   e Zd ZdZdS )SubclassDater   N)r-   r>   r?   sub_varr   r   r   r   r'    s   r'  c               @   s@  e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(dIdJ Z)dKdL Z*dMS )NTestDatec             C   s<   |  ddd}| |jd | |jd | |jd d S )Ni  r5   r   )r   r#   yearmonthr   )r$   rM   r   r   r   r     s    zTestDate.test_basic_attributesc             C   s~   xx|  ddd| j  fD ]\}t|}| |d |dd  }t|}| || |  |j|j|j	}| || qW d S )Nr   r9   r5   z	datetime.r   )
r   todayr   rb   r'   r   r#   r*  r+  r   )r$   rM   r   r%  r   r   r   r     s    zTestDate.test_roundtripc             C   s  xdD ]\}}}}|  |||}| ||  | j |}| || t|dr| |jd | |jd | |jd | |jd qW xt	t
td dD ]|}|  |dd}| }| j |}| || |dkr| j |d }|  |d dd}| || | | |d  qW dddd	dd	ddd	dd	dg}xd
D ]\}}	|  |dd }xtt	dd|D ]v\}
}|
dkr|	r|d7 }xRt	d|d D ]@}|  ||
|}| | | | || j | |d7 }qW qnW qBW d S )N))r   r   r   r   )r   r   r   im  )r9   r   r   in  )i  rX   r   i
 hourr   r   r8   r   r      r  ))i  T)i  F   r9   )r   r#   	toordinalfromordinalhasattrr-  r	  r  microsecondr   r   r   zip)r$   ymr   nZfromordr*  d2ZdimZisleapr+  Zmaxdayr   r   r   r   test_ordinal_conversions  s>    
z!TestDate.test_ordinal_conversionsc                s  | j j |   j j j    }|  | | t	 fdd  t
dd }| | d  | || j d  | j j |   j j j    }|  | | t	 fdd  t
dd }| | d  | || j d  d S )Nc                  s     d S )Nr   )r1  r   )r   aordr   r   r   )  r   z0TestDate.test_extreme_ordinals.<locals>.<lambda>r   )r   c                  s     d S )Nr   )r1  r   )r   r:  r   r   r   5  r   )r   r   r*  r+  r   r0  r1  r#   rZ   r   r   r^   )r$   r   r   )r   r:  r   test_extreme_ordinals"  s$    

zTestDate.test_extreme_ordinalsc             C   s6  |  tdd |  tdd | t| j td dd | t| j td dd |  ddd |  ddd | t| j ddd | t| j ddd |  ddd |  ddd |  d	dd | t| j ddd
 | t| j ddd | t| j ddd | t| j ddd | t| j ddd | t| j ddd d S )Nr   i  r   r   r/  r9      i  i`	  r  i  i4  il  rY   )r   r   r   rZ   r   )r$   r   r   r   test_bad_constructor_arguments;  s"    z'TestDate.test_bad_constructor_argumentsc             C   s   |  ddd}|  ddd}| || | t|t| |di}d||< | t|d | || d | || d |  ddd}|  ddd}| || | t|t| |di}d||< | t|d | || d | || d d S )Ni  r   r   r   r9   i  )r   r#   r   r   )r$   r   edicr   r   r   r   Q  s$    zTestDate.test_hash_equalityc          	      s6  |  ddd |  ddd}|  ddd} | }| |jdttddd  | |jd	 | |jd	 tdt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d |  |   | |      |  |   |  |       |   |  |  |       |   |  | |      | ||   xfdD ]^| t	 fdd | t	 fdd | t	 fdd | t	 fdd q&W | t	 fdd | t	 fdd | t	 fdd | t	 fdd | t	 fdd | t	 fdd | t	 fdd | t	 fdd d S )Ni  r   r   i  i  r9   iA  r:   r   r8   r5   r   r   4   i  )r   g      ?c                  s     S )Nr   r   )r   r   r   r   r     r   z,TestDate.test_computations.<locals>.<lambda>c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s     S )Nr   r   )r   r   r   r   r     r   c                  s      S )Nr   r   )r   r   r   r     r   c                  s      S )Nr   r   )r   r   r   r     r   c                  s      S )Nr   r   )r   r   r   r     r   )
r   r#   r   r   r   r   r   r   rZ   r[   )r$   r   r   diffweekr   )r   r   r   r   r   j  sP    
zTestDate.test_computationsc             C   s   | j j}x|tdtdgD ]p}| j j| }||8 }| t|j| | t|j|  | j j| }||7 }| t|j| | t|j|  qW d S )Nr   r9   )	r   r   r   r   rZ   r   r   r   r^   )r$   r   r$  rM   r   r   r   r     s    zTestDate.test_overflowc             C   sh   dd l }d\}}}||||ddddddf	}| j|}| |j| | |j| | |j| d S )Nr   )i  r   r  r   )r   mktimer   fromtimestampr#   r*  r+  r   )r$   r   r*  r+  r   tsr   r   r   r   test_fromtimestamp  s    
zTestDate.test_fromtimestampc             C   s$   xdD ]}|  t| jj| qW d S )N)gZbtgZbti)rZ   r   r   rD  )r$   insaner   r   r   test_insane_fromtimestamp  s    
z"TestDate.test_insane_fromtimestampc             C   sn   dd l }xBtdD ]6}| j }|  }| j|}||kr>P |d qW ||krj| j||tddd d S )Nr   r5   g?g      ?)r   )r$  )r   r   r   r,  rD  ZsleepZassertAlmostEqualr   )r$   r   r   r,  rE  Z
todayagainr   r   r   
test_today  s    
zTestDate.test_todayc          	   C   s   xt dD ]}| | ddd|  | | | ddd|  |d  | | ddd|  | | | ddd|  |d  q
W d S )Nr8   i  r5   r:   r   i  r9   )r   r#   r   weekdayZ
isoweekday)r$   r   r   r   r   test_weekday  s
    "zTestDate.test_weekdayc             C   s*  x"t dD ]}| ddd| }| | dd|d f | dddt| }| | dd|d f | ddd	| }| | dd
|d f | ddd| }| | dd|d f | dddt| }| | dd|d f | ddd| }| | dd|d f qW d S )Nr8   i  r      r@  r   r<  i  r6   r9   i  rW   r.  5   i  r:   )r   r   r#   isocalendarr   )r$   r   r   r   r   r   test_isocalendar  s    zTestDate.test_isocalendarc             C   s   d}t tt| }g }xrtdD ]f}| d| dd}| d| dd}| | dd  | dd   | d dkr$|| q$W | || d S )	NaK  
              4   32   60   88
              9   37   65   93
             15   43   71   99
             20   48   76
             26   54   82

            105  133  161  189
            111  139  167  195
            116  144  172
            122  150  178
            128  156  184

            201  229  257  285
            207  235  263  291
            212  240  268  296
            218  246  274
            224  252  280

            303  331  359  387
            308  336  364  392
            314  342  370  398
            320  348  376
            325  353  381
        i  i  r   r   i@  r   rM  )	sortedmaprD   splitr   r   r#   rN  append)r$   ZISO_LONG_YEARS_TABLEZiso_long_yearsLr   r   d1r   r   r   test_iso_long_years  s    $zTestDate.test_iso_long_yearsc             C   s"   |  ddd}| | d d S )Nr9   r5   z
0002-03-02)r   r#   	isoformat)r$   r   r   r   r   test_isoformat  s    zTestDate.test_isoformatc             C   s"   |  ddd}| | d d S )Ni  r5   r9   zSat Mar  2 00:00:00 2002)r   r#   ctime)r$   r   r   r   r   
test_ctime  s    zTestDate.test_ctimec          	   C   s   |  ddd}| |dd | |dd | |dd | t|j | t|jdd	 | t|jd
 | |dd | |dd x0dD ](}y|| W q tk
r   Y qX qW y|d W n tk
r   Y nX |d d S )Ni  r5   r9   zm:%m d:%d y:%yzm:03 d:02 y:05r   A  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoneZtworA   z%mZ03z	'%z' '%Z'z'' '')z%e%z%#u   %y%mz%f)r   r#   strftimerZ   r[   r   UnicodeEncodeError)r$   r   fr   r   r   test_strftime#  s&    


zTestDate.test_strftimec             C   sd   |  ddd}ytd W n tk
r:   | d Y nX | |dd | |dd d S )Ni  r5   r9   r\  z'time module does not support trailing %zm:%m d:%d y:%y %zm:03 d:02 y:05 %)r   _timer]  r   r.   r#   )r$   r   r   r   r   test_strftime_trailing_percentJ  s    z'TestDate.test_strftime_trailing_percentc          	   C   s   |  ddd}| |dt| | td |d W d Q R X G dd d| j }|ddd}| |dd G d	d
 d
| j }|ddd}| |dt| xNdD ]F}| |||| | |||| | ||d
 qW d S )Ni  r   r   r   zmust be str, not int{   c               @   s   e Zd Zdd ZdS )zTestDate.test_format.<locals>.Ac             S   s   dS )NAr   )r$   r   r   r   __str__^  s    z'TestDate.test_format.<locals>.A.__str__N)r-   r>   r?   re  r   r   r   r   rd  ]  s   rd  c               @   s   e Zd Zdd ZdS )zTestDate.test_format.<locals>.Bc             S   s   dS )NBr   )r$   format_specr   r   r   r]  e  s    z(TestDate.test_format.<locals>.B.strftimeN)r-   r>   r?   r]  r   r   r   r   rf  d  s   rf  )zm:%m d:%d y:%yzm:%m d:%d y:%y H:%H M:%M S:%Sz%z %Z)r   r#   
__format__r   assertRaisesRegexr[   r]  )r$   rM   rd  r   rf  r   fmtr   r   r   test_formatU  s    
zTestDate.test_formatc             C   s`   t | jtrt}nt}| | jj| | | jj| | | jjt | 	| jj| jjk d S )N)
rc   r   r   r   rd   r   r^   r   r   rb   )r$   Zexpected_classr   r   r   r   r  s    zTestDate.test_resolution_infoc             C   sz   | j j| j j }|jd d |j d |j }tdd|}| || | | j j| | j j | | j j| | j j d S )Nr   i  i@B r   )r   r^   r   r   r   r   r   r#   )r$   bigr7  Z	justasbigr   r   r   test_extreme_timedelta}  s    zTestDate.test_extreme_timedeltac             C   sx  xpt dD ]b}| ddd| }| }| |ddd| ddd|d| df	 | ddd| }| }| |ddd| dddd| d d| df	 | ddd| }| }| |ddd| dddd| d d	| df	 | |jd | |jd | |jd|  | |jd | |jd | |j	d | |j
d| d  | |jd	|  | |jd qW d S )
Nr8   i  r   r9   r   r   rY   r5   =   )r   r   	timetupler#   tm_yeartm_montm_mdaytm_hourtm_mintm_sectm_wdaytm_ydaytm_isdst)r$   r   r   r   r   r   r   test_timetuple  s&    &..zTestDate.test_timetuplec             C   s^   d}| j | }x4tD ],\}}}|||}||}| || qW | | |d d S )N)r<   r8   r   r9   )r   rl   rm   rn   r#   
__reduce____reduce_ex__)r$   rw   ro   rp   rq   r   rr   rs   r   r   r   r     s    

zTestDate.test_picklingc             C   sP   dddg}d}| j | }x2|D ]*}x$tD ]}||dd}| || q(W qW d S )Ns'   cdatetime
date
(S'\x07\xdf\x0b\x1b'
tR.s   cdatetime
date
(UtR.s   cdatetime
date
UR.)i  rX      latin1)encoding)r   pickle_loadsr#   )r$   testsrw   expecteddatarn   rs   r   r   r   test_compat_unpickle  s    


zTestDate.test_compat_unpicklec                s  |  ddd|  ddd}| | | |k | |k | |k | |k  | |k xdD ]}| j | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k qtW xtD ] |  kd |  kd |  kd |  kd | t fdd | t fd	d | t fd
d | t fdd | t fdd | t fdd | t fdd q4W d S )Nr9   r5   r:   ))r5   r5   r5   )r9   r:   r:   )r9   r5   r6   FTc                  s    k S )Nr   r   )r   r   r   r   r     r   z'TestDate.test_compare.<locals>.<lambda>c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    k S )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   c                  s    kS )Nr   r   )r   r   r   r   r     r   )r   r#   rb   r   r   rZ   r[   )r$   r   rw   r   )r   r   r   r     sD    


zTestDate.test_comparec                sr  |  ddd| dkd | dkd | dkd | dkd | tfdd | tfd	d G d
d d}| | kd | kd | kd | kd | tfdd | tfdd G  fddd   | kd | kd | kd | kd | k d | k d d S )Ni  r:   r6   r   FTc                  s    dk S )Nr   r   r   )ourr   r   r     r   z-TestDate.test_mixed_compare.<locals>.<lambda>c                  s   d k S )Nr   r   r   )r  r   r   r     r   c               @   s   e Zd ZdS )z.TestDate.test_mixed_compare.<locals>.SomeClassN)r-   r>   r?   r   r   r   r   	SomeClass  s   r  c                  s    k S )Nr   r   )r  theirr   r   r     r   c                  s    k S )Nr   r   )r  r  r   r   r     r   c                   s@   e Zd Zdd Z fddZ fddZ fddZd	d
 ZdS )z7TestDate.test_mixed_compare.<locals>.LargerThanAnythingc             S   s   dS )NFr   )r$   r  r   r   r   __lt__  s    z>TestDate.test_mixed_compare.<locals>.LargerThanAnything.__lt__c                s
   t | S )N)rC   )r$   r  )LargerThanAnythingr   r   __le__  s    z>TestDate.test_mixed_compare.<locals>.LargerThanAnything.__le__c                s
   t | S )N)rC   )r$   r  )r  r   r   __eq__  s    z>TestDate.test_mixed_compare.<locals>.LargerThanAnything.__eq__c                s   t |  S )N)rC   )r$   r  )r  r   r   __gt__  s    z>TestDate.test_mixed_compare.<locals>.LargerThanAnything.__gt__c             S   s   dS )NTr   )r$   r  r   r   r   __ge__  s    z>TestDate.test_mixed_compare.<locals>.LargerThanAnything.__ge__N)r-   r>   r?   r  r  r  r  r  r   )r  r   r   r    s
   r  )r   r#   rZ   r[   )r$   r  r   )r  r  r  r   test_mixed_compare  s.    zTestDate.test_mixed_comparec             C   s    |  | jj |  | jj d S )N)rb   r   r   r^   )r$   r   r   r   r     s    zTestDate.test_boolc             C   s^   xXdD ]P}|  |dd}|dd| kr| |dd|  | |dd|  qW d S )N)r   r   r   c   r   i  i  i  r   z%Yz%04dz%dz%4Y)r   r]  r#   )r$   r5  r   r   r   r   test_strftime_y2k  s
    
zTestDate.test_strftime_y2kc       
      C   s   | j }dddg}|| }| ||  d}xPdD ]H\}}|d d  }|||< || }|jf ||i}	| ||	 |d7 }q2W |ddd}| jt|jdd	 d S )
Nr   r9   r5   r   ))r*  r9   )r+  r5   )r   r:   i  r<  i  )r*  )r   r#   r   rZ   r   )
r$   clsrw   baser   r)   newvalnewargsr  gotr   r   r   test_replace   s    
zTestDate.test_replacec             C   s:   G dd d| j }|ddd}| t|jdd| d S )Nc               @   s   e Zd ZdS )z4TestDate.test_subclass_replace.<locals>.DateSubclassN)r-   r>   r?   r   r   r   r   DateSubclass6  s   r  i  r   i  )r*  )r   rj   rk   r   )r$   r  rM   r   r   r   test_subclass_replace5  s    zTestDate.test_subclass_replacec                s   G  fddd j }d} j | }||ddi} |j|  |jd  |jd  | |   |d|j|j d  d S )Nc                   s$   e Zd ZdZ fddZdd ZdS )z&TestDate.test_subclass_date.<locals>.CrA   c                s0   |  }|d} jj| f||}||_|S )Nr   )r   popr   ri   r   )r  rw   kwstempr   result)r$   r   r   ri   A  s
    
z.TestDate.test_subclass_date.<locals>.C.__new__c             S   s   || j  | j S )N)r*  r+  )r$   startr   r   r   newmethH  s    z.TestDate.test_subclass_date.<locals>.C.newmethN)r-   r>   r?   	theAnswerri   r  r   )r$   r   r   C>  s   r  )i  r:   r   r   r8   rA   i)	r   r#   r,   r  r   r0  r  r*  r+  )r$   r  rw   r\   r%  r   )r$   r   test_subclass_date<  s    
zTestDate.test_subclass_datec                s   G  fddd j }d}d}d}|| } ||  |jd t|td }d|ffd	|ffd
|ffg}xx|D ]p\}}	xf||fD ]Z}
 jt	|
|d> t
|
|}||	 } ||  ||  |jd W d Q R X qW qzW d S )Nc                   s   e Zd Z fddZdS )zCTestDate.test_subclass_alternate_constructors.<locals>.DateSubclassc                s    j j| f||}d|_|S )Nr8   )r   ri   r   )r  rw   kwargsr  )r$   r   r   ri   Y  s    zKTestDate.test_subclass_alternate_constructors.<locals>.DateSubclass.__new__N)r-   r>   r?   ri   r   )r$   r   r   r  X  s   r  )i  r:   r   i( z
2003-04-14r8   r   r1  rD  fromisoformat)base_obj_typeconstr_name)r   rd   r#   r   r   combiner   	timestampr!  rk   getattr)r$   r  rw   Zd_ordd_isoformatbase_drE  
test_casesr  constr_argsbase_objconstrrM   r   )r$   r   $test_subclass_alternate_constructorsV  s(    


z-TestDate.test_subclass_alternate_constructorsc             C   sF   d}t | }x4tD ],\}}}|||}||}| || qW d S )N)r<   r8   r   )r'  rl   rm   rn   r#   )r$   rw   ro   rp   rq   r   rr   rs   r   r   r   test_pickling_subclass_date  s    
z$TestDate.test_pickling_subclass_datec          	   C   s   d}t | jts|d d }x4dD ],}| t| j|d d | |dd    q"W t | jtr| td  | tdgt| d W d Q R X x:tdd	D ],}| |d d t|g |dd    qW d S )
Ns
   1995-03-25r:   )   9          r9   r5   z^bad tzinfo state arg$r   rv   r/  )	rc   r   r   rZ   r[   ri  bytesr   r   )r$   r  Z
month_byteZord_byter   r   r   test_backdoor_resistance  s    	

"$z!TestDate.test_backdoor_resistancec          
   C   sj   dddddddg}xR|D ]J}| j | }| }| j|d" | j | }| || W d Q R X qW d S )	N)r   r   r   )i  r9   r   )il  r   r   )i  r9   r<  )i  rX   r   )i  r:   r5   )i  r6   r  )dt_str)r   rW  r!  r  r#   )r$   
base_datesdt_tuplerM   r  dt_rtr   r   r   test_fromisoformat  s    

zTestDate.test_fromisoformatc             C   s<   G dd d| j }|ddd}|| }| || d S )Nc               @   s   e Zd ZdS )z:TestDate.test_fromisoformat_subclass.<locals>.DateSubclassN)r-   r>   r?   r   r   r   r   r    s   r  i  r   r   )r   r  rW  rd   )r$   r  rM   r  r   r   r   test_fromisoformat_subclass  s    z$TestDate.test_fromisoformat_subclassc             C   sN   ddddddddd	d
dg}x.|D ]&}|  t | j| W d Q R X q W d S )Nr   u   z	009-03-04Z	123456789z
200a-12-04z
2009-1a-04z
2009-12-0az
2009-01-32z
2009-02-29Z20090228u   20090228)rZ   r   r   r  )r$   bad_strsbad_strr   r   r   test_fromisoformat_fails  s    
z!TestDate.test_fromisoformat_failsc          
   C   sL   dd l }dd |dg}x.|D ]&}| t | j| W d Q R X qW d S )Nr   s
   2009-03-01z
2009-03-01)ioStringIOrZ   r[   r   r  )r$   r  	bad_typesbad_typer   r   r   "test_fromisoformat_fails_typeerror  s
    
z+TestDate.test_fromisoformat_fails_typeerrorN)+r-   r>   r?   r   r   r   r   r9  r;  r=  r   r   r   rF  rH  rI  rK  rO  rV  rX  rZ  r`  rb  rk  r   rm  ry  r   r  r   r  r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r)    sN   /2		&'
	'1,	
r)  c               @   s   e Zd ZdZdS )SubclassDatetimer   N)r-   r>   r?   r(  r   r   r   r   r    s   r  c               @   s  e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Z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d)d*d+ Zd,d- Zed.d/d0 Zd1d2 Zd3d4 Zd5d6 Z e!"e#j$d7kd8d9d: Z%e!"e#j$d7kd8d;d< Z&d=d> Z'd?d@ Z(dAdB Z)dCdD Z*dEdF Z+dGdH Z,dIdJ Z-dKdL Z.edMdNdO Z/dPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`da Z8dbdc Z9ddde Z:dfS )gTestDateTimec             C   sx   |  ddddd}| |jd | |jd | |jd | |jd | |jd | |jd | |jd d S )Ni  r5   r   r   r   )	r   r#   r*  r+  r   r-  r	  r  r3  )r$   rM   r   r   r   r     s    z"TestDateTime.test_basic_attributesc          	   C   s|   |  ddddddd}| |jd | |jd | |jd | |jd | |jd | |jd | |jd d S )Ni  r5   r   r   r   i@  )	r   r#   r*  r+  r   r-  r	  r  r3  )r$   rM   r   r   r   test_basic_attributes_nonzero  s    z*TestDateTime.test_basic_attributes_nonzeroc          
   C   s   x|  ddddddd| j  fD ]l}t|}| |d |d	d  }t|}| || |  |j|j|j	|j
|j|j|j}| || q"W d S )
Nr   r9   r5   r:   r6   r<   r8   z	datetime.r   )r   re   r   rb   r'   r   r#   r*  r+  r   r-  r	  r  r3  )r$   rM   r   r%  r   r   r   r      s    zTestDateTime.test_roundtripc          
   C   sb  |  ddddddd}| | d | |dd | |d	d
 | |dd | |dd | |jddd | |jddd | |jddd | |jddd | |jddd | |jddd | |jd	ddd | jt|jdd | jt|jdd | t|d
 | j dddddddtjd}| |jddd |  ddddddd}| |jddd  |  dddddd}| |jddd | |jddd | |jddd! |  ddd}| | d" | |dd" | |d	d# | t|d# tt	d$d%d&}| j ddd|d}| | d' d S )(Nr   r9   r5   r:   r6   rc  z0001-02-03T04:05:01.000123r    z0001-02-03 04:05:01.000123 z0001-02-03 04:05:01.000123u   u   0001-02-0304:05:01.000123ry   )timespecz0001-02-03T04rB   z0001-02-03T04:05r   z0001-02-03T04:05:01r   z0001-02-03T04:05:01.000r   auto)sepr  z0001-02-03 04:05fooiL@ )r   z0001-02-03T04:05:01.999+00:00z0001-02-03T04:05:01.999z0001-02-03T04:05:01.000000z0002-03-02T00:00:00z0002-03-02 00:00:00   )r   ZXXXz0002-03-02T00:00:00+00:00:16)
r   r#   rW  rZ   r   r   r   r   r@   r   )r$   r   r   r   r   r   rX    sB    zTestDateTime.test_isoformatc       	      C   s   dt ddfdt ddfdt ddd	fd
t ddddfdt dddddfg}ddtjfdtt dfg}|dd |D 7 }| dddddd}d}x<|D ]4\}}|j|d}|| }| j|d W d Q R X qW d S )Nz05:00r6   )ry   z02:00r9   z06:27r<   r|  )ry   rB   z12:32:30r   rY   r  )ry   rB   r   z02:04:09.123456r:   r   i@ )ry   rB   r   r   )r   Nz+00:00r   c             S   s2   g | ]*\}}d D ]\}}|| t || fqqS )))-r   )+r   )r   )r   r  r   prefixsignr   r   r   r   L  s   z8TestDateTime.test_isoformat_timezone.<locals>.<listcomp>i  r   %   z2016-04-01T12:37:09)r   )tzi)r   r   r   r   r   r!  )	r$   	tzoffsetstzinfosZdt_baseexp_baseexp_tzr  rM   expr   r   r   test_isoformat_timezone<  s$    
z$TestDateTime.test_isoformat_timezonec          	   C   s  |  ddddddd}| |dt| | td	 |d W d Q R X G d
d d| j }|ddddddd}| |dd G dd d| j }|ddddddd}| |dt| xNdD ]F}| |||| | |||| | ||d qW d S )Ni  r   r   r:   r6   r   rc  r   zmust be str, not intc               @   s   e Zd Zdd ZdS )z#TestDateTime.test_format.<locals>.Ac             S   s   dS )Nrd  r   )r$   r   r   r   re  c  s    z+TestDateTime.test_format.<locals>.A.__str__N)r-   r>   r?   re  r   r   r   r   rd  b  s   rd  c               @   s   e Zd Zdd ZdS )z#TestDateTime.test_format.<locals>.Bc             S   s   dS )Nrf  r   )r$   rg  r   r   r   r]  j  s    z,TestDateTime.test_format.<locals>.B.strftimeN)r-   r>   r?   r]  r   r   r   r   rf  i  s   rf  )zm:%m d:%d y:%yzm:%m d:%d y:%y H:%H M:%M S:%Sz%z %Z)r   r#   rh  r   ri  r[   r]  )r$   rM   rd  r   rf  r   rj  r   r   r   rk  Z  s    
zTestDateTime.test_formatc          	   C   sh   dd l }| ddddddd}| | d | ddd	dddd}| | |||  d S )
Nr   i  r5   r9      r6   rc  zSat Mar  2 18:03:05 2002rL  )r   r   r#   rY  rC  ro  )r$   r   r   r   r   r   test_more_ctimew  s
    zTestDateTime.test_more_ctimec          	   C   s   |  dddddd}|  dddddd}|  dddddd}| || | ||k |  tddd	d
d
d}tdd}|| }| || | | ||k  d S )Ni  r5   r   r   r   r   r   r   r   r   i>B )r   )r   r#   rb   r   r   )r$   r\   r%  dt3r   r   r   r   test_tz_independent_comparing  s    
z*TestDateTime.test_tz_independent_comparingc             C   sB   G dd dt }| ddddddd|dd}| t|jd d S )	Nc               @   s   e Zd Zdd ZdS )zDTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfoc             S   s   G dd dt }|dS )Nc               @   s   e Zd Zdd ZdS )zZTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStrc             W   s   d S )Nr   )r$   rw   r   r   r   r     s    zbTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStr.replaceN)r-   r>   r?   r   r   r   r   r   MyStr  s   r  r)   )r   )r$   rM   r  r   r   r   rO     s    zKTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tznameN)r-   r>   r?   rO   r   r   r   r   MyTzInfo  s   r  i  r5   r9   r   r)   z%Z)r@   r   rZ   r[   r]  )r$   r  r   r   r   r   %test_strftime_with_bad_tzname_replace  s    z2TestDateTime.test_strftime_with_bad_tzname_replacec             C   s  |  tdd |  tdd | t| j td dd | t| j td dd |  ddd |  ddd | t| j ddd | t| j ddd |  ddd |  ddd |  d	dd | t| j ddd
 | t| j ddd | t| j ddd | t| j ddd | t| j ddd | t| j ddd |  dddd |  dddd | t| j dddd | t| j dddd |  ddddd |  ddddd | t| j ddddd | t| j ddddd |  dddddd |  dddddd | t| j dddddd | t| j dddddd |  ddddddd |  ddddddd | t| j ddddddd	 | t| j ddddddd	 | jt| j ddddd | jt| j ddddd | t| j dddddddd d d S )Nr   i  r   r   r/  r9   r<  i  i`	  r  i  i4  il  rY   r   r   r   r   r   r   i?B i@B )fold)r   r   r   rZ   r   r[   )r$   r   r   r   r=    sT    




z+TestDateTime.test_bad_constructor_argumentsc             C   s  |  dddddd}|  dddddd}| || | t|t| |di}d||< | t|d | || d | || d |  d	ddd
dd}|  d	ddd
dd}| || | t|t| |di}d||< | t|d | || d | || d d S )Ni  r   r   r   r     r   r9   i  r   r6   )r   r#   r   r   )r$   r   r>  r?  r   r   r   r     s$    zTestDateTime.test_hash_equalityc                s@  |  ddd |  ddd} | }| |jdttddd  | |jd | |jd |  ddd	d
d tddd}tdd}tdt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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
d |  d|  |  dddd
d |  |   | |      |  |   | |  |   | |  |   |  |       |  |   |  |  |   |  |   |  |  |       |   |  |  |   |  |  |   |  | |      |   |  | |   |  | |  | | |  |  ddddddd |  | | |   |  | |  |  | | |  |  dd	ddddd |  | | |   |  | |  xfdD ]^| t	 fdd | t	 fd d | t	 fd!d | t	 fd"d q0W | t	 fd#d | t	 fd$d | t	 fd%d | t	 fd&d | t	 fd'd | t	 fd(d | t	 fd)d | t	 fd*d d S )+Ni  r   r   i  iA  r:   r   r5   r9   r  r<   i  i  r8   r  r   r  r   rW   r   r   r@  i  i  rL  r6   r   iX> )r   g      ?c                  s     S )Nr   r   )r   r   r   r   r   #  r   z0TestDateTime.test_computations.<locals>.<lambda>c                  s     S )Nr   r   )r   r   r   r   r   $  r   c                  s     S )Nr   r   )r   r   r   r   r   %  r   c                  s     S )Nr   r   )r   r   r   r   r   &  r   c                  s     S )Nr   r   )r   r   r   r   r   )  r   c                  s     S )Nr   r   )r   r   r   r   r   +  r   c                  s     S )Nr   r   )r   r   r   r   r   ,  r   c                  s     S )Nr   r   )r   r   r   r   r   -  r   c                  s     S )Nr   r   )r   r   r   r   r   .  r   c                  s      S )Nr   r   )r   r   r   r   /  r   c                  s      S )Nr   r   )r   r   r   r   0  r   c                  s      S )Nr   r   )r   r   r   r   2  r   )
r   r#   r   r   r   r   r   r   rZ   r[   )r$   r   rA  Zmillisecr-  rB  r   )r   r   r   r   r     sz    
" """
zTestDateTime.test_computationsc             C   s^   d}| j | }x4tD ],\}}}|||}||}| || qW | | |d d S )N)r<   r8   r   r   r   r   i   r9   )r   rl   rm   rn   r#   rz  r{  )r$   rw   ro   rp   rq   r   rr   rs   r   r   r   r   4  s    

zTestDateTime.test_picklingc          	   C   sr   |  ddddddd}xVttjd D ]D}t||}t|}| |jd | |jd | |j	d q&W d S )	Ni  r9   r8   r  0   r  i r   )
r   r   r   HIGHEST_PROTOCOLrm   rn   r#   r*  r+  r   )r$   r   r   r   r   r   r   r   test_more_pickling=  s    
zTestDateTime.test_more_picklingc             C   sF   d}t | }x4tD ],\}}}|||}||}| || qW d S )N)r<   r8   r   r   r   r   i   )r  rl   rm   rn   r#   )r$   rw   ro   rp   rq   r   rr   rs   r   r   r   test_pickling_subclass_datetimeF  s    
z,TestDateTime.test_pickling_subclass_datetimec             C   sP   dddg}d}| j | }x2|D ]*}x$tD ]}||dd}| || q(W qW d S )Ns@   cdatetime
datetime
(S'\x07\xdf\x0b\x1b\x14;\x01\x00\x10\x00'
tR.s#   cdatetime
datetime
(U
;  tR.s$   cdatetime
datetime
U
;  R.)i  rX   r|  r   r   r   i   r}  )r~  )r   r  r#   )r$   r  rw   r  r  rn   rs   r   r   r   r  N  s    


z!TestDateTime.test_compat_unpicklec             C   s`  dddddddg}| j | }| j | }| || | ||k | ||k | ||k | ||k  | ||k xtt|D ]}|d d  }|| d ||< | j | }| ||k  | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k  | ||k | ||k qW d S )	Ni  rX   r<  r   r   r  i>B r   )r   r#   rb   r   r   r   )r$   rw   r   r   r   r  r   r   r   test_more_compare`  s2    


zTestDateTime.test_more_comparec             C   sd   |  |j|j |  |j|j |  |j|j |  |j|j |  |j	|j
 |  |j|j d S )N)r#   rp  r*  rq  r+  rr  r   rs  r-  rt  r	  ru  r  )r$   r  r  r   r   r   verify_field_equality  s    z"TestDateTime.verify_field_equalityc             C   s6   dd l }|  }||}| j|}| || d S )Nr   )r   	localtimer   rD  r  )r$   r   rE  r  r  r   r   r   rF    s
    
zTestDateTime.test_fromtimestampc             C   s6   dd l }|  }||}| j|}| || d S )Nr   )r   Zgmtimer   utcfromtimestampr  )r$   r   rE  r  r  r   r   r   test_utcfromtimestamp  s
    
z"TestDateTime.test_utcfromtimestampzEST+05EDT,M3.2.0,M11.1.0c          	   C   s2  |  ddd}| | d |  ddddddd}| | d |  ddd	dd
}|jdd}| | j | |tdd  | | j | |tdd  |  dd	ddd
}| | j | | x\|  ddd|  dddgD ]<}y| }W n tk
r   Y qX | | j || qW d S )Ni  r   g     @r9   r5   r:   g 6@i  rX   r  )r  )ry   i'  r   )r   r#   r  r   rD  r   r   )r$   r   t0r   r   r   r   r   test_timestamp_naive  s&    
"z!TestDateTime.test_timestamp_naivec             C   s   | j dddtjd}| | d | j dddddddtjd}| | d | j dddddddttd	d
dd}| | d d S )Ni  r   )r   g        r9   r5   r:   g7  @r   )ry   rv   g 6@)r   r   r   r#   r  r   )r$   r   r   r   r   test_timestamp_aware  s    

z!TestDateTime.test_timestamp_awarezMSK-03c          	   C   s  xx| j j| j jgD ]b}|d}| |jd | |jd |d}y|d}W n tk
rf   Y n~X | |jd | |jd |d}| || |d}| || |d}| || |d	}| |jd | |jd
 |d}| || |d}| || |d}| |jd | |jd |d}| |jd | |jd |d}| |jd | |jd qW d S )Nr   gư>gưr   i?B g:0yEg1E2gHzg      i# gHz>g1E2>g<"2?gP?r   g      ?i  )r   rD  r  r#   r  r3  OSError)r$   Zftsr   r[  Z	minus_oner   r   r   r   r     sD    
z&TestDateTime.test_microsecond_roundingc          
   C   sZ  | j jjtjd}| }y| | j j|tjd| W n4 tt	fk
rl } z| 
t| W d d }~X Y nX | j jjtjddd}| }| | j j|tjd| d}|| }| ttf | j | W d Q R X | ttf | j | W d Q R X | | }| ttf | j | W d Q R X | ttf | j | W d Q R X d S )N)r   )r   r   )r   r  r3  i X)r   r   r   r   r   r  r#   rD  r   r  r.   r   r^   rZ   r   r  )r$   Zmin_dtZmin_tsexcZmax_dtZmax_tsr$  rE  r   r   r   test_timestamp_limits  s.    
 
z"TestDateTime.test_timestamp_limitsc             C   s$   xdD ]}|  t| jj| qW d S )N)gZbtgZbti)rZ   r   r   rD  )r$   rG  r   r   r   rH  	  s    
z&TestDateTime.test_insane_fromtimestampc             C   s$   xdD ]}|  t| jj| qW d S )N)gZbtgZbti)rZ   r   r   r  )r$   rG  r   r   r   test_insane_utcfromtimestamp	  s    
z)TestDateTime.test_insane_utcfromtimestampwin32z*Windows doesn't accept negative timestampsc             C   s   | j d d S )Ng)r   rD  )r$   r   r   r   !test_negative_float_fromtimestamp&	  s    z.TestDateTime.test_negative_float_fromtimestampc             C   s.   | j d}| ||  ddddddd d S )	Ngi  r   r   r   r   r   i~ )r   r  r#   )r$   r   r   r   r   $test_negative_float_utcfromtimestamp,	  s    z1TestDateTime.test_negative_float_utcfromtimestampc             C   sh   dd l }tdd}x<tdD ]0}| j }| j|  }t|| |krP qW | t|| | d S )Nr   r   )r   r5   )r   r   r   r   utcnowr  r   ZassertLessEqual)r$   r   Z	tolerancer   Zfrom_nowZfrom_timestampr   r   r   test_utcnow1	  s    

zTestDateTime.test_utcnowc          
   C   sT  d}d}t | j||}| j||}| || | t|| j | t|| j dddg}xT|D ]L\}}| j||d0 t | j||}| j||}| || W d Q R X qfW | jj}| |dd d	t	  | |d
d dt	  | |dd t
d	ddd  xddtj tjd ffD ]z\}}|dk rLd}	| }
nd}	|}
t|
d d\}}d|	|||}||d}| | t
|d | | | q.W d\}}|||}| | dt dt	   | | d | ||| | |ddjd  | t |dd W d Q R X | t |dd W d Q R X d S ) Nz2004-12-01 13:02:47.197z%Y-%m-%d %H:%M:%S.%f)u   2004-12-0113:02:47.197u   %Y-%m-%d%H:%M:%S.%f)u   200412-01 13:02:47.197u   %Y%m-%d %H:%M:%S.%f)u   2004-12-01 13:0247.197u   %Y-%m-%d %H:%M%S.%f)stringformatz+0002z%zr9   z-0002r7   z-00:02:01.000003r   r5   )rB   r   r   )r   r   )r   ZGMTr   r  r  r   z{}{:02d}{:02d} {}z%z %Z)r   )z	+1234 UTCz%z %Zr   r   r   z%Zz-2400z-000)	_strptimeZ_strptime_datetimer   strptimer#   rj   rk   r!  rN   MINUTEr   ra  r   rO   r  r  r   r]  r   rZ   r   )r$   r  r  r  r  inputsr  Z	tzsecondsrO   r  r   ry   rB   dtstrrM   rj  r   r   r   test_strptime?	  sX    



  zTestDateTime.test_strptimec             C   s:  | j j}| t |dd}W d Q R X |  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|fddd|fddd|fddd|fddd|fddd|fddd|fddd|fddd|fd dd!|fg
}xT|D ]L\}}	}
}d"| }| j||	|
|d#  ||	|
}| j|||d$ W d Q R X qW d S )%Nz01/02/3 04:05:06z%d/%m/%y %H:%M:%Si  r9   r   r:   r6   r<   r      z%dz1/02/03 4:5:6z%mz01/2/03 4:5:6z%Hz01/02/03 4:05:06z%Mz01/02/03 04:5:06z%Sz01/02/03 04:05:6z%jz2/03 04am:05:06z%j/%y %I%p:%M:%Sz%Iz02/03 4am:05:06z%wz6/04/03z%w/%U/%yz%Wz6/4/2003z%u/%W/%Yz%Vz%u/%V/%Gztest single digit )reasonr  r  target)msg)r   r  rZ   r   r!  r#   )r$   r  Znewdater\   r%  r  Zdt4r  r  r  r  r  r   r   r   test_strptime_single_digity	  s2    










z'TestDateTime.test_strptime_single_digitc             C   s$  |  dddddd}| | d | | |j|j|j|j|j|j|	 |
 t|jdd
  d d	f	 | }| |j|j | |j|j | |j|j | |j|j | |j|j | |j|j | |j|	  | |j|
 t|jdd
  d  | |jd	 d S )
Ni  r   r   r<   rL  !   )	i  r   r   r<   rL  r  r:   in  r   r   r   )r   r#   ro  r*  r+  r   r-  r	  r  rJ  r0  r   rp  rq  rr  rs  rt  ru  rv  rw  rx  )r$   r   ttr   r   r   test_more_timetuple	  s&    
 z TestDateTime.test_more_timetuplec          	   C   s   |  ddddddd}| |dd	 xJd
D ]B\\}}}ttd||d }|j|d}| |dd|  q.W y|d W n tk
r   Y nX d S )Ni  r   r   r<   rL  r  /   z%m %d %y %f %S %M %H %jz12 31 04 000047 33 22 06 366)))r  rc  z	33.000123))r  r   Z33r9   )ry   r   r   )r   z%zz-0200u   %y%m %H%M)r   r#   r]  r   r   r   r^  )r$   r   r   r   zr   r   r   r   test_more_strftime	  s    zTestDateTime.test_more_strftimec          	   C   sL   |  ddddddd}| | tddd | | tdddd d S )Ni  r5   r:   r  -   i  )r   r#   r   r   )r$   rM   r   r   r   test_extract	  s    zTestDateTime.test_extractc          	   C   s  t ddd}tdddd}| ddddddd}| jj}|||}| || |||d}| || | ||   | ||  | |||  |  | t| | t|| | t||| | t|||d | t|||dd	 | t|d
d | t||d | t|d
| |||tj}| 	|j
tj |||tjd}| 	|j
tj t }|||}| |  | | | | d S )Ni  r5   r:   r  r  i  )r   r   r   r9   r   r   )r   )r   r   r   r  r#   rZ   r[   r   r   rj   r   )r$   r   r   r  r  rM   r   r   r   test_combine	  s6    

zTestDateTime.test_combinec       
      C   s   | j }dddddddg}|| }| ||  d}xPd	D ]H\}}|d d  }|||< || }|jf ||i}	| ||	 |d7 }q:W |d
dd}| jt|jdd d S )Nr   r9   r5   r:   r6   r<   r8   r   ))r*  r9   )r+  r5   )r   r:   )r-  r6   )r	  r<   )r  r8   )r3     i  r<  i  )r*  )r   r#   r   rZ   r   )
r$   r  rw   r  r   r)   r  r  r  r  r   r   r   r  	  s    zTestDateTime.test_replaceZEDT4c          	   C   sF  | j  }tdd}|jttdddd}| | | | t	|j|| | t	|j| |j|dtddd }| ||| | |j|d	| G d
d dt
}| }| t|j| | |j|d|| G dd dt
}| }| t|j| G dd dt
}	|	 }
|j|
d}| t	 |  W d Q R X d S )N,   Z0044r;   )ry   EDT)r   r:   )ry   rB   )r   c               @   s   e Zd Zdd Zdd ZdS )z+TestDateTime.test_astimezone.<locals>.Bogusc             S   s   d S )Nr   )r$   rM   r   r   r   rN   
  r   z5TestDateTime.test_astimezone.<locals>.Bogus.utcoffsetc             S   s   t dS )Nr   )r   )r$   rM   r   r   r   rP   
  r   z/TestDateTime.test_astimezone.<locals>.Bogus.dstN)r-   r>   r?   rN   rP   r   r   r   r   Bogus
  s   r  c               @   s   e Zd Zdd Zdd ZdS )z/TestDateTime.test_astimezone.<locals>.AlsoBogusc             S   s   t dS )Nr   )r   )r$   rM   r   r   r   rN   
  r   z9TestDateTime.test_astimezone.<locals>.AlsoBogus.utcoffsetc             S   s   d S )Nr   )r$   rM   r   r   r   rP   
  r   z3TestDateTime.test_astimezone.<locals>.AlsoBogus.dstN)r-   r>   r?   rN   rP   r   r   r   r   	AlsoBogus
  s   r  c               @   s   e Zd Zdd Zdd ZdS )z,TestDateTime.test_astimezone.<locals>.Brokenc             S   s   dS )Nr   r   )r$   rM   r   r   r   rN   
  r   z6TestDateTime.test_astimezone.<locals>.Broken.utcoffsetc             S   s   dS )Nr   r   )r$   rM   r   r   r   rP   
  r   z0TestDateTime.test_astimezone.<locals>.Broken.dstN)r-   r>   r?   rN   rP   r   r   r   r   Broken
  s   r  )r   re   r@   r   r   r   r#   
astimezonerZ   r[   r   r   )r$   rM   r_  dt_utcZdt_fr  Zbogr  Zalsobogr  ZbrokenZ	dt_brokenr   r   r   test_astimezone
  s*    

zTestDateTime.test_astimezonec                s   G  fddd j }d} j | }||ddi} |j|  |jd  |jd  | |   |d|j|j |j	 d  d S )Nc                   s$   e Zd ZdZ fddZdd ZdS )z.TestDateTime.test_subclass_datetime.<locals>.CrA   c                s0   |  }|d} jj| f||}||_|S )Nr   )r   r  r   ri   r   )r  rw   r  r  r   r  )r$   r   r   ri   '
  s
    
z6TestDateTime.test_subclass_datetime.<locals>.C.__new__c             S   s   || j  | j | j S )N)r*  r+  r  )r$   r  r   r   r   r  .
  s    z6TestDateTime.test_subclass_datetime.<locals>.C.newmethN)r-   r>   r?   r  ri   r  r   )r$   r   r   r  $
  s   r  )i  r:   r   r   r/  )   r   r8   rA   i)
r   r#   r,   r  r   r0  r  r*  r+  r  )r$   r  rw   r\   r%  r   )r$   r   test_subclass_datetime"
  s    
z#TestDateTime.test_subclass_datetimec                s  G  fddd j }d}d}d}|| } ||  |jd | }d|ffd|ffd	|ffd
|dffdt|dd  t|dd   ffg}x|D ]x\}}	xn||fD ]b}
 jt|
|dF t	|
|}||	 } ||  ||j
d d  |jd W d Q R X qW qW d S )Nc                   s   e Zd Z fddZdS )zTTestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclassc                s    j j| f||}d|_|S )Nr8   )r   ri   r   )r  rw   r  r  )r$   r   r   ri   @
  s    z\TestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclass.__new__N)r-   r>   r?   ri   r   )r$   r   r   DateTimeSubclass?
  s   r  )i  r:   r   r   r     i@ z2003-04-14T12:30:15.123456gh͏TMAr8   rD  r  r  r  z%Y-%m-%dT%H:%M:%S.%fr  r   r5   )r  r  )r   )r   rd   r#   r   r  r   r   r!  rk   r  r   )r$   r  rw   r  Zutc_tsr  rE  r  r  r  r  r  rM   r   )r$   r   -test_subclass_alternate_constructors_datetime=
  s,    
&


z:TestDateTime.test_subclass_alternate_constructors_datetimec                s   ddddg}ddddg d	d
g}d t jt tddt tddg fdd|D }xV|D ]N}xH|D ]@}|j|d}j|d j|}|| W d Q R X qhW q^W d S )N)r   r   r   )il  r   r   )i  rX   r   )i  r6   r  )r   r   r   r   )r   r   r   ih )r   r   r   iG )r   r  r  iG r  r   r   )ry   r9   c                s4   g | ],} D ]"}D ]}j ||d |iqqqS )r   )r   )r   Z
date_tupleZ
time_tupler  )
base_timesr$   r  r   r   r   
  s   z<TestDateTime.test_fromisoformat_datetime.<locals>.<listcomp>)r  )r  )r   r   r   rW  r!  r   r  r#   )r$   r  
separatorsdtsrM   r  r  r  r   )r  r$   r  r   test_fromisoformat_datetimem
  s(    

z(TestDateTime.test_fromisoformat_datetimec          
   C   s   |  ddddddd}tddtddtd	d
dtddddtdddddg}|dd |D 7 }d tjttddg}|dd |D 7 }xD|D ]<}|j|d}| }| j|d | j |}W d Q R X qW d S )Ni  r   r  r  ipQ r6   )ry   r9   r<   r|  )ry   rB   rY   )ry   rB   r   r:   r   i@ )ry   rB   r   r   c             S   s   g | ]}d | qS )r   r   )r   r   r   r   r   r   
  s    z<TestDateTime.test_fromisoformat_timezone.<locals>.<listcomp>r   c             S   s   g | ]}t |qS r   )r   )r   r   r   r   r   r   
  s    )r   )tstr)r   r   r   r   r   rW  r!  r  )r$   Zbase_dtr  r  r  rM   r  r  r   r   r   test_fromisoformat_timezone
  s    

z(TestDateTime.test_fromisoformat_timezonec          
   C   sz   ddddddddd	g	}x^|D ]V}|  d
dddddd}|j|d}| j|d | j |}| || W d Q R X qW d S )Nr  r      u   ʁu   ᛇu   時u   🐍u   i  r   r   r   r   r  iu )r  )r  )r   rW  r!  r  r#   )r$   r  r  rM   r  r  r   r   r   test_fromisoformat_separators
  s    
z*TestDateTime.test_fromisoformat_separatorsc          
   C   sh   ddg}xZ|D ]R}|  ddddd}|j|d}| j|d	 | j |}| || W d Q R X qW d S )
Nr  r  i  r   r   r   r  )r  )r  )r   rW  r!  r  r#   )r$   r  r  rM   r  r  r   r   r   test_fromisoformat_ambiguous
  s    
z)TestDateTime.test_fromisoformat_ambiguousc             C   s   ddg}d t jt tddt tddt tdddg}d	d
dddg}xt|D ]\}}x|D ]}x|D ]}|dkrd|d d  }|dd |f }| j|dd|  d|i}	|	j|d}
| j|
d | j|
}| |	| W d Q R X qhW q^W qPW d S )N)i  r   r:   r  r  r  i@ )i  r   r:   r  r  r  r   r   )ry   r9   r<   r|  )ry   rB   ry   rB   r   r   r   i  r   r:   r   )r  )r  )	r   r   r   	enumerater   rW  r!  r  r#   )r$   Zdatetime_basesr  	timespecsiprE  r  r  new_microsecondsrM   r  r  r   r   r   test_fromisoformat_timespecs
  s&    

z)TestDateTime.test_fromisoformat_timespecsc             C   s   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g}xF|D ]>}| j |d( | t | j| W d Q R X W d Q R X qBW d S )Nr   u   z2009.04-19T03z2009-04.19T03z2009-04-19T0az2009-04-19T03:1a:45z2009-04-19T03:15:4az2009-04-19T03;15:45z2009-04-19T03:15;45z2009-04-19T03:15:4500:00z2009-04-19T03:15:45.2345z2009-04-19T03:15:45.1234567z 2009-04-19T03:15:45.123456+24:30z 2009-04-19T03:15:45.123456-24:30u   2009-04-10ᛇᛇᛇᛇᛇ12:15u   2009-0410T12:15u   2009-04-10T1215z2009-04-19T1z2009-04-19T12:3z2009-04-19T12:30:4z2009-04-19T12:z2009-04-19T12:30:z2009-04-19T12:30:45.z2009-04-19T12:30:45.123456+z2009-04-19T12:30:45.123456-z!2009-04-19T12:30:45.123456-05:00az2009-04-19T12:30:45.123-05:00az2009-04-19T12:30:45-05:00a)r  )r!  rZ   r   r   r  )r$   r  r  r   r   r   !test_fromisoformat_fails_datetime
  s@    
z.TestDateTime.test_fromisoformat_fails_datetimec          	   C   s6   d}|  ttt| | j| W d Q R X d S )Nu   2018-01-0301:0113)ri  r   reescaper   r   r  )r$   r  r   r   r   "test_fromisoformat_fails_surrogate  s    z/TestDateTime.test_fromisoformat_fails_surrogatec             C   s$   d}| j |}| |jtj d S )Nz2014-04-19T13:21:13+00:00)r   r  rj   r   r   r   )r$   r  rM   r   r   r   test_fromisoformat_utc  s    z#TestDateTime.test_fromisoformat_utcc             C   s`   G dd d| j }|ddddddd	ttd
ddd}|| }| || | || d S )Nc               @   s   e Zd ZdS )zBTestDateTime.test_fromisoformat_subclass.<locals>.DateTimeSubclassN)r-   r>   r?   r   r   r   r   r    s   r  i  r   r   r   r  r  i r   )ry   rB   )r   )r   r   r   r  rW  r#   rd   )r$   r  rM   r  r   r   r   r    s    z(TestDateTime.test_fromisoformat_subclassN);r-   r>   r?   r   r   r   r  r   rX  r  rk  r  r  r  r=  r   r   r   r  r  r  r  r  rF  r  r   run_with_tzr  r  r   r  rH  r  unittestZskipIfr+   platformr  r  r  r  r  r  r
  r  r  r  r  r  r  r  r!  r$  r%  r*  r+  r.  r/  r  r   r   r   r   r    sb   
,5D		!
))		:""!0#&r  c               @   s"   e Zd ZeZeddd ZdS )TestSubclassDateTimeznot appropriate for subclassesc             C   s   d S )Nr   )r$   r   r   r   r   #  s    z#TestSubclassDateTime.test_roundtripN)r-   r>   r?   r  r   r1  skipr   r   r   r   r   r3     s   r3  c               @   s   e Zd ZdZdS )SubclassTimer   N)r-   r>   r?   r(  r   r   r   r   r5  '  s   r5  c               @   s   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).TestTimec             C   sH   |  dd}| |jd | |jd | |jd | |jd d S )Nr   r   )r   r#   r-  r	  r  r3  )r$   r   r   r   r   r   .  s
    zTestTime.test_basic_attributesc             C   sL   |  dddd}| |jd | |jd | |jd | |jd d S )Nr   r   i@  )r   r#   r-  r	  r  r3  )r$   r   r   r   r   r  5  s
    z&TestTime.test_basic_attributes_nonzeroc             C   sp   |  dddd}t|}| |d |dd  }t|}| || |  |j|j|j|j	}| || d S )Nr   r9   r5   r:   z	datetime.r   )
r   r   rb   r'   r   r#   r-  r	  r  r3  )r$   r   r   r   r   r   r   r   >  s    zTestTime.test_roundtripc                sZ  ddddg}| j | | j | }| | | |k | |k | |k | |k  | |k xtt|D ]}|d d  }|| d ||< | j | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k qW xtD ] |  kd |  kd |  kd |  kd | t fdd | t fd	d | t fd
d | t fdd | t fdd | t fdd | t fdd | t fdd q\W d S )Nr   r9   r5   r:   FTc                  s    kS )Nr   r   )r   r   r   r   r   o  r   z)TestTime.test_comparing.<locals>.<lambda>c                  s    k S )Nr   r   )r   r   r   r   r   p  r   c                  s    kS )Nr   r   )r   r   r   r   r   q  r   c                  s    kS )Nr   r   )r   r   r   r   r   r  r   c                  s    kS )Nr   r   )r   r   r   r   r   s  r   c                  s    k S )Nr   r   )r   r   r   r   r   t  r   c                  s    kS )Nr   r   )r   r   r   r   r   u  r   c                  s    kS )Nr   r   )r   r   r   r   r   v  r   )	r   r#   rb   r   r   r   r   rZ   r[   )r$   rw   r   r   r  r   )r   r   r   test_comparingM  sL    



zTestTime.test_comparingc             C   s  |  dd |  dd | t| j dd | t| j dd |  dd |  dd | t| j dd | t| j dd |  ddd |  ddd | t| j ddd | t| j ddd |  dddd |  dddd | t| j dddd | t| j dddd d S )	Nr   r   r   r   r   r   i?B i@B )r   rZ   r   )r$   r   r   r   r=  x  s     z'TestTime.test_bad_constructor_argumentsc             C   s   |  ddd}|  ddd}| || | t|t| |di}d||< | t|d | || d | || d |  ddd}|  ddd}| || | t|t| |di}d||< | t|d | || d | || d d S )Nr   r  r  r   r9   r   r6   )r   r#   r   r   )r$   r   r>  r?  r   r   r   r     s$    zTestTime.test_hash_equalityc             C   s  |  dddd}| | d | | t| |   }| | d | | t| | j dd}| | d | | t| | j d	d}| | d
 | | t| | j dd}| | d | | t| | j dd}| | d | | t| | j dd}| | d | | t| | j dd}| | d | | t| | j ddddd}| |jddd | |jddd | |jddd | |jddd  | |jd!dd" | |jd#dd" | jt|jd$d | jt|jd%d | j dddd&d}| |jddd' | j dddd(d}| |jddd) | |jd!dd* | |jd#dd d S )+Nr:   r6   r   rc  z04:05:01.000123z00:00:00)r3  z00:00:00.000001r   z00:00:00.000010r   z00:00:00.000100i  z00:00:00.001000i'  z00:00:00.010000i z00:00:00.100000r   r   r   i@ )r-  r	  r  r3  ry   )r  Z12rB   z12:34r   z12:34:56r   z12:34:56.123r   z12:34:56.123456r  Zmonkeyu   iL@ z12:34:56.999r   z12:34:56.000z12:34:56.000000)r   r#   rW  r   rZ   r   )r$   r   r   r   r   rX    sN    zTestTime.test_isoformatc       	      C   s   dt ddfdt ddfdt ddd	fd
t ddddfdt dddddfg}ddtjfdtt dfg}|dd |D 7 }| ddd}d}x<|D ]4\}}|j|d}|| }| j|d W d Q R X qW d S )Nz05:00r6   )ry   z02:00r9   z06:27r<   r|  )ry   rB   z12:32:30r   rY   r  )ry   rB   r   z02:04:09.123456r:   r   i@ )ry   rB   r   r   )r   Nz+00:00r   c             S   s2   g | ]*\}}d D ]\}}|| t || fqqS )))r  r   )r  r   )r   )r   r  r   r  r  r   r   r   r     s   z4TestTime.test_isoformat_timezone.<locals>.<listcomp>r  z12:37:09)r   )r  )r   r   r   r   r   r!  )	r$   r  r  Zt_baser  r  r  r   r  r   r   r   r    s$    
z TestTime.test_isoformat_timezonec             C   s"   | j dd}| jt|jdd d S )Nr   )r  r5   )r  )r   rZ   r[   rW  )r$   r   r   r   r   test_1653736  s    zTestTime.test_1653736c             C   s\   |  dddd}| |dd | |dd y|d	 W n tk
rV   Y nX d S )
Nr   r9   r5   r:   z%H %M %S %fz01 02 03 000004z	'%z' '%Z'z'' ''u   %H%M)r   r#   r]  r^  )r$   r   r   r   r   r`    s    zTestTime.test_strftimec          	   C   s  |  dddd}| |dt| | td |d W d Q R X G dd	 d	| j }|dddd}| |dd	 G d
d d| j }|dddd}| |dt| xNdD ]F}| |||| | |||| | ||d qW d S )Nr   r9   r5   r:   r   zmust be str, not intrc  c               @   s   e Zd Zdd ZdS )zTestTime.test_format.<locals>.Ac             S   s   dS )Nrd  r   )r$   r   r   r   re    s    z'TestTime.test_format.<locals>.A.__str__N)r-   r>   r?   re  r   r   r   r   rd    s   rd  c               @   s   e Zd Zdd ZdS )zTestTime.test_format.<locals>.Bc             S   s   dS )Nrf  r   )r$   rg  r   r   r   r]    s    z(TestTime.test_format.<locals>.B.strftimeN)r-   r>   r?   r]  r   r   r   r   rf    s   rf  )z%H %M %S)r   r#   rh  r   ri  r[   r]  )r$   r   rd  r   rf  r   rj  r   r   r   rk    s    
zTestTime.test_formatc          	   C   s   |  t| ddddd |  t| ddddd |  t| d	ddd
d |  t| dddd	d |  t| ddd	d	d d S )Nr   r9   r5   r:   z01:02:03.000004r   i  z10:02:03.004000r   i z00:02:03.400000r   z12:02:03r   r  z23:15:00)r#   r   r   )r$   r   r   r   r   #  s
    zTestTime.test_strc          	   C   s   d| j j }| t|  ddddd|  | t|  ddddd	|  | t|  d
dddd|  | t|  dddd
d|  | t|  ddd
d
d|  d S )Nz	datetime.r   r9   r5   r:   z%s(1, 2, 3, 4)r   i  z%s(10, 2, 3, 4000)r   i z%s(0, 2, 3, 400000)r   z%s(12, 2, 3)r   r  z
%s(23, 15))r   r-   r#   r   )r$   r)   r   r   r   r   *  s    



zTestTime.test_reprc             C   sN   |  | jj| j |  | jj| j |  | jjt | | jj| jjk d S )N)rd   r   r   r^   r   r   rb   )r$   r   r   r   r   7  s    zTestTime.test_resolution_infoc             C   s^   d}| j | }x4tD ],\}}}|||}||}| || qW | | |d d S )N)r   r   r  i   r9   )r   rl   rm   rn   r#   rz  r{  )r$   rw   ro   rp   rq   r   rr   rs   r   r   r   r   =  s    

zTestTime.test_picklingc             C   sF   d}t | }x4tD ],\}}}|||}||}| || qW d S )N)r   r   r  i   )r5  rl   rm   rn   r#   )r$   rw   ro   rp   rq   r   rr   rs   r   r   r   test_pickling_subclass_timeF  s    
z$TestTime.test_pickling_subclass_timec             C   sP   dddg}d}| j | }x2|D ]*}x$tD ]}||dd}| || q(W qW d S )Ns,   cdatetime
time
(S'\x14;\x10\x00\x10\x00'
tR.s   cdatetime
time
(U;  tR.s   cdatetime
time
U;  R.)r   r   r  i   r}  )r~  )r   r  r#   )r$   r  rw   r  r  rn   rs   r   r   r   r  N  s    


zTestTime.test_compat_unpicklec             C   sh   | j }| |d | |dd | |ddd | |dddd | |d | |  d S )Nr   r   )r   rb   )r$   r  r   r   r   r   [  s    zTestTime.test_boolc       
      C   s   | j }ddddg}|| }| ||  d}xPdD ]H\}}|d d  }|||< || }|jf ||i}	| ||	 |d7 }q4W |d}| jt|jdd | jt|jd	d
 | jt|jdd | jt|jdd d S )Nr   r9   r5   r:   r   ))r-  r6   )r	  r<   )r  r8   )r3  r  r   )r-  r   )r	  r   )r  i@B )r3  )r   r#   r   rZ   r   )
r$   r  rw   r  r   r)   r  r  r  r  r   r   r   r  e  s"    zTestTime.test_replacec             C   s8   G dd d| j }|dd}| t|jdd| d S )Nc               @   s   e Zd ZdS )z4TestTime.test_subclass_replace.<locals>.TimeSubclassN)r-   r>   r?   r   r   r   r   TimeSubclass  s   r:  r   r  r   )r-  )r   rj   rk   r   )r$   r:  rY  r   r   r   r  ~  s    
zTestTime.test_subclass_replacec                s   G  fddd j }d} j | }||ddi} |j|  |jd  |jd  | |   |d|j|j d  d S )Nc                   s$   e Zd ZdZ fddZdd ZdS )z&TestTime.test_subclass_time.<locals>.CrA   c                s0   |  }|d} jj| f||}||_|S )Nr   )r   r  r   ri   r   )r  rw   r  r  r   r  )r$   r   r   ri     s
    
z.TestTime.test_subclass_time.<locals>.C.__new__c             S   s   || j  | j S )N)r-  r  )r$   r  r   r   r   r    s    z.TestTime.test_subclass_time.<locals>.C.newmethN)r-   r>   r?   r  ri   r  r   )r$   r   r   r    s   r  )r:   r6   r<   r   r8   rA   i)	r   r#   r,   r  r   rW  r  r-  r  )r$   r  rw   r\   r%  r   )r$   r   test_subclass_time  s    
zTestTime.test_subclass_timec          	   C   sp   d}x4ddt ddfD ] }| t| j||dd    qW | td  | tdgt| d W d Q R X d S )	Nz2:59.0r  9r      ÿr   z^bad tzinfo state arg$rv   )chrrZ   r[   r   ri  r  r   )r$   r  Z	hour_byter   r   r   r    s    
z!TestTime.test_backdoor_resistanceN)r-   r>   r?   r   r   r   r  r   r7  r=  r   rX  r  r8  r`  rk  r   r   r   r   r9  r  r   r  r  r;  r  r   r   r   r   r6  *  s.   	+4	
r6  c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
TZInfoBasec             C   s   | j }G dd dt}|ddd| d}|tkr4dp6d}| | | t|tkrVd	pXd
d}| | | | | | d S )Nc               @   s    e Zd Zdd Zdd ZeZdS )z7TZInfoBase.test_argument_passing.<locals>.introspectivec             S   s   |rdp
dS )Nrealnoner   )r$   rM   r   r   r   rO     r   z>TZInfoBase.test_argument_passing.<locals>.introspective.tznamec             S   s   t |r
dpddS )NrA   i)rB   )r   )r$   rM   r   r   r   rN     s    zATZInfoBase.test_argument_passing.<locals>.introspective.utcoffsetN)r-   r>   r?   rO   rN   rP   r   r   r   r   introspective  s   rB  r   r9   r5   )r   rA  r@  irA   )rB   )r   r   r   r#   rO   r   rN   rP   )r$   r  rB  objr  r   r   r   test_argument_passing  s    z TZInfoBase.test_argument_passingc             C   sz   | j }| jt|ddddd G dd dt}| jt|ddd|d G dd dt}| }|ddd|d}| |j| d S )Nr   r   )r   c               @   s   e Zd Zdd Zdd ZdS )z3TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTryc             S   s   d S )Nr   )r$   r   r   r   rJ     r   z<TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.__init__c             S   s   d S )Nr   )r$   rM   r   r   r   rN     r   z=TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.utcoffsetN)r-   r>   r?   rJ   rN   r   r   r   r   NiceTry  s   rE  c               @   s   e Zd Zdd Zdd ZdS )z5TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTryc             S   s   d S )Nr   )r$   r   r   r   rJ     r   z>TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.__init__c             S   s   d S )Nr   )r$   rM   r   r   r   rN     r   z?TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.utcoffsetN)r-   r>   r?   rJ   rN   r   r   r   r   	BetterTry  s   rF  )r   rZ   r[   objectr   rj   )r$   r  rE  rF  r   r   r   r   r   test_bad_tzinfo_classes  s    z"TZInfoBase.test_bad_tzinfo_classesc       
   
   C   s   G dd dt }| j}xdD ]\}}|tkrB|ddd||d}n$|tkrf|dddddd||d}n |rt|}t|d	\}}d
|dk rdpd||f }	t|tr| }| t	|d|	  q| 
tt	| qW d S )Nc               @   s   e Zd Zdd Zdd ZdS )z6TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgyc             S   s   t |d| _d S )N)rB   )r   rH   )r$   rH   r   r   r   rJ     s    z?TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.__init__c             S   s   | j S )N)rH   )r$   rM   r   r   r   rN     s    z@TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.utcoffsetN)r-   r>   r?   rJ   rN   r   r   r   r   Edgy  s   rI  ))i`F)iaT)i  T)i  Fr   r9   r5   )r   r<   r   z%c%02d:%02dr   r  r  z01:02:03)r   r   r   r   r   r  rC   timetzr#   r   rZ   r   )
r$   rI  r  rH   Zlegitr   Zaofsr   r6  tagr   r   r   test_utc_offset_out_of_bounds  s    
z(TZInfoBase.test_utc_offset_out_of_boundsc             C   s  | j }G dd dt}x^|ddd|dddd d|ddd| dfD ].}| |  | |  | |  qDW G dd dt}|ddd| d}| | tdd | | td	d | | d
 G dd dt}|ddd| d}| t	|j | t	|j | t	|j G dd dt}|ddd| d}| t
|j | t
|j G dd dt}|ddd| d}| | tdd | | tdd d S )Nc               @   s$   e Zd Zdd Zdd Zdd ZdS )z*TZInfoBase.test_tzinfo_classes.<locals>.C1c             S   s   d S )Nr   )r$   rM   r   r   r   rN     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C1.utcoffsetc             S   s   d S )Nr   )r$   rM   r   r   r   rP     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C1.dstc             S   s   d S )Nr   )r$   rM   r   r   r   rO     r   z1TZInfoBase.test_tzinfo_classes.<locals>.C1.tznameN)r-   r>   r?   rN   rP   rO   r   r   r   r   C1  s   rM  r   )r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )z*TZInfoBase.test_tzinfo_classes.<locals>.C3c             S   s
   t ddS )Nia)rB   )r   )r$   rM   r   r   r   rN     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C3.utcoffsetc             S   s
   t ddS )Ni  )rB   )r   )r$   rM   r   r   r   rP     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C3.dstc             S   s   dS )Nanamer   )r$   rM   r   r   r   rO     r   z1TZInfoBase.test_tzinfo_classes.<locals>.C3.tznameN)r-   r>   r?   rN   rP   rO   r   r   r   r   C3  s   rO  ia)rB   i  rN  c               @   s$   e Zd Zdd Zdd Zdd ZdS )z*TZInfoBase.test_tzinfo_classes.<locals>.C4c             S   s   dS )NrN  r   )r$   rM   r   r   r   rN     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C4.utcoffsetc             S   s   dS )Nr8   r   )r$   rM   r   r   r   rP     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C4.dstc             S   s   dS )Nr   r   )r$   rM   r   r   r   rO     r   z1TZInfoBase.test_tzinfo_classes.<locals>.C4.tznameN)r-   r>   r?   rN   rP   rO   r   r   r   r   C4  s   rP  c               @   s   e Zd Zdd Zdd ZdS )z*TZInfoBase.test_tzinfo_classes.<locals>.C6c             S   s
   t ddS )Ni)ry   )r   )r$   rM   r   r   r   rN     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C6.utcoffsetc             S   s
   t ddS )Nr   )ry   )r   )r$   rM   r   r   r   rP     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C6.dstN)r-   r>   r?   rN   rP   r   r   r   r   C6  s   rQ  c               @   s   e Zd Zdd Zdd ZdS )z*TZInfoBase.test_tzinfo_classes.<locals>.C7c             S   s
   t ddS )Nrn  )r   )r   )r$   rM   r   r   r   rN     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C7.utcoffsetc             S   s
   t ddS )Ni)r   )r   )r$   rM   r   r   r   rP     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C7.dstN)r-   r>   r?   rN   rP   r   r   r   r   C7  s   rR  rn  )r   i)r   r   r   rN   rP   rO   r#   r   rZ   r[   r   )r$   r  rM  r   rO  rP  rQ  rR  r   r   r   test_tzinfo_classes  s4    zTZInfoBase.test_tzinfo_classesc             C   s  | j }G dd dt}|ddd| d}|jdd}|jdd}|jd	d}xd|||fD ]V}xP|||fD ]B}x<ttttttfD ](}	|	||}
|	|j	|j	}| 
|
| q~W qhW qXW |tk	r|jd| d
}|jd| d
}|jd	| d
}x|||fD ]}x|||fD ]}||k||k  }
||ks0||krJ||ksD||krJd}n6||  krb|krln nd}n||kr|d}nd}| 
|
| qW qW d S )Nc               @   s   e Zd Zdd ZdS )z=TZInfoBase.test_aware_compare.<locals>.OperandDependentOffsetc             S   s$   |j dk rt|j dS tddS d S )Nr   )rB   r   )r	  r   )r$   r   r   r   r   rN   "  s    
zGTZInfoBase.test_aware_compare.<locals>.OperandDependentOffset.utcoffsetN)r-   r>   r?   rN   r   r   r   r   OperandDependentOffset!  s   rT  r  r   r   )r   r5   )r	  rX   )r	  r   r   r   r   )r   r   r   r   r   r   r   r   r	   r	  r#   r   )r$   r  rT  r  d0rU  r8  xr5  opr  r  r   r   r   test_aware_compare  s6    	

(
zTZInfoBase.test_aware_compareN)r-   r>   r?   rD  rH  rL  rS  rX  r   r   r   r   r?    s
   0r?  c               @   s   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) 
TestTimeTZc             C   sP   |   }| |jd | |jd | |jd | |jd | |j d S )Nr   )r   r#   r-  r	  r  r3  r   r   )r$   r   r   r   r   
test_emptyP  s    zTestTimeTZ.test_emptyc                s"  t ddd}t ddd}t ddd	}td
d|d}tdd|d}tdd|d}tdd td|d| |j| | |j| | |j| |  j | j| | | tdd | | tdd | | tdd |    | t|jd | |	 d | |	 d | |	 d |  	  | t|j	d | |
 tdd | |
 tdd | |
 td	d |  
  | t|j
d | t|t| | t|t| | t|t| | || | || | || |   | t fdd | t fdd | t|d | t|d | t|d | t d | td | | d | | d | | d |   d |  d d}| t||d  | t||d  | t||d  | t |d   | t|d!  | |d"d# | |d$d% | |d$d& t d'd(}td)d*|d}| |d+d, G d-d. d.t}	td/d	d0|	 d}
| |
d1d2 | t|
jd3 d4| jjkrd5|	_| t|
jd3 d S )6Nirv   r   r   r   r7   r   METr5   r8   r  )r   r   r/  (   )r3  )r3  r   )rB   zno argsc                  s    k S )Nr   r   )r  t5r   r   r     r   z'TestTimeTZ.test_zones.<locals>.<lambda>c                  s    k S )Nr   r   )r  r]  r   r   r     r   z07:47:00-05:00z12:47:00+00:00z13:47:00+01:00z00:00:00.000040z00:00:00.000040+00:00zdatetime.timez(7, 47, tzinfo=est)z(12, 47, tzinfo=utc)z(13, 47, tzinfo=met)z(0, 0, 0, 40)z(0, 0, 0, 40, tzinfo=utc)z%H:%M:%S %%Z=%Z %%z=%zz07:47:00 %Z=EST %z=-0500z%H:%M:%S %Z %zz12:47:00 UTC +0000z13:47:00 MET +0100iaz%z %Z %%z%%Zr   r   z%H:%M %%Z='%Z' %%z='%z'z"23:59 %Z='%z %Z %%z%%Z' %z='-2359'c               @   s   e Zd ZdZdd ZdS )z(TestTimeTZ.test_zones.<locals>.BadtznamerA   c             S   s   | j S )N)r   )r$   rM   r   r   r   rO     r   z/TestTimeTZ.test_zones.<locals>.Badtzname.tznameN)r-   r>   r?   r   rO   r   r   r   r   	Badtzname  s   r^  r9   r:   z%H:%M:%Sz02:03:04z%Zr3   u   )r@   r   r#   r   r   rN   r   rZ   r[   rO   rP   r   r   r   rW  r   r]  r,   r-   r   r   )r$   estr   metr   r   r  r   Zyuckr^  r   r   )r  r]  r   
test_zonesX  s    

zTestTimeTZ.test_zonesc             C   s   | j ddddtddd}| j ddddtddd}| t|t| | j d	d
ddtddd}| j d	dddtddd}| t|t| d S )Nr   r   r9   r5   i  r   )r   i  r   r   r<   r   ir  i)r   r@   r#   r   )r$   r   r   r   r   r   test_hash_edge_cases  s    zTestTimeTZ.test_hash_edge_casesc       	      C   s   d}| j | }x4tD ],\}}}|||}||}| || qW | | |d tdd}| j ddd|d}xhtD ]`\}}}|||}||}| || | |j	t | |
 tdd	 | | d q|W | | |d d S )
N)r   r   r  i   r9   iru   r6   r<   r8   )r   )rB   )r   rl   rm   rn   r#   rz  r{  rQ   rd   r   rN   r   rO   )	r$   rw   ro   rp   rq   r   rr   rs   tinfor   r   r   r     s"    



zTestTimeTZ.test_picklingc             C   s   dddg}t dd}| jdddd	|d
}xl|D ]d}x^tD ]V}||dd}| ||t| | |jt  | | tdd | |	 d q8W q.W d S )Ns   cdatetime
time
(S'\x05\x06\x07\x01\xe2@'
ctest.datetimetester
PicklableFixedOffset
(tR(dS'_FixedOffset__offset'
cdatetime
timedelta
(I-1
I68400
I0
tRsS'_FixedOffset__dstoffset'
NsS'_FixedOffset__name'
S'cookie'
sbtR.s   cdatetime
time
(U@ctest.datetimetester
PicklableFixedOffset
)R}(U_FixedOffset__offsetcdatetime
timedelta
(JJ0 K tRU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieubtR.s   cdatetime
time
U@ctest.datetimetester
PicklableFixedOffset
)R}(U_FixedOffset__offsetcdatetime
timedelta
JJ0 K RU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieubR.iru   r6   r<   r8   i@ )r   r}  )r~  )rB   )
rQ   r   r  r#   r   rd   r   rN   r   rO   )r$   r  rc  r  r  rn   rs   r   r   r   r    s    


zTestTimeTZ.test_compat_unpicklec             C   s|   | j }|dtddd}| | |dtddd}| | |dtddd}| | |ddtd	dd}| | d S )
Nr   ir   )r   r6   i,  r   r   i  )r   r@   rb   )r$   r  r   r   r   r   test_more_bool  s    


zTestTimeTZ.test_more_boolc             C   s\  | j }tdd}ttddd}dddd	|g}|| }| ||  d
}x^ddddd|ffD ]H\}}|d d  }	||	|< ||	 }
|jf ||i}| |
| |d7 }q^W | | d |jd d}| |j | |  |j|d}| || | |j|j |d}| j	t
|jdd | j	t
|jdd | j	t
|jdd | j	t
|jdd d S )Nr   z+100i8)rB   z-200r   r9   r5   r:   r   )r-  r6   )r	  r<   )r  r8   )r3  r  r   )r   r   )r-  r   )r	  )r  i@B )r3  )r   r@   r   r#   r   rO   r   r   rj   rZ   r   )r$   r  z100zm200rw   r  r   r)   r  r  r  r  base2base3r   r   r   r    s<    
zTestTimeTZ.test_replacec             C   s   t ddd}t ddd}| || |jd d}| || |jtd dd}| || |jtddd}| || G dd dt}| }|j|d}|j|d}| | td	d
 | | tdd
 | || |j| d}| ||k  d S )Nr   r9   r5   )r   r   r   c               @   s   e Zd Zdd Zdd ZdS )z-TestTimeTZ.test_mixed_compare.<locals>.Variesc             S   s   t dd| _d S )NrL  )rB   )r   rH   )r$   r   r   r   rJ   5  s    z6TestTimeTZ.test_mixed_compare.<locals>.Varies.__init__c             S   s   |  j tdd7  _ | j S )Nr   )rB   )rH   r   )r$   r   r   r   r   rN   7  s    z7TestTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetN)r-   r>   r?   rJ   rN   r   r   r   r   Varies4  s   ri  r   )rB   r   )	r   r#   r   r@   r   r   rN   r   rb   )r$   r   r   ri  vr   r   r   r  (  s$    zTestTimeTZ.test_mixed_comparec             C   s   ddg}d}d}d}d}|t t||||7 }d tjttddttd	d
dg}xb|D ]Z}xT|D ]L}| j|d|i}	|	 }
| j|
d | j	|
}| 
|	| W d Q R X qdW qZW d S )N)r   r   r   r   )r   r   r   i?B )r   r   r   )r6   r  )r:   r  )r   i i[
 r9   )ry   r<   r|  )ry   rB   r   )r   )list	itertoolsproductr   r   r   r   rW  r!  r  r#   )r$   Ztime_examplesZhhZmmssZusecr  Zttupr  r   r   t_rtr   r   r   r  F  s"    

zTestTimeTZ.test_fromisoformatc          
   C   s   |  dddd}tddtddtdd	d
tddddtdddddg}|dd |D 7 }d tjttddg}|dd |D 7 }xD|D ]<}|j|d}| }| j|d | j |}W d Q R X qW d S )Nr   r  r  ipQ r6   )ry   r9   r<   r|  )ry   rB   rY   )ry   rB   r   r:   r   i@ )ry   rB   r   r   c             S   s   g | ]}d | qS )r   r   )r   r   r   r   r   r   j  s    z:TestTimeTZ.test_fromisoformat_timezone.<locals>.<listcomp>r   c             S   s   g | ]}t |qS r   )r   )r   r   r   r   r   r   o  s    )r   )r   )r   r   r   r   r   rW  r!  r  )r$   Z	base_timer  r  r  r   r   ro  r   r   r   r!  `  s    

z&TestTimeTZ.test_fromisoformat_timezonec             C   s   ddg}d t jt tddt tddt tdddg}d	d
dddg}xt|D ]\}}x|D ]}x|D ]}|dkrd|d d  }|dd |f }| j|dd|  d|i}	|	j|d}
| j|
d | j|
}| |	| W d Q R X qhW q^W qPW d S )N)r  r  r  i@ )r  r  r  r   r   )ry   r9   r<   r|  )ry   rB   ry   rB   r   r   r   i  r   r   r   r   )r  )r   )	r   r   r   r&  r   rW  r!  r  r#   )r$   Z
time_basesr  r'  r(  rE  r  Zt_tupler)  r   r   ro  r   r   r   r*  y  s&    

z'TestTimeTZ.test_fromisoformat_timespecsc             C   sz   ddddddddd	d
dddddddddddg}xF|D ]>}| j |d( | t | j| W d Q R X W d Q R X q4W d S )Nr   u   1200z12:z12:30:z	12:30:15.1z12:3z12:30:1z1a:30:45.334034z12:a0:45.334034z12:30:a5.334034z12:30:45.1234z12:30:45.1234567z12:30:45.123456+24:30z12:30:45.123456-24:30u   12：30：45u   12:30:45․123456z	12:30:45az12:30:45.123az12:30:45.123456az12:30:45.123456+12:00:30a)r  )r!  rZ   r   r   r  )r$   r  r  r   r   r   r    s2    
z#TestTimeTZ.test_fromisoformat_failsc          
   C   sL   dd l }dd |dg}x.|D ]&}| t | j| W d Q R X qW d S )Nr   s   12:30:45z12:30:45)r  r  rZ   r[   r   r  )r$   r  r  r  r   r   r   r    s
    
z-TestTimeTZ.test_fromisoformat_fails_typeerrorc             C   sP   G dd d| j }|ddddtjd}|| }| || | || d S )Nc               @   s   e Zd ZdS )z<TestTimeTZ.test_fromisoformat_subclass.<locals>.TimeSubclassN)r-   r>   r?   r   r   r   r   r:    s   r:  r   r   r  i )r   )r   r   r   r  rW  r#   rd   )r$   r:  ZtscZtsc_rtr   r   r   r    s
    z&TestTimeTZ.test_fromisoformat_subclassc                s   G  fddd j }ddddtddd	f} j | }||d
di} |j|  |jd  |jd  | |   |d|j|j	 d  d S )Nc                   s$   e Zd ZdZ fddZdd ZdS )z*TestTimeTZ.test_subclass_timetz.<locals>.CrA   c                s0   |  }|d} jj| f||}||_|S )Nr   )r   r  r   ri   r   )r  rw   r  r  r   r  )r$   r   r   ri     s
    
z2TestTimeTZ.test_subclass_timetz.<locals>.C.__new__c             S   s   || j  | j S )N)r-  r  )r$   r  r   r   r   r    s    z2TestTimeTZ.test_subclass_timetz.<locals>.C.newmethN)r-   r>   r?   r  ri   r  r   )r$   r   r   r    s   r  r:   r6   r<   i  irv   r   r   r8   rA   i)
r   r@   r#   r,   r  r   rN   r  r-  r  )r$   r  rw   r\   r%  r   )r$   r   test_subclass_timetz  s    
zTestTimeTZ.test_subclass_timetzN)r-   r>   r?   r   r   rZ  ra  rb  r   r  rd  r  r  r  r!  r*  r  r  r  rq  r   r   r   r   rY  M  s    W
"'

rY  c               @   s   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Z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d%d&d' Zed(d)d* Zed(d+d, Zd-d. Zd/d0 Zd1d2 Zd3S )4TestDateTimeTZc          	   C   s   |  ddddddd}| |jd | |jd | |jd | |jd | |jd | |jd | |jd | |j	d  d S )Nr   r9   r5   r:   r6   r<   r8   )
r   r#   r*  r+  r   r-  r	  r  r3  r   )r$   rM   r   r   r   test_trivial  s    zTestDateTimeTZ.test_trivialc                sT  | j dddtddd | j tdddddd	td
dd|  k  |  k |  k |    |  | j dddddtddd | j dddddtddd|   | j dddddtddd |  k | j dddddtddd |  k  | j dddddtdddd |  k | j dddddtdddd |  k | j j|   |  | t  k W d Q R X G dd dt	}| j ddd| d|   |  |  ddd |   G dd dt	}| j ddd| d | j dddtddd| t
 fdd d S )Nr   i  r   )r   r   r   r   r   i?B iar9   r5   r/     r   )r   r  )r   r3  c               @   s   e Zd Zdd ZdS )z4TestDateTimeTZ.test_even_more_compare.<locals>.Naivec             S   s   d S )Nr   )r$   rM   r   r   r   rN   $  r   z>TestDateTimeTZ.test_even_more_compare.<locals>.Naive.utcoffsetN)r-   r>   r?   rN   r   r   r   r   Naive#  s   ru  r6   r<   r8   c               @   s   e Zd Zdd ZdS )z4TestDateTimeTZ.test_even_more_compare.<locals>.Bogusc             S   s
   t ddS )Ni  )rB   )r   )r$   rM   r   r   r   rN   0  s    z>TestDateTimeTZ.test_even_more_compare.<locals>.Bogus.utcoffsetN)r-   r>   r?   rN   r   r   r   r   r  /  s   r  c                  s    kS )Nr   r   )r   r   r   r   r   4  r   z7TestDateTimeTZ.test_even_more_compare.<locals>.<lambda>)r   r@   r   rb   r#   r   r   rZ   r[   r   r   )r$   ru  r  r   )r   r   r   test_even_more_compare  sH    z%TestDateTimeTZ.test_even_more_comparec       	      C   s  d}| j | }x4tD ],\}}}|||}||}| || qW | | |d tdd}| j |d|i}| j dddtdddd	}xhtD ]`\}}}|||}||}| || | 	|j
t | | tdd
 | | d qW | | |d d S )N)r<   r8   r   r   r   r   i   r9   iru   r   r   r   r   )r   )rB   )r   rl   rm   rn   r#   rz  r{  rQ   r@   rd   r   rN   r   rO   )	r$   rw   ro   rp   rq   r   rr   rs   rc  r   r   r   r   6  s$    



zTestDateTimeTZ.test_picklingc             C   s   dddg}d}t dd}| j|d|i}xf|D ]^}xXtD ]P}||dd	}| || | |jt  | | tdd
 | | d q8W q.W d S )Ns   cdatetime
datetime
(S'\x07\xdf\x0b\x1b\x14;\x01\x01\xe2@'
ctest.datetimetester
PicklableFixedOffset
(tR(dS'_FixedOffset__offset'
cdatetime
timedelta
(I-1
I68400
I0
tRsS'_FixedOffset__dstoffset'
NsS'_FixedOffset__name'
S'cookie'
sbtR.s   cdatetime
datetime
(U
;@ctest.datetimetester
PicklableFixedOffset
)R}(U_FixedOffset__offsetcdatetime
timedelta
(JJ0 K tRU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieubtR.s   cdatetime
datetime
U
;@ctest.datetimetester
PicklableFixedOffset
)R}(U_FixedOffset__offsetcdatetime
timedelta
JJ0 K RU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieubR.)i  rX   r|  r   r   r   i@ iru   r   r}  )r~  )rB   )	rQ   r   r  r#   rd   r   rN   r   rO   )r$   r  rw   rc  r  r  rn   rs   r   r   r   r  M  s    


z#TestDateTimeTZ.test_compat_unpicklec             C   sr   | j dddtddd}t| | j tdddddd	td
dd}t| | j dddtddd}| tt| d S )Nr   i  r   )r   r   r   r   r   i?B iar6   i`)r   r@   r   r   rZ   r   )r$   r   r   r   r   test_extreme_hashesr  s    z"TestDateTimeTZ.test_extreme_hashesc             C   s  t dd}t dd}t dd}tddd	d
d|d}tddd	dd|d}tddd	dd|d}| |j| | |j| | |j| | | tdd | | tdd | | tdd | | d | | d | | d | t|t| | t|t| | t|t| | || | || | || | t|d | t|d | t|d d}| t	||d  | t	||d  | t	||d  d S )Nirv   r   r   r   r[  i  r5   r  r8   r  )r   r   r/  )rB   z2002-03-19 07:47:00-05:00z2002-03-19 12:47:00+00:00z2002-03-19 13:47:00+01:00zdatetime.datetime(2002, 3, 19, z7, 47, tzinfo=est)z12, 47, tzinfo=utc)z13, 47, tzinfo=met))
r@   r   r#   r   rN   r   rO   r   r   r   )r$   r_  r   r`  r   r   r  r   r   r   r   ra    s8    


zTestDateTimeTZ.test_zonesc             C   sX   t dd}tddd}tdddd|d	}t||}| |tddddddd|d	 d S )
Nr   r[  i  r5   r:   r  r  i  )r   )r@   r   r   r   r  r#   )r$   r`  r   r   rM   r   r   r   r    s    
zTestDateTimeTZ.test_combinec          
   C   sx   t dd}| jddddddd|d	}| | tddd | | tdddd | | tdddd|d	 d S )
Nr   r[  i  r5   r:   r  r  i  )r   )r@   r   r#   r   r   rJ  )r$   r`  rM   r   r   r   r    s
    
zTestDateTimeTZ.test_extractc                st  | j  tdd} j|d}| j  || j| | 	
 | | tfdd | tfdd | tfdd | tfdd | tfd	d | 	 td
 | 	 td
 tdddd   | j|   }| |j| | 	|   }| |j| | 	| | t fdd | 	   ttddd}j|d| j|  }     }| 	|| | j dddtddd}| j tddddddtddd}	|	| }
| 	|
| j j| j j tdd  ttd}ttd}|j|d|	j|d  | 	 | j j| j j  d S )Niz	west 5:30)r   c                  s     S )Nr   r   )re   nowawarer   r   r     r   z9TestDateTimeTZ.test_tz_aware_arithmetic.<locals>.<lambda>c                  s     S )Nr   r   )re   rx  r   r   r     r   c                  s     S )Nr   r   )re   rx  r   r   r     r   c                  s     S )Nr   r   )re   rx  r   r   r     r   c                  s      S )Nr   r   )rx  r   r   r     r   r   r   r   i.  )r   rB   r   c                  s     S )Nr   r   )r$  nowawareplusr   r   r     r   iai  Zrandomtimezonei  r   r   r   r   i?B r^   i>  )rB   rd  rf  )r   re   r@   r   r   r  r   rj   r   r#   rJ  rZ   r[   r   rU   Z	randrangerN   r   r^   r   r   r   )r$   Ztz55Z	timeawareZnowawareplus2rA  Ztzrr  r  r   r^   ZmaxdiffZtzaZtzbr   )r$  re   rx  ry  r   test_tz_aware_arithmetic  sP    



z'TestDateTimeTZ.test_tz_aware_arithmeticc             C   s4  | j j}| }tdd}||}||d}| |j|j | | tdd | t	|d | jt	|dd | jt	||d | t	||| tdd	d}xttd
ddddt
td
dddgD ]j}xdtdD ]N}t|}	| |	j| t j|d}
|
|}t|	| tddk rP qW | d qW d S )NrA   42)r   )rB   r  )r   )rc  r   r   r  r   )ry   rB   weirdtzr5   r  )r   z0utcnow(), now(tz), or astimezone() may be broken)r   re   r@   rj   r   r#   rN   r   rZ   r[   r   r   r   r  r   r  r   Zfail)r$   methr  off42anotheragainr   r|  r   re   r  Znow2r   r   r   test_tzinfo_now  s,    



zTestDateTimeTZ.test_tzinfo_nowc             C   s
  dd l }| jj}|  }||}tdd}|||}|||d}| |j|j | | tdd | 	t
||d | j	t
||dd | j	t
|||d | 	t
|||| | 	t
| d	}t|}	td
dd}
t|
dd}|	|
 }t||}| ||jd d d S )Nr   rA   r{  )r   )rB   r  )r   )rc  i ʚ;i'   )ry   rB   r   )r   r   rD  r@   rj   r   r#   rN   r   rZ   r[   r   r  r   )r$   r   r}  rE  r  r~  r  r  r  ZutcdatetimerN   r   r  r  r   r   r   test_tzinfo_fromtimestamp  s*    


z(TestDateTimeTZ.test_tzinfo_fromtimestampc             C   s:   | j j}| }tdd}| t|| | jt||d d S )NrA   r{  )r   )r   r  r@   rZ   r[   )r$   r}  r  r~  r   r   r   test_tzinfo_utcnow6  s
    
z!TestDateTimeTZ.test_tzinfo_utcnowc             C   sP   dd l }| jj}|  }||}tdd}| t||| | jt|||d d S )Nr   rA   r{  )r   )r   r   r  r@   rZ   r[   )r$   r   r}  rE  r  r~  r   r   r   test_tzinfo_utcfromtimestamp@  s    
z+TestDateTimeTZ.test_tzinfo_utcfromtimestampc             C   sl  G dd dt }| j}xdD ]\}}|ddddddd||d	}| }| d|j | d|j | d|j | d|j | d|j | d|j	 | d
|j
 | d|j | ||j qW | t|ddd|dd	j | |ddd|dd	 jd | |ddd|dd	 jd | t|ddd|dd	j | t|ddd|dd	j d S )Nc               @   s   e Zd Zdd Zdd ZdS )z1TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DSTc             S   s   t |trt|d}|| _d S )N)rB   )rC   rD   r   dstvalue)r$   r  r   r   r   rJ   P  s    

z:TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.__init__c             S   s   | j S )N)r  )r$   rM   r   r   r   rP   T  s    z5TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.dstN)r-   r>   r?   rJ   rP   r   r   r   r   DSTO  s   r  ))ir   )r  r   )r   r   )Nr   r   r   r   r  r\  )r   r   rV  i  iai  i`)r   r   ro  r#   rp  rq  rr  rs  rt  ru  rv  rw  rx  rZ   r[   r   )r$   r  r  r  flagr   r   r   r   r   test_tzinfo_timetupleL  s&    ""z$TestDateTimeTZ.test_tzinfo_timetuplec                s   G dd dt  | j}| t|ddd ddj G  fddd }xdD ]}|dd	d
dddd|d|d}| }| |j|j | |j	|j
 | |j|j | d|j | d|j | |j|j | | |j | | tddd  d |j | d|j qNW |dd	d
dddd}| }| |d d | d d  | d|j G dd d }|dd	d
dddd| d}| }| |d d | d d  | d|j G dd d }|dd	d
dddd| d}| t|j |ddddddd}xRtjtjtjgD ]>}|j|d}	| |	 d d |	tj d d  q&W |tddddd|dd}
| t |
j |t!ddd d!dd"|d#d}| t |j |jjtt"d}
| t |
j |jjtt" d}| t |j d S )$Nc               @   s   e Zd ZdddZdd ZdS )z-TestDateTimeTZ.test_utctimetuple.<locals>.DSTr   c             S   s   t |trt|d}|| _d S )N)rB   )rC   rD   r   r  )r$   r  r   r   r   rJ   r  s    

z6TestDateTimeTZ.test_utctimetuple.<locals>.DST.__init__c             S   s   | j S )N)r  )r$   rM   r   r   r   rP   v  s    z1TestDateTimeTZ.test_utctimetuple.<locals>.DST.dstN)r   )r-   r>   r?   rJ   rP   r   r   r   r   r  q  s   
r  r   r   )r   c                   s"   e Zd Zd fdd	Zdd ZdS )z.TestDateTimeTZ.test_utctimetuple.<locals>.UOFSNc                s     | | t|d| _d S )N)rB   )rJ   r   uofs)r$   r  Zdofs)r  r   r   rJ     s    z7TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.__init__c             S   s   | j S )N)r  )r$   rM   r   r   r   rN     s    z8TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.utcoffset)N)r-   r>   r?   rJ   rN   r   )r  r   r   UOFS~  s   r  )ir  r   Nr9   r5   r   r   r  r\  irX   r/  r   c               @   s   e Zd Zdd ZdS )z.TestDateTimeTZ.test_utctimetuple.<locals>.NOFSc             S   s   d S )Nr   )r$   rM   r   r   r   rN     s    z8TestDateTimeTZ.test_utctimetuple.<locals>.NOFS.utcoffsetN)r-   r>   r?   rN   r   r   r   r   NOFS  s   r  c               @   s   e Zd Zdd ZdS )z.TestDateTimeTZ.test_utctimetuple.<locals>.BOFSc             S   s   dS )Nrv   r   )r$   rM   r   r   r   rN     s    z8TestDateTimeTZ.test_utctimetuple.<locals>.BOFS.utcoffsetN)r-   r>   r?   rN   r   r   r   r   BOFS  s   r  i  r   r  r  i+ r  i  r   r   r   r   i?B ia)#r   r   rZ   r_   rN   Zutctimetupler#   r*  rp  r+  rq  r   rr  rs  rt  r  ru  rJ  rv  r0  r   rw  rx  ro  r[   r   r   r   r^   r   r  r   r   r   r  )r$   r  r  r  r   r   r  r  r   Zdtzr   Zhuger   )r  r   test_utctimetuplep  sV    
   z TestDateTimeTZ.test_utctimetuplec             C   s  t dd}t dd}t dd}t d d}| j}d}xd ||||fD ]}xd	D ]}|d
ddddd||d}	d|rrdptd }
|d k	r|	 pd}|
| }|	 }| ||d |  | ||	d | |	d|d |  | |	d|d |  | t|	|d |  qLW qBW d S )Nr   z+00:00   z+03:40iz-03:51r   z
0001-02-03)r   iy r   r9   r5   r:   r6   r   )r   z04:05:59z.987001r   ku   ሴr  )r@   r   rO   rW  r#   r   )r$   r   ZplusZminusunknownr  ZdatestrZofsr   r   ZtimestrZofsstrZtailstrZisor   r   r   test_tzinfo_isoformat  s$    




z$TestDateTimeTZ.test_tzinfo_isoformatc          	   C   s6  | j }tdd}ttddd}dddd	d
dd|g}|| }| ||  d}xddddddddd|ffD ]H\}}|d d  }	||	|< ||	 }
|jf ||i}| |
| |d7 }qjW | | d |jd d}| |j | |  |j|d}| || | |j|j |ddd}| j	t
|jdd d S )Nr   z+100i8)rB   z-200r   r9   r5   r:   r6   r<   r8   r   )r*  r9   )r+  r5   )r   r:   )r-  r6   )r	  r<   )r  r8   )r3  r  r   )r   i  r<  i  )r*  )r   r@   r   r#   r   rO   r   r   rj   rZ   r   )r$   r  re  rf  rw   r  r   r)   r  r  r  r  rg  rh  r   r   r   r    s<    
zTestDateTimeTZ.test_replacec             C   sD  t d d}t dd}t tdd d}| jj|d}| |j| | t|j| ||j}| |j| | 	|
 |
  | 	| |  ||}| |j| | 	| tdd ||  }|||7 }|j|d	}| 	|
 |
  | 	| |  | 	| |  | |j|j | 	|| d S )
NNoner  Z44r6   )ry   Zm300)r   r   )r   )r@   r   r   re   rj   r   rZ   r   r  r#   r   r   rN   r   rJ  )r$   ZfnoneZf44mZfm5hrM   rV  r  r  r   r   r   test_more_astimezone  s*    


z#TestDateTimeTZ.test_more_astimezoner   c             C   s4   | j tj}| |d | | | | d S )N)r   re   r   r   r#   r  )r$   rM   r   r   r   test_astimezone_default_utc  s    z*TestDateTimeTZ.test_astimezone_default_utczEST+05EDT,M3.2.0,M11.1.0c             C   s   | j dddddtjd}| }| || | |dd | j dddd	dtjd}| }| || | |dd
 d S )Ni  rX   r:   r<   r  )r   z%z %Zz	-0500 ESTr6   z	-0400 EDT)r   r   r   r  r#   r]  )r$   rM   r   r   r   r   test_astimezone_default_eastern!  s    z.TestDateTimeTZ.test_astimezone_default_easternc             C   s8   t ddddtjd}| }| }| |j|j d S )Ni  rX   r   r6   )r   )r   r   r   r  r#   r   )r$   r   r   r   r   r   r   !test_astimezone_default_near_fold,  s    z0TestDateTimeTZ.test_astimezone_default_near_foldc          
   C   s  | j }G dd dt}|ddddddd	| d
}|jdd}|jdd}|jdd}xL|||fD ]>}x8|||fD ]*}|| }	t|j|j d}
| |	|
 qpW q`W |ddddddd	}|jd| d}|jd| d}|jd| d}x|||fD ]}x|||fD ]}|| }	||ks"||kr@||ks6||kr@td}
nF||  krX|krfn n
td}
n ||kr|tdd}
n
tdd}
| |	|
 qW qW d S )Nc               @   s   e Zd Zdd ZdS )zBTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffsetc             S   s$   |j dk rt|j dS tddS d S )Nr   )rB   r   )r	  r   )r$   r   r   r   r   rN   :  s    
zLTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffset.utcoffsetN)r-   r>   r?   rN   r   r   r   r   rT  9  s   rT  r  r   r   rX   r   r/  r   )r   r5   )r	  )rB   )r	  r   r   ir  )r   r   r   r   r	  r#   )r$   r  rT  r  rU  rU  r8  rV  r5  r  r  r   r   r   test_aware_subtract4  s4    	(



z"TestDateTimeTZ.test_aware_subtractc             C   s  t ddddddd}t ddddddd}| || |jd d}| || |jtd d	d}| || |jtd
d	d}| || G dd dt}| }|j|d}|j|d}| | tdd | | tdd | || |j| d}| ||k  d S )Nr   r9   r5   r:   r6   r<   r8   )r   r   r   c               @   s   e Zd Zdd Zdd ZdS )z1TestDateTimeTZ.test_mixed_compare.<locals>.Variesc             S   s   t dd| _d S )NrL  )rB   )r   rH   )r$   r   r   r   rJ   m  s    z:TestDateTimeTZ.test_mixed_compare.<locals>.Varies.__init__c             S   s   |  j tdd7  _ | j S )Nr   )rB   )rH   r   )r$   r   r   r   r   rN   o  s    z;TestDateTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetN)r-   r>   r?   rJ   rN   r   r   r   r   ri  l  s   ri  r   )rB   r   )	r   r#   r   r@   r   r   rN   r   rb   )r$   r   r   ri  rj  r   r   r   r  `  s$    z!TestDateTimeTZ.test_mixed_comparec                s   G  fddd j }ddddddd	td
ddf} j | }||ddi} |j|  |jd  |jd  | |   |d|j|j	 d  d S )Nc                   s$   e Zd ZdZ fddZdd ZdS )z2TestDateTimeTZ.test_subclass_datetimetz.<locals>.CrA   c                s0   |  }|d} jj| f||}||_|S )Nr   )r   r  r   ri   r   )r  rw   r  r  r   r  )r$   r   r   ri     s
    
z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.__new__c             S   s   || j  | j S )N)r-  r*  )r$   r  r   r   r   r    s    z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.newmethN)r-   r>   r?   r  ri   r  r   )r$   r   r   r    s   r  i  r   r   r:   r6   r<   i  irv   r   r   r8   rA   i)
r   r@   r#   r,   r  r   rN   r  r-  r*  )r$   r  rw   r\   r%  r   )r$   r   test_subclass_datetimetz~  s    
z'TestDateTimeTZ.test_subclass_datetimetzN)r-   r>   r?   r   r   rs  rv  r   r  rw  ra  r  r  rz  r  r  r  r  r  r  r  r  r  r   r0  r  r  r  r  r  r  r   r   r   r   rr    s2   E%A%#
$P',rr  c             C   s    d|    }|r| t|7 } | S )Nr<   )rJ  r   )rM   Z
days_to_gor   r   r   first_sunday_on_or_after  s    r  )rB   )ry   )r   r:   r9   r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
USTimeZonec             C   s"   t |d| _|| _|| _|| _d S )N)ry   )r   	stdoffsetreprnamestdnamedstname)r$   ry   r  r  r  r   r   r   rJ     s    zUSTimeZone.__init__c             C   s   | j S )N)r  )r$   r   r   r   rL     s    zUSTimeZone.__repr__c             C   s   |  |r| jS | jS d S )N)rP   r  r  )r$   rM   r   r   r   rO     s    
zUSTimeZone.tznamec             C   s   | j | | S )N)r  rP   )r$   rM   r   r   r   rN     s    zUSTimeZone.utcoffsetc             C   sf   |d ks|j d krtS ttj|jd}ttj|jd}||jd d  krV|k r^n ntS tS d S )N)r*  )r   )r   r   r  DSTSTARTr   r*  DSTENDr   )r$   rM   r  endr   r   r   rP     s     zUSTimeZone.dstN)r-   r>   r?   rJ   rL   rO   rN   rP   r   r   r   r   r    s
   r  r   r   rv   r  iCentralZCSTZCDTiMountainZMSTZMDTiPacificZPSTZPDTr   i0ZUTCfakec               @   sd   e Zd ZeddddZeddddZeZdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd ZdS )TestTimezoneConversionsi  r:   r8   r9   r   r|  r   c       
      C   s  |  | t |  ||| ||}||}| | kr|jdkr|  |t | |  | t |  |||| n|  || |t }||}	| | kr|jdkr|  |	|jdd |t7 }||}	|  |	|jdd n|  |	| t d S )Nr9   r   r   )r-  )r#   rP   r   r  r   r-  r   r   )
r$   rM   r   r   dstondstoffasutcthere_and_backZnexthour_utcZnexthour_tzr   r   r   checkinside  s$    





z#TestTimezoneConversions.checkinsidec             C   sF   |  | t |  ||| ||}||}|  || d S )N)r#   rP   r   r  )r$   rM   r   r   r  r  r   r   r   checkoutside  s
    

z$TestTimezoneConversions.checkoutsidec          	   C   s   | j j|d}| jj|d}xtddtttddtddfD ]x}| ||||| x*|| || fD ]}| ||||| qfW | ||| x&|| || fD ]}| ||| qW q>W d S )N)r   r/  )r   r   )rB   )r   )r  r   r  r   DAYr   r  r  )r$   r   r   r  r  r$  ZduringZoutsider   r   r   convert_between_tz_and_utc&  s    
z2TestTimezoneConversions.convert_between_tz_and_utcc             C   sL   |  tt |  tt |  tt |  tt |  tt |  tt d S )N)r  r   utc_realr  utc_fake)r$   r   r   r   	test_easy<  s    z!TestTimezoneConversions.test_easyc          	   C   sZ  | j tdd }tddd}|j|d}| j jdd}|tjd d}| || | j jd	td
}| j jdd}|tjd d}| || xttfD ]}xtt	fD ]}| j
tdd }||d 8 }||d  }	|	j|d}
xhdD ]`}| j
j|d}xDdD ]<}|j|d}|
j|d}	|	|}| |jd d| qW |
t7 }
qW qW qW d S )Nr:   )ry   iz-0900r   )r   r5   )r-  r<   )r-  r   r   r9   )r   r   r   r9   )r   r  r   )r	  )r  r   r@   r   r  r   r#   r  r  r  r  rN   r   )r$   ZfourbackZninewestr  r  Zsixutcr   r   Zfirst_std_hourr  Z	asutcbaseZtzhourZexpectedbaser	  Zastzr   r   r   test_trickyT  s0    


z#TestTimezoneConversions.test_trickyc             C   s   G dd dt }| j jtd}||  G dd d|}| t|j|  G dd d|}| dd	d	jtd}| t|j|  d S )
Nc               @   s   e Zd Zdd Zdd ZdS )z2TestTimezoneConversions.test_bogus_dst.<locals>.okc             S   s   t S )N)r   )r$   rM   r   r   r   rN     r   z<TestTimezoneConversions.test_bogus_dst.<locals>.ok.utcoffsetc             S   s   t S )N)r   )r$   rM   r   r   r   rP     r   z6TestTimezoneConversions.test_bogus_dst.<locals>.ok.dstN)r-   r>   r?   rN   rP   r   r   r   r   ok  s   r  )r   c               @   s   e Zd Zdd ZdS )z5TestTimezoneConversions.test_bogus_dst.<locals>.notokc             S   s   d S )Nr   )r$   rM   r   r   r   rP     r   z9TestTimezoneConversions.test_bogus_dst.<locals>.notok.dstN)r-   r>   r?   rP   r   r   r   r   notok  s   r  c               @   s   e Zd Zdd ZdS )z<TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notokc             S   s   |j dkrd S dt S d S )Ni  r   )r*  r   )r$   rM   r   r   r   rP     s    
z@TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notok.dstN)r-   r>   r?   rP   r   r   r   r   tricky_notok  s   r  i  r   )r   r   re   r   r  r  rZ   r   )r$   r  re   r  r  rM   r   r   r   test_bogus_dst  s    z&TestTimezoneConversions.test_bogus_dstc       
      C   s  |  ttj t jtd}|  ttj| |jtd}t|}| 	|j
t |  ttj|| |  ttjt  G dd dt}|dddd}| jjdtd	}|j|d}xd
D ]}|j|d}|dkr|tdd8 }t|}	| 	||	 ||j }||}	| 	||	 |jtd|}	| 	||	 |t7 }|t7 }qW | jjdtd	}|j|d}x~dD ]v}|j|d}t|}	| 	||	 ||j }||}	| 	||	 |jtd|}	| 	||	 |t7 }|t7 }qhW d S )N)r   c               @   s   e Zd Zdd ZdS )z<TestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZonec             S   s
   || j  S )N)r  )r$   rM   r   r   r   r     s    zDTestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZone.fromutcN)r-   r>   r?   r   r   r   r   r   FauxUSTimeZone  s   r  r   FEasternZFESTZFEDTr:   )r-  r   )r   r   r   r5   r:   r6   )r-  r   r   )r   )r   r   r   r9   r5   r:   )rZ   r[   r   r   r   r  r   r  r   r#   r   r   r,  r  r  r   r  r  r   r  )
r$   re   Zenowr  r  r  ZfstartZwallr  r  r   r   r   r     sL    








z$TestTimezoneConversions.test_fromutcN)r-   r>   r?   r   r  r  r   r  r  r  r  r  r  r   r   r   r   r   r    s   43r  c               @   s$   e Zd Zdd Zdd Zdd ZdS )Oddballsc                s  t   t t |  k |  k |  k |  k | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fdd | t fd	d | 	 
d
  jd d d }j|d}| 	 
|d t j j j}| 	 | | 	|  tjj jddd}| 	| | 	| d S )Nc                  s    k S )Nr   r   )as_dateas_datetimer   r   r     r   z+Oddballs.test_bug_1028306.<locals>.<lambda>c                  s    k S )Nr   r   )r  r  r   r   r     r   c                  s    kS )Nr   r   )r  r  r   r   r     r   c                  s    kS )Nr   r   )r  r  r   r   r     r   c                  s    kS )Nr   r   )r  r  r   r   r     r   c                  s    kS )Nr   r   )r  r  r   r   r     r   c                  s    kS )Nr   r   )r  r  r   r   r     r   c                  s    kS )Nr   r   )r  r  r   r   r     r   Tr   r   )r   Fr   )r   r,  r   r  r   rb   r   rZ   r[   r#   r  r   r   r'  r*  r+  r  )r$   Zdifferent_dayZas_differentZdate_scZdatetime_scr   )r  r  r   test_bug_1028306  s2    
zOddballs.test_bug_1028306c          
   C   sN   xHt  t t t t tt gD ] }| t	 d|_
W d Q R X q&W d S )Nr   )r   r,  r   r   r  r   r   r   rZ   AttributeErrorr   )r$   rV  r   r   r   test_extra_attributes	  s    zOddballs.test_extra_attributesc             C   s  G dd d}xNt dt d|dgD ]0}| tdddddddt||||||| q*W | td tddd W d Q R X |d}| td tdd| W d Q R X G d	d
 d
t}|d}| td tdd| W d Q R X | t tddd W d Q R X | t tddd W d Q R X | t tddd W d Q R X | t tdddd W d Q R X | t tddddd W d Q R X | t tdddddd W d Q R X | t tddddddd W d Q R X d S )Nc               @   s   e Zd Zdd Zdd ZdS )z-Oddballs.test_check_arg_types.<locals>.Numberc             S   s
   || _ d S )N)value)r$   r  r   r   r   rJ     s    z6Oddballs.test_check_arg_types.<locals>.Number.__init__c             S   s   | j S )N)r  )r$   r   r   r   __int__  s    z5Oddballs.test_check_arg_types.<locals>.Number.__int__N)r-   r>   r?   rJ   r  r   r   r   r   Number  s   r  r   z10.9z)^an integer is required \(got type str\)$Z10g%@z)^__int__ returned non-int \(type float\)$c               @   s   e Zd ZdS )z,Oddballs.test_check_arg_types.<locals>.FloatN)r-   r>   r?   r   r   r   r   Float)  s   r  z&^integer argument expected, got float$g      $@)decimalZDecimalr#   r   ri  r[   r  rZ   )r$   r  ZxxZf10r  Zs10r   r   r   test_check_arg_types  s:    
zOddballs.test_check_arg_typesN)r-   r>   r?   r  r  r  r   r   r   r   r    s   %
r  c               @   s   e Zd Zdd ZdS )tzinfo2c             C   s   t |tstd|j| k	r$td|jdd }|jdd }|dks`|dks`| dkrdt||kr|| }| }||kr|S xD||gD ]8}|| }| |kr|S |jdd}| |kr|S qW tddS )z*datetime in UTC -> datetime in local time.z&fromutc() requires a datetime argumentzdt.tzinfo is not selfr   )r  r   NzNo suitable local time found)rC   r   r[   r   r   r   rN   rP   )r$   rM   Zoff0Zoff1ldtZoffr   r   r   r   F  s*    

ztzinfo2.fromutcN)r-   r>   r?   r   r   r   r   r   r  D  s   r  c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )USTimeZone2c             C   s"   t |d| _|| _|| _|| _d S )N)ry   )r   r  r  r  r  )r$   ry   r  r  r  r   r   r   rJ   h  s    zUSTimeZone2.__init__c             C   s   | j S )N)r  )r$   r   r   r   rL   n  s    zUSTimeZone2.__repr__c             C   s   |  |r| jS | jS d S )N)rP   r  r  )r$   rM   r   r   r   rO   q  s    
zUSTimeZone2.tznamec             C   s   | j | | S )N)r  rP   )r$   rM   r   r   r   rN   w  s    zUSTimeZone2.utcoffsetc             C   s   |d ks|j d krtS ttj|jd}ttj|jd}|jd d}|t |  kr^|k rfn ntS ||  kr~|t k rn n|jrtS tS ||  kr|t k rn n|jrtS tS tS d S )N)r*  )r   )	r   r   r  r  r   r*  r  r   r  )r$   rM   r  r  r   r   r   rP   z  s    zUSTimeZone2.dstN)r-   r>   r?   rJ   rL   rO   rN   rP   r   r   r   r   r  f  s
   r  Eastern2Central2	Mountain2Pacific2c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )Europe_Vilnius_1941c             C   s$   t dddd| dt dddd| dgS )Ni  r<   r   rW   )r   rL  )r   )r$   r   r   r   	_utc_fold  s    zEurope_Vilnius_1941._utc_foldc             C   s$   t dddd| dt dddd| dgS )Ni  r<   r   )r   r   r   )r   )r$   r   r   r   	_loc_fold  s    zEurope_Vilnius_1941._loc_foldc             C   s>   |   \}}||k rdt S ||k r6|jr.dndt S dt S )Nr5   r9   )r  r   r  )r$   rM   
fold_start	fold_stopr   r   r   rN     s    zEurope_Vilnius_1941.utcoffsetc             C   s>   |   \}}||k rdt S ||k r6|jr.dndt S dt S )Nr   r   )r  r   r  )r$   rM   r  r  r   r   r   rP     s    zEurope_Vilnius_1941.dstc             C   s.   |   \}}||k rdS ||k r*d|j S dS )NMSK)r  CESTr  )r  r  )r$   rM   r  r  r   r   r   rO     s    
zEurope_Vilnius_1941.tznamec             C   sV   |j dkrt|  \}}||k r.|dt  S ||k rJ|dt  jddS |dt  S )Ni  r5   r9   r   )r  )r*  r_   r  r   r   )r$   rM   r  r  r   r   r   r     s    
zEurope_Vilnius_1941.fromutcN)	r-   r>   r?   r  r  rN   rP   rO   r   r   r   r   r   r    s   			r  c               @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
ddd Ze
ddd Zdd Ze
ddd Ze
ddd Ze
ddd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/S )0TestLocalTimeDisambiguationc          	   C   s   t  }tddddddtjd}||}| |dd | |jd	 | |	  tdddd
tjd}||}| |dd | |jd | 
|	  tddddtjd}||}| |dd | |jd	 | 
|	  d S )Ni  r<   r   r   r   )r   z%c %Z%zz!Mon Jun 23 23:59:59 1941 MSK+0300r   rW   z"Mon Jun 23 23:00:00 1941 CEST+0200r   rL  z"Tue Jun 24 00:00:00 1941 CEST+0200)r  r   r   r   r  r#   r]  r  r   rP   rb   )r$   Vilniusgdtr  r   r   r   test_vilnius_1941_fromutc  s&    


z5TestLocalTimeDisambiguation.test_vilnius_1941_fromutcc          
   C   s   t  }tdddddd|d}|tj}| |dd tdddddd|d}|tj}| |dd	 tdddddd|d
d}|tj}| |dd tdddd|d}|tj}| |dd d S )Ni  r<   r   rL  r   )r   z%c %ZzMon Jun 23 19:59:59 1941 UTCzMon Jun 23 20:59:59 1941 UTCr   )r   r  zMon Jun 23 21:59:59 1941 UTCr   r   zMon Jun 23 22:00:00 1941 UTC)r  r   r  r   r   r#   r]  )r$   r  r  r  r   r   r   test_vilnius_1941_toutc  s"    z3TestLocalTimeDisambiguation.test_vilnius_1941_toutcc          	   C   sd   t ddd}tddddd}| |jd | |jd | t t ddddd d W d Q R X d S )Nr   r   )r  )r   r   r#   r  rZ   r[   )r$   r   rM   r   r   r   test_constructors  s    z-TestLocalTimeDisambiguation.test_constructorsc             C   s@   t ddddd}| }| |jd | }| |jd d S )Nr   )r  )r   r   r#   r  rJ  )r$   rM   r   r   r   r   test_member  s
    z'TestLocalTimeDisambiguation.test_memberc             C   sT  t d}tddd}| |jddjd | |jddjd | |jddjd | |jddjd |jdtd}|jdtd}| |jd djd | |jd djd | t |jdd W d Q R X | t |jdd W d Q R X | t |dddd d W d Q R X | t  |dddddddd d	 W d Q R X d S )Nr   r   )r  )r  r   )r   r9   )	r   r   r#   r   r  r   rZ   r   r[   )r$   r   rM   r   r   r   r    s$    z(TestLocalTimeDisambiguation.test_replacec             C   s@   t d}tddd}| ||jdd | ||jdd d S )Nr   r   )r  )r   r   r#   r   )r$   r   rM   r   r   r   r   3  s    z+TestLocalTimeDisambiguation.test_comparisonc             C   sP   t d}tddd}| t|t|jdd | t|t|jdd d S )Nr   r   )r  )r   r   r#   r   r   )r$   r   rM   r   r   r   	test_hash9  s    z%TestLocalTimeDisambiguation.test_hashzEST+05EDT,M3.2.0,M11.1.0c             C   s<   d}t |}t |d }| |jd | |jd d S )NiXUTi  r   r   )r   rD  r#   r  )r$   r   dt0r\   r   r   r   rF  ?  s
    
z.TestLocalTimeDisambiguation.test_fromtimestampzAustralia/Lord_Howec             C   sl   t d}t d|dkr$| d d}t|}t|d }| || | |jd | |jd d S )	Ng   Az%Z%zz	LHST+1030z>Australia/Lord_Howe timezone is not supported on this platformiUi  r   r   )ra  r  r]  r.   r   rD  r#   r  )r$   tmr   r  r   r   r   r   test_fromtimestamp_lord_howeG  s    


z8TestLocalTimeDisambiguation.test_fromtimestamp_lord_howec             C   s   |  tdjd d S )Nr   )r#   r   rD  r  )r$   r   r   r   %test_fromtimestamp_low_fold_detectionW  s    zATestLocalTimeDisambiguation.test_fromtimestamp_low_fold_detectionc             C   s8   t ddddd}|jdd}| | d |  d S )Ni  rX   r9   r   r  )r  i  )r   r   r#   r  )r$   r  r\   r   r   r   test_timestamp\  s    z*TestLocalTimeDisambiguation.test_timestampc             C   sh   t d}t d|dkr$| d tddddd	}|jd
d }|jdd }| |d | d S )Ng   Az%Z%zz	LHST+1030z>Australia/Lord_Howe timezone is not supported on this platformi  r:   r6   r   r  r   )r  i  )ra  r  r]  r.   r   r   r  r#   )r$   r  r   s0s1r   r   r   test_timestamp_lord_howec  s    

z4TestLocalTimeDisambiguation.test_timestamp_lord_howec             C   s|   t ddddd}|jdd}| }| }| | d | | d | |t | | |jd	 | |jd	 d S )
Ni  rX   r9   r   r  )r  r  rv   r   )r   r   r  r#   rO   r   r  )r$   r  r\   Zadt0Zadt1r   r   r   r  m  s    z+TestLocalTimeDisambiguation.test_astimezonec       	      C   s   t dd}tddddd}xbtD ]Z\}}}xN||gD ]B}|||}||}| || | |dk rjdn|j|j q4W q W d S )Nr   )r  r:   r   )r   r   rl   rm   rn   r#   r  )	r$   r   rM   rp   rq   r   rV  r   r5  r   r   r   test_pickle_fold|  s    

z,TestLocalTimeDisambiguation.test_pickle_foldc             C   s>   t dd}tddddd}| t|d | t|d d S )Nr   )r  zdatetime.time(0, 0, fold=1)z(datetime.datetime(1, 1, 1, 0, 0, fold=1))r   r   r#   r   )r$   r   rM   r   r   r   r     s
    

z%TestLocalTimeDisambiguation.test_reprc          	   C   s  t ddddtdtj }t ddddtd}| | t | | t | |jdd t | |jdd t xHdD ]@}t dddd|td}| | t | |jdd t qW xHdD ]@}t dd	d
d|td}| | t | |jdd t qW d S )Ni  r   r|  r   )r   r9   )r  )r   r  r   r:   r8   )	r   r  r   r   r#   rP   r   r   r   )r$   	dt_summer	dt_winterr	  rM   r   r   r   r     s    

z$TestLocalTimeDisambiguation.test_dstc             C   s   t ddddtdtj }t ddddtd}| | dt  | | dt  | |jdd	 dt  | |jdd	 dt  d S )
Ni  r   r|  r   )r   r9   r;   r   )r  )r   r  r   r   r#   rN   r   r   )r$   r  r  r   r   r   r     s    z*TestLocalTimeDisambiguation.test_utcoffsetc       	      C   st  t ddddtdtj }t ddddtd}t|}t|}| ||dt   | ||dt   | |jd	 | |jd	 t ddddd
td}t|}|t7 }t|}| || | |jd	 | |jd t ddddd
td}t|}| |j|j	fd t ddddd
td}t|}| |j|j	fd t ddddd	td}t|}| |j|j	fd d S )Ni  r   r|  r<   )r   r8   r:   r6   r   r  r   )r~   rW   )r|  r   r9   )r<   rW   )
r   r  r   r   r   r#   r   r  r   r-  )	r$   Zu_summerZu_winterZt_summerZt_winterr   r  r   r   r   r   r   r     s0    






z(TestLocalTimeDisambiguation.test_fromutcc             C   sL   t dddtd}| ||tj t dddtd}| ||tj d S )Ni  r   )r   r<   )r   r  r#   r  r   r   )r$   r   r   r   r   test_mixed_compare_regular  s    z6TestLocalTimeDisambiguation.test_mixed_compare_regularc             C   s<   t dddddtd}|tj}| || | || d S )Ni  r   r|  r   r  )r   )r   r  r  r   r   r   )r$   t_foldZ
t_fold_utcr   r   r   test_mixed_compare_fold  s    z3TestLocalTimeDisambiguation.test_mixed_compare_foldc             C   s<   t dddddtd}|tj}| || | || d S )Ni  r:   r8   r9   r  )r   )r   r  r  r   r   r   )r$   t_gapZ	t_gap_utcr   r   r   test_mixed_compare_gap  s    z2TestLocalTimeDisambiguation.test_mixed_compare_gapc             C   s   t dddtd}| t|t|jdd t dddddtd}t dd	d
ddtd}| t|t|jdd | t|t|jdd d S )Ni  r   )r   )r  i  r   r|  r  r:   r8   r9   )r   r  r#   r   r   )r$   r   r  r  r   r   r   test_hash_aware  s    z+TestLocalTimeDisambiguation.test_hash_awareN)r-   r>   r?   r  r  r  r  r  r   r  r   r0  rF  r  r  r  r  r  r  r   r   r   r   r  r  r  r  r   r   r   r   r    s,   


!r  c             C   s"   t | \}}t|d  t||S )N)rl  teenextr4  )iterabler   r   r   r   r   pairs  s    
r  c               @   s   e Zd ZdZdd Zedd Zedd Zedd	 Z	e
d
dd Zdd Zdd Zdd Zdd Zdd Zed(ddZed)ddZdd Zdd Zed*d d!Zd"d# Zd$d% Zd&d' ZdS )+ZoneInfoz/usr/share/zoneinfoc             C   s   || _ || _| ||| _dS )z

        :param ut: array
            Array of transition point timestamps
        :param ti: list
            A list of (offset, isdst, abbr) tuples
        :return: None
        N)uttiinvertr   )r$   r  r  r   r   r   rJ     s    	zZoneInfo.__init__c             C   s   t d| t d| f}| r|d d t }|d d  |7  < |d d  |7  < xZtdt| D ]H}|d |  ||d  d t 7  < |d |  || d t 7  < q`W |S )Nr  r   r   )r   SECr   r   )r  r  r   rH   r   r   r   r   r    s    $$zZoneInfo.invertc          	   C   sT  | d dkrtd|d td}||d tjdkrJ|  td}|||d  tjdkrt|  td	}|||d  g }x,t	|d
 D ]}|
td| d qW | |d }xFt|D ]:\}\}}	}
||
|d|
  }td||	|f||< qW d gt| }x"t|D ]\}}|| ||< q,W | ||}|S )Nr:   ZTZifznot a zoneinfo filerY   r   r5   rl  r   rf  r   z>lbbr<   r9   )readdecoder   seekr   fromfiler+   	byteorderZbyteswapr   rS  structunpackr&  findr   r   )r  ZfileobjZcountsr  Ztype_indicesZttisr   ZabbrsZgmtoffisdstZabbrindabbrr  idxr$   r   r   r   r    s2    



zZoneInfo.fromfilec          	   C   s0   t j| j|}t|d}| |S Q R X d S )Nrb)ospathjoinzonerootopenr  )r  r)   r  r_  r   r   r   fromname4  s    zZoneInfo.fromnamei  r   c             C   s   t |tstd|j| k	r$td| | j d |jd  |jd  |j	 }|| j
d k rn| jd }d}nPt| j
|}| j|d | \}}|d |d  }|td|| j
|d   k}||d 7 }|r|jdd	S |S d
S )z*datetime in UTC -> datetime in local time.z&fromutc() requires a datetime argumentzdt.tzinfo is not selfiQ i  r   r   r   r9   )r  N)rC   r   r[   r   r   r0  EPOCHORDINALr-  r	  r  r  r  bisectbisect_rightr   r   )r$   rM   r  Zttir  r  Ztti_prevshiftr   r   r   r   <  s     

,
zZoneInfo.fromutcc             C   s\   |  | j d |jd  |jd  |j }| j|j }t||}| j	t
d|d  | S )NiQ i  r   r   r   )r0  r  r-  r	  r  r   r  r  r	  r  r^   )r$   rM   r   r  r   r  r   r   r   _find_tiZ  s    ,zZoneInfo._find_tic             C   s   |  |dS )Nr   )r  )r$   rM   r   r   r   rN   d  s    zZoneInfo.utcoffsetc             C   s   |  |d}|rtS tS )Nr   )r  r   r   )r$   rM   r  r   r   r   rP   g  s    zZoneInfo.dstc             C   s   |  |dS )Nr9   )r  )r$   rM   r   r   r   rO   o  s    zZoneInfo.tznameNc          	   c   s   |d kr| j }tj|d}yt|}W n tk
r<   d S X |8 x0|D ](}| }|rJ|dsJ| d V  qJW W d Q R X d S )Nzzone.tab#r9   )	r  r  r  r  r  r  stripr'   rR  )r  ZzonedirZzone_tabr_  liner   r   r   	zonenamesr  s    
zZoneInfo.zonenamesc             C   s  d } } }}t j }}t }}	tj }
}d  }}tj }}d  }}t|dd}x|  D ]}|d7 }| |}x| D ]\}}||k rq~|tkr|d7 }||f||fkr|}|}|}|tj| f|tj|
 fk r|}|}|}
q~|tk rH|d7 }| }||f|	|fkr|}	|}|}|tj| f|tj| fk rP|}|}|}q~|d7 }q~W q^W |||f}td|  tdt	|f|   td||
|f  td|||f  td|||f  td|	||f  d S )	Nr   r   zNumber of zones:       %5dz@Number of transitions: %5d = %d (gaps) + %d (folds) + %d (zeros)z!Min gap:         %16s at %s in %sz!Max gap:         %16s at %s in %sz!Min fold:        %16s at %s in %sz!Max fold:        %16s at %s in %s)
r   r^   r   r   r   r  r  transitionsprintr   )r  
start_yearcountZ	gap_countZ
fold_countZzeros_countZmin_gapZmin_foldZmax_gapZmax_foldZmin_gap_datetimeZmax_gap_datetimeZmin_gap_zoneZmax_gap_zoneZmin_fold_datetimeZmax_fold_datetimeZmin_fold_zoneZmax_fold_zoneZstats_sincezonenamer   rM   r
  Ztrans_countsr   r   r   stats  sX    





zZoneInfo.statsc             c   sL   xFt t| j| jD ]0\\}}\}}|d |d  }t||fV  qW d S )Nr   )r  r4  r  r  r   r  )r$   _prev_tir   r  r
  r   r   r   r    s    $zZoneInfo.transitionsc             c   sr   xlt t| j| jD ]V\\}}\}}|d |d  }|tk r|d |d krt|| |d |d fV  qW dS )zLFind all folds with the same value of isdst on both sides of the transition.r   r   r9   N)r  r4  r  r  r   r   r  )r$   r  r  r   r  r
  r   r   r   nondst_folds  s    $zZoneInfo.nondst_foldsFc       
   
   C   sv   d}xl|   D ]`}| |}xP| D ]D\}}}}	|j|k s&|rJ||	krJq&|d7 }td||||||	f  q&W qW d S )Nr   r   z%3d) %-30s %s %10s %5s -> %s)r  r  r  r*  r  )
r  Z	same_abbrr  r  r  r   rM   r
  Z	prev_abbrr  r   r   r   print_all_nondst_folds  s    
zZoneInfo.print_all_nondst_foldsc             c   s.   x(|   D ]\}}|tk r
|| fV  q
W d S )N)r  r   )r$   r   r
  r   r   r   folds  s    zZoneInfo.foldsc             c   s,   x&|   D ]\}}|tkr
||fV  q
W d S )N)r  r   )r$   r   r
  r   r   r   gaps  s    zZoneInfo.gapsc             c   s$   x|   D ]\}}|s
|V  q
W d S )N)r  )r$   r   r
  r   r   r   zeros  s    zZoneInfo.zeros)N)r   )Fr   )r-   r>   r?   r  rJ   r  r  classmethodr  r  r   r0  r  r   r  rN   rP   rO   r  r  r  r  r  r  r  r  r   r   r   r   r    s,   %
0r  c               @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )ZoneInfoTestzAmerica/New_Yorkc          
   C   sb   t jdkr| d yt| j| _W n6 tk
r\ } z| d| j|f  W d d }~X Y nX d S )Nr  z"Skipping zoneinfo tests on WindowszSkipping %s: %s)r+   r2  r.   r  r  r  r   FileNotFoundError)r$   errr   r   r   r     s    

zZoneInfoTest.setUpc             C   s<   |  |jd d|jt|jf|jd d|jt|jf d S )N)r   )r#   r   r  idr   )r$   r   r   r   r   r   assertEquivDatetimes  s    z!ZoneInfoTest.assertEquivDatetimesc       	      C   s
  | j }x| D ]\}}xd| d| |tj gD ]}|| }||j|d}| |jd |jtj	d
|}| || | }| |jd d||  | |
tj	|jtj	d q2W x@tj |gD ]0}|| }|j|d}||}| |jd qW qW d S )Nr   g      ?)r   r   )r   r  r   r   r   r   r#   r  r   r   r  r"  rN   )	r$   r   rM   r
  rV  udtr  adtrN   r   r   r   
test_folds  s"    
zZoneInfoTest.test_foldsc       	      C   s>  | j }x0| D ]"\}}xd| d| |tj gD ]}|| }|j|d}||}| |jd |jtj	d
|}| || | }| |jd d|jd d|  ||j|d| | }| |jdd |jdd d|  q6W x>tj |gD ].}|| }||j|d}| |jd qW qW d S )Nr   g      ?)r   r   )r  zAt %s.)r   r  r   r   r   r   r#   r  r   r   r  r"  rN   Z
assertLess)	r$   r   rM   r
  rV  r#  r  r$  rN   r   r   r   	test_gaps  s&    
 zZoneInfoTest.test_gapsc          	   C   s  d| j ks| j dr&| d| j   | j}tjd}| j tjd< zt  x|	 D ]\}}|j
dkrpP |tddd t }|t }xldd	d
d|d |d |d gD ]J}|| }t|}	t||jd d}
| |	|
 |	 }| || qW |dkr\t||d  }| }|jdd }| |||d   | |||d   q\W W d |d krptjd= n
|tjd< t  X d S )NZRiyadh8zright/zSkipping %sTZi  i  r   iir   r   i@ i2 )r   r9   )r  )r  r'   r.   r   r  environgetra  Ztzsetr  r*  r   r  rD  r   r"  r  r#   )r$   r   r'  r#  r
  r  rn  rV  r   ZsdtZtzdtr  rM   Zts0Zts1r   r   r   test_system_transitions  s>    






z$ZoneInfoTest.test_system_transitionsN)	r-   r>   r?   r  r   r"  r%  r&  r*  r   r   r   r   r    s   r  c                   s   e Zd Z fddZ  ZS )ZoneInfoCompleteTestc                sp   g }t dr`xRt D ]F}td| tfi }||_x(t|D ]}|dr<||| q<W qW t	 
| d S )NZtzdatazZoneInfoTest[%s]Ztest_)r   r  r  rk   r  r  r0   r'   rS  superrJ   )r$   r  r)   ZTestmethod)r,   r   r   rJ   D  s    
zZoneInfoCompleteTest.__init__)r-   r>   r?   rJ   __classcell__r   r   )r,   r   r+  C  s   r+  c               @   s   e Zd ZdZdS )IranTestzAsia/TehranN)r-   r>   r?   r  r   r   r   r   r/  P  s   r/  c               @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )CapiTestc             C   s$   | j jdr| d t  d S )NZPurezNot relevant in pure Python)r,   r-   r(   r.   	_testcapiZtest_datetime_capi)r$   r   r   r   r   U  s    
zCapiTest.setUpc          
   C   sB   x<dD ]4}t |}| j|d | |tj W d Q R X qW d S )N)TF)	use_macro)r1  Zget_timezone_utc_capir!  rj   r   r   )r$   r2  Zcapi_utcr   r   r   test_utc_capi^  s    

zCapiTest.test_utc_capic          
   C   s   t  \}}}ttddd}ttdd}d||fd||fd||fg}x|D ]\}}}	| j|dz | ||	 tdd	d
|d}
tdd	d
|	d}| |
| | |
 |  tdd	d
dtjd}| |
	tj| W d Q R X qNW d S )Nr   )ry   rv   est_capi	est_macroest_macro_nn)r)   i  r9   r:   )r   r6   )
r1  Zmake_timezones_capir   r   r!  r#   r   rO   r   r  )r$   r4  r5  r6  Z	exp_namedZexp_unnamedZcasesr)   Ztz_actZtz_expr\   r%  r  r   r   r   test_timezones_capie  s    zCapiTest.test_timezones_capic          	   C   s   t  \}}}| jdd | |tj W d Q R X | jdd | |tj W d Q R X | jddp | |tj ttddd}| || t	dd	d
|d}t	dd	d
|d}| || | |
 |
  W d Q R X d S )Nutc0)Ztestnameutc1non_utcr   )ry   r   i  r9   r:   )r   )r1  Zget_timezones_offset_zeror!  rj   r   r   r   r   r#   r   rO   )r$   r8  r9  r:  Znon_utc_expr\   r%  r   r   r   test_timezones_offset_zero  s    z#CapiTest.test_timezones_offset_zeroc       	      C   s   G dd dt }t ddd}|ddd}tddd}tj}| || | || | || | ||d | ||d | ||d t t ddtdt	j
tddg}xD|D ]<}x6d	D ].}| j||d
 | ||| W d Q R X qW qW d S )Nc               @   s   e Zd ZdS )z.CapiTest.test_check_date.<locals>.DateSubclassN)r-   r>   r?   r   r   r   r   r    s   r  i  r   Tz
2011-01-01r   r   )TF)argexact)r   r   r1  Zdatetime_check_daterb   r   tuplerk  r   r   r   r   r!  )	r$   r  r   ZdsrM   Zis_daterw   r<  r=  r   r   r   test_check_date  s"    

zCapiTest.test_check_datec             C   s   G dd dt }t dd}|dd}tj}| || | || | ||d | ||d t t ddtdtj	t
dddg}xD|D ]<}x6d	D ].}| j||d
 | ||| W d Q R X qW qW d S )Nc               @   s   e Zd ZdS )z.CapiTest.test_check_time.<locals>.TimeSubclassN)r-   r>   r?   r   r   r   r   r:    s   r:  r   r  Tr   z
2011-01-01i  )TF)r<  r=  )r   r1  Zdatetime_check_timerb   r   r>  rk  r   r   r   r   r!  )r$   r:  r   rE  Zis_timerw   r<  r=  r   r   r   test_check_time  s    



zCapiTest.test_check_timec             C   s   G dd dt }t ddddd}|ddddd}tj}| || | || | ||d | ||d t t ddtdtj	t
dddg}xD|D ]<}x6d	D ].}| j||d
 | ||| W d Q R X qW qW d S )Nc               @   s   e Zd ZdS )z6CapiTest.test_check_datetime.<locals>.DateTimeSubclassN)r-   r>   r?   r   r   r   r   r    s   r  i  r   r   r  Tz
2011-01-01)TF)r<  r=  )r   r1  Zdatetime_check_datetimerb   r   r>  rk  r   r   r   r   r!  )r$   r  rM   r  Zis_datetimerw   r<  r=  r   r   r   test_check_datetime  s    

zCapiTest.test_check_datetimec             C   s   G dd dt }t d}|d}tj}| || | || | ||d | ||d t t ddtjt	dddt
dddg}xD|D ]<}x6dD ].}| j||d | ||| W d Q R X qW qW d S )	Nc               @   s   e Zd ZdS )z4CapiTest.test_check_delta.<locals>.TimeDeltaSubclassN)r-   r>   r?   r   r   r   r   TimeDeltaSubclass  s   rB  r   Tz
2011-01-01i  )TF)r<  r=  )r   r1  Zdatetime_check_deltarb   r   r>  rk  r   r   r   r   r!  )r$   rB  r   ZtdsZis_timedeltarw   r<  r=  r   r   r   test_check_delta  s    

zCapiTest.test_check_deltac       	      C   s   G dd dt }t  }| }ttdd}tj}| || | || | || | ||d | ||d | ||d t t ddt	dddt
dddg}xD|D ]<}x6d	D ].}| j||d
 | ||| W d Q R X qW qW d S )Nc               @   s   e Zd ZdS )z2CapiTest.test_check_tzinfo.<locals>.TZInfoSubclassN)r-   r>   r?   r   r   r   r   TZInfoSubclass   s   rD  r   )ry   Tr   z
2011-01-01i  )TF)r<  r=  )r   r   r   r1  Zdatetime_check_tzinforb   r   r>  rk  r   r   r!  )	r$   rD  r  Ztzisr   Z	is_tzinforw   r<  r=  r   r   r   test_check_tzinfo  s"    

zCapiTest.test_check_tzinfoN)r-   r>   r?   r   r3  r7  r;  r?  r@  rA  rC  rE  r   r   r   r   r0  T  s   	r0  c             C   s   | t  |S )N)ZaddTestr+  )loaderZstandard_testspatternr   r   r   
load_tests  s    rH  __main__)hr}   Ztest.supportr   rl  r  r   r  r+   r  r   rU   r,  r  r1  r   operatorr   r   r   r   r   r	   r
   r   r   Ztestr   r   r"   r   r   r   r   r   r   r   ra  r1  r  rn   Z_loadsr  r   r  rl   r   r  r   r   ZTestCaser!   r@   rQ   rT   rV   r   r   r   r#  r'  r)  r  r  r3  r5  r6  r?  rY  rr  r  r   r  r   r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Z	TestSuiter+  r/  r0  rH  r-   mainr   r   r   r   <module>   s   ,2_ !    !              B    "        <


*  b"32  
 gi I
