a
    zeg                    @   s  d 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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mZmZmZ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 Z0e1e0ej/d kslJ dddi g dfZ2e3dZ4e3dZ5G dd dej6Z7G dd de$Z8G dd de8Z9G dd de$Z:G dd dej6Z;G d d! d!ej6Z<G d"d# d#Z=G d$d% d%e=ej6Z>G d&d' d'ej6Z?G d(d) d)e'Z@G d*d+ d+e=ej6ZAG d,d- d-eZBG d.d/ d/eAZCG d0d1 d1eCZDG d2d3 d3e%ZEG d4d5 d5e=ej6ZFG d6d7 d7ZGG d8d9 d9eFeGej6ZHG d:d; d;eCeGej6ZId<d= ZJe#dZKe#dd>ZLe#dd?ZMe#dd@ZNeddAddBZOedddCdZPG dDdE dEe$ZQeQdFdGdHdIZReQdJdKdLdMZSeQdNdOdPdQZTeQdRdSdTdUZUe8ddVdZVe8dWdXdZWG dYdZ dZej6ZXG d[d\ d\ej6ZYG d]d^ d^e$ZZG d_d` d`eZZ[e[dFdadHdIZ\e[dJdbdLdMZ]e[dNdcdPdQZ^e[dRdddTdUZ_G dedf dfe$Z`G dgdh dhej6Zae#ddZbdidj ZcG dkdl dle$ZdG dmdn dnej6ZeG dodp dpejfZgG dqdr dreeZhG dsdt dtej6Zidudv Zjekdwkrel  dS )xzTTest date/time type.

See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases
    N)array)	ltlegtgeeqnetruedivfloordivmod)support)is_resource_enabled	ALWAYS_EQLARGESTSMALLEST)MINYEARMAXYEAR	timedeltatzinfo)timetimezone)datedatetimec                 C   s   g | ]}t t |fqS  )pickle).0protor   r   )/usr/lib/python3.9/test/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d Zd	S )

TestModulec                 C   s$   t }| |jd | |jd d S )Nr"   '  )datetime_moduleassertEqualr   r   )selfr   r   r   r    test_constants=   s    zTestModule.test_constantsc                 C   s$   t t}tjD ]}| || qdS )z2Test that __all__ only points to valid attributes.N)dirr)   __all__assertIn)r+   Z	all_attrsattrr   r   r    test_allB   s    
zTestModule.test_allc                 C   sT   d| j jv r| d t}tdd t|D }tg d}| || 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>M   s   z/TestModule.test_name_cleanup.<locals>.<genexpr>)
r   r   r   r   Zdatetime_CAPIr   r   r   r   sys)	__class____name__skipTestr)   setr-   r*   )r+   r   namesallowedr   r   r    test_name_cleanupH   s    
zTestModule.test_name_cleanupc                 C   s  d| j jv 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 implementation            r#         )r8   r9   r:   r)   Z_divide_and_roundr*   )r+   Zdarr   r   r    test_divide_and_roundT   s"    
z TestModule.test_divide_and_roundN)r9   
__module____qualname__r,   r1   r>   rL   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+   offsetr5   Z	dstoffsetr   r   r    __init__u   s    



zFixedOffset.__init__c                 C   s
   | j  S N)rW   lowerr+   r   r   r    __repr__}   s    zFixedOffset.__repr__c                 C   s   | j S r\   )rV   r+   dtr   r   r    	utcoffset   s    zFixedOffset.utcoffsetc                 C   s   | j S r\   )rW   r`   r   r   r    tzname   s    zFixedOffset.tznamec                 C   s   | j S r\   )rX   r`   r   r   r    dst   s    zFixedOffset.dstN)rP   )r9   rM   rN   r[   r_   rb   rc   rd   r   r   r   r    rO   s   s
   
rO   c                   @   s   e Zd ZdddZdd ZdS )PicklableFixedOffsetNc                 C   s   t | ||| d S r\   )rO   r[   rY   r   r   r    r[      s    zPicklableFixedOffset.__init__c                 C   s   | j S r\   )__dict__r^   r   r   r    __getstate__   s    z!PicklableFixedOffset.__getstate__)NNN)r9   rM   rN   r[   rg   r   r   r   r    re      s   
re   c                   @   s   e Zd Zdd ZdS )_TZInfoc                 C   s   t   S r\   )random)r+   r)   r   r   r    rb      s    z_TZInfo.utcoffsetNr9   rM   rN   rb   r   r   r   r    rh      s   rh   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   sR   t  }tddddddd|}| t |  W d    n1 sD0    Y  d S )N  rE             rB   r   )rh   r   assertRaises	TypeErrorrb   )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 r\   )r   r   maxrp   NotImplementedErrorrc   rb   rd   )r+   Zuselessra   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 r\   )Z_NotEnough__offsetZ_NotEnough__name)r+   rZ   r5   r   r   r    r[      s    zBTestTZInfo.test_subclass_must_override.<locals>.NotEnough.__init__N)r9   rM   rN   r[   r   r   r   r    	NotEnough   s   rw   rB   ZNotByALongShot)r   
assertTrue
issubclassassertIsInstancer   nowrp   ru   rc   rb   rd   )r+   rw   r   ra   r   r   r    test_subclass_must_override   s    
z&TestTZInfo.test_subclass_must_overridec                 C   sn   t dd}| |t t d fD ]F}| ||tdd | ||d | |	|tdd q"d S )NrB   ZThreerR   rP   )
rO   rz   r   r   r{   r*   rb   r   rc   rd   )r+   fora   r   r   r    test_normal   s    
zTestTZInfo.test_normalc                 C   sT   t t }| t|t  tD ]0\}}}|||}||}| t|t  qd S r\   )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}t|dfft|fft|dfffD ]\}}|| }|d }| |t | t|| | |	d | | |d | t
D ]`\}}}|||}	||	}
| |
t | t|
| | |
	d | | |
d | qq*d S )NrR   cookieEST)r   re   r   rc   rz   r   r   r   r*   rb   r   r   r   )r+   rZ   Zotypeargsr   Zonamer   r   r   r   r   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 r\   r   r`   )	DSTOFFSETr   r    rb      s    z:TestTZInfo.test_issue23600.<locals>.UKSummerTime.utcoffsetc                    s    S r\   r   r`   )DSTDIFFr   r    rd      s    z4TestTZInfo.test_issue23600.<locals>.UKSummerTime.dstc                 S   s   dS )NUKSummerTimer   r`   r   r   r    rc      s    z7TestTZInfo.test_issue23600.<locals>.UKSummerTime.tznameN)r9   rM   rN   __doc__rb   rd   rc   r   r   r   r   r    r      s   r   rl   rH         r   )r   r   r   fromutcr*   rb   )r+   r   tzutr   r   r    test_issue23600   s    
zTestTZInfo.test_issue23600N)
r9   rM   rN   rs   rv   r|   r~   r   r   r   r   r   r   r    rk      s   
rk   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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 )N      #@r   ACDTrC   r     r"   )r   r   r   r   r   DTr^   r   r   r    setUp   s    zTestTimeZone.setUpc                 C   s8   | j | jtjtjtjfD ]}| t||d  qd S r\   )	r   r   r   utcminrt   r*   strrc   r+   r   r   r   r    test_str   s    zTestTimeZone.test_strc                 C   s>   t }| j| jtjtjtjfD ]}t|}| |t	| qd S r\   )
r)   r   r   r   r   r   rt   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   ;   r   rS   )r   r*   r   r   rb   ZEROr   rt   )r+   limitr   r   r    test_class_members  s    zTestTimeZone.test_class_membersc                 C   s  |  tjttd | tjttdd | tjttdd tddtddfD ](}t|}| |d tdd d qZtddtdfD ]"}| t	t| | t	t|  q| t
 td  W d    n1 s0    Y  | t
 td W d    n1 s0    Y  | t
 ttd  W d    n1 sL0    Y  | t
 ttd W d    n1 s0    Y  | t
 ttdd	 W d    n1 s0    Y  d S )
Nr   UTCr"   microsecondssecondsrR   rP   ABCextra)r   r   r   r   assertIsNotr*   assertNotEqualrb   rp   
ValueErrorrq   r   )r+   Z	subminuter   invalidr   r   r    test_constructor  s    2466zTestTimeZone.test_constructorc                 C   s    |  tjt |  | jt d S r\   )rz   r   r   r   r   r^   r   r   r    test_inheritance  s    zTestTimeZone.test_inheritancec                 C   s   | j }dD ]<}|t }| |t|| | | t| | q
| t | jd W d    n1 st0    Y  | t | jd W d    n1 s0    Y  d S )N)r   g      ?r    rC   )r   HOURr*   r   rb   rp   rq   r   )r+   dummyhrZ   r   r   r    test_utcoffset!  s    6zTestTimeZone.test_utcoffsetc                 C   s   |  tj| j | t | jd W d    n1 s@0    Y  | t | jd W d    n1 sv0    Y  d S )Nr   rC   )assertIsNoner   r   rd   r   rp   rq   r   r^   r   r   r    test_dst,  s    6zTestTimeZone.test_dstc                 C   s  |  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    n1 sT0    Y  | t | j	d W d    n1 s0    Y  d S )Nr   z	UTC-05:00z	UTC+09:30r   z	UTC-00:01rR   ZXYZ   zUTC+01:06:40r     zUTC-01:06:40zUTC+01:06:40.000001r"   zUTC-01:06:40.000001r   rC   )
r*   r   r   rc   r   r   r   rp   rq   r   r^   r   r   r    test_tzname2  s&    8zTestTimeZone.test_tznamec                 C   s   |  t tj| j W d    n1 s.0    Y  |  t tjd W d    n1 sd0    Y  | j| jt	fD ]J}| jj
|d}||}| || || | || jj
tjd q|d S )Nznot datetimer   )rp   r   r   r   r   r   rq   r   r   Easternreplacer*   rb   )r+   r   Zutctimelocalr   r   r    test_fromutcH  s    ,*
zTestTimeZone.test_fromutcc                 C   sR  |  tttt | tttt | tdt tdt d | t  ttttk  W d    n1 sv0    Y  | tttth | ttd k | 	ttd k tt}| |t
k | 	|t
k | |tk  | 	|tk | |tk | 	|tk | 	|tk  | |tk | 	|tk | |tk d S )Nr   r   )r   r   r   r   r*   rp   rq   r/   rx   assertFalser   r   r   r   r   r   r    test_comparisonT  s$    :zTestTimeZone.test_comparisonc                 C   s   t ddd}tjtjtjfD ]^}| |||j|d  | |||j|d  | |	||j|d	  qd S )Nr"   r   )
r   r   r   rt   r   r*   rc   r   rb   rd   r+   r   r   r   r   r    test_aware_datetimei  s    z TestTimeZone.test_aware_datetimec                 C   s   | j | jtjtjfD ]2}tD ](\}}}||||}| || qqtj	}tD ](\}}}||||}| 
|| qRd S r\   )r   r   r   r   rt   r   r   r   r*   r   r   )r+   r   r   r   r   tz_copyr   r   r    test_picklet  s    zTestTimeZone.test_picklec                 C   sP   | j | jtjtjfD ]}t|}| || qtj}t|}| || d S r\   )	r   r   r   r   rt   copyr*   r   r   r+   r   r   r   r   r    	test_copy~  s    

zTestTimeZone.test_copyc                 C   sP   | j | jtjtjfD ]}t|}| || qtj}t|}| 	|| d S r\   )
r   r   r   r   rt   r   deepcopyr*   r   r   r   r   r   r    test_deepcopy  s    

zTestTimeZone.test_deepcopyc              
   C   s  t dddt ddddt dddddg}|dd |D  |D ]:}| jd	|d
 t| W d    q@1 sp0    Y  q@t ddt dddg}|dd |D  |D ]f}| jd|d
B | t t| W d    n1 s0    Y  W d    q1 s0    Y  qd S )Nr   r   r   r   rS   r   ?B r   rS   r   r   c                 S   s   g | ]
}| qS r   r   r   deltar   r   r    r!         z7TestTimeZone.test_offset_boundaries.<locals>.<listcomp>Zgood)Z	test_typer      r   r"   )r   r   c                 S   s   g | ]
}| qS r   r   r   r   r   r    r!     r   Zbad)r   extendsubTestr   rp   r   )r+   Ztime_deltasr   Zbad_time_deltasr   r   r    test_offset_boundaries  s     
(
z#TestTimeZone.test_offset_boundariesc                 C   s,   |  tjt  |  ttddt  d S )Nr"   r   )r   r   r   r   r   r^   r   r   r    test_comparison_with_tzinfo  s    z(TestTimeZone.test_comparison_with_tzinfoN)r9   rM   rN   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   s   |  ddd}| |dk | |dk | d|k | d|k | |ddg |g | g |ddg g | |tk | |tk | |tk  | |tk | |tk | |tk | |tk  | |tk | |tk | |tk d S )Nr"   r      )theclassr   rx   r/   r   r   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>  r   zGHarmlessMixedComparison.test_harmful_mixed_comparison.<locals>.<lambda>c                      s    dkS r   r   r   r   r   r    r     r   c                      s    dkS r   r   r   r   r   r    r     r   c                      s    dkS r   r   r   r   r   r    r     r   c                      s   d k S r   r   r   r   r   r    r     r   c                      s   d kS r   r   r   r   r   r    r     r   c                      s   d kS r   r   r   r   r   r    r     r   c                      s   d kS r   r   r   r   r   r    r     r   )r   rp   rq   r^   r   r   r    test_harmful_mixed_comparison  s    z5HarmlessMixedComparison.test_harmful_mixed_comparisonN)r9   rM   rN   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d3d4 Z d5d6 Z!d7S )8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daysr   rS   r   millisecondsr   r"   r   r   r   r   rE   r   r   <   rR     r   g$I$I?gUUUUUU?g?gMbP?)r*   r   )r+   r   tdr   r   r    r     s(    zTestTimeDelta.test_constructorc                 C   sb  | 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|  td(dD ]$}||| d | t|d  qtd(dD ]$}||| d | t|d  q||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 )-NrE   r   r   r   rJ   iDQ rG   r   Q X> Q i r#   F   iX  '  rD     r   r"   i@  i6 i@       ?   x   r   rB   rF   rC   rA   r   r   翶~Ϛ?@ g6+1?iS	 g       @g       r@   g`""K?-?ɚ;r   >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 dD ]\| t fdd | t fdd | t fdd | t fdd qd| t fd	d | t fd
d | t fdd | t fdd | t fdd d S )NrP   r"         ?c                      s     S r\   r   r   r	  r  r   r    r   Y  r   z<TestTimeDelta.test_disallowed_computations.<locals>.<lambda>c                      s     S r\   r   r   r  r   r    r   Z  r   c                      s     S r\   r   r   r  r   r    r   [  r   c                      s     S r\   r   r   r  r   r    r   \  r   r   c                      s     S r\   r   r   r	  zeror   r    r   a  r   c                      s     S r\   r   r   r  r   r    r   b  r   c                      s     S r\   r   r   r  r   r    r   c  r   c                      s    d S )N        r   r   r	  r   r    r   d  r   c                      s    d S )Nr   r   r   r  r   r    r   e  r   )r   rp   rq   ZeroDivisionErrorr^   r   )r	  r  r  r    test_disallowed_computationsT  s    z*TestTimeDelta.test_disallowed_computationsc                 C   s,   t d}| t|jt | t|jt d S )NrP   )r   rp   r   __mul__NAN__truediv__)r+   r	  r   r   r    test_disallowed_specialg  s    z%TestTimeDelta.test_disallowed_specialc                 C   sD   d\}}}t |||}| |j| | |j| | |j| d S )N)r"   rE      r   r*   r   r   r   )r+   r   r   r  r   r   r   r    test_basic_attributesm  s
    
z#TestTimeDelta.test_basic_attributesc                 C   sp   t dd}| | d dD ]}t |d}| | | qdD ](}t |d}| | |t dd  qBd S )	Nm  r   g    8~A)g˟$@g˟$r  r   g    .Ar   )r   rD   ir   r"   )r   r*   total_seconds)r+   r   r   msr   r   r    test_total_secondst  s    


z TestTimeDelta.test_total_secondsc                 C   s.   t ddddddd}t dd	}| || d S )
Nd   rG   8rA   r   g   Ar   r   r   rS   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#  rG   r$  rA   r   i z
r%  rE   r   1   r   r"   rF   )r   r*   hashlen)r+   r'  r(  dr   r   r    test_hash_equality  s"    z TestTimeDelta.test_hash_equalityc                 C   sB   d}t | }tD ],\}}}|||}||}| || qd S )N)r   "   8   )r   r   r   r   r*   r+   r   r   r   r   r   r   r   r   r   r    test_pickling  s    
zTestTimeDelta.test_picklingc                    s$  t dddt ddd}| | | |k | |k | |k | |k  | |k dD ]}t | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k qnt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(d S )NrF   rB   rH   )rB   rB   rB   )rF   rH   rH   )rF   rB   rC   FTc                      s    kS r\   r   r   Zbadargr'  r   r    r     r   z,TestTimeDelta.test_compare.<locals>.<lambda>c                      s    k S r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   c                      s    k S r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   )r   r*   rx   r   
OTHERSTUFFrp   rq   r+   r(  r   r   r4  r    test_compare  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:00rF   z2 days, 0:00:00rD   z-2 days, 0:00:00r   :   r   r   z12:58:59rB   rH   z2:03:04ir   r/  )r   r   rS   r   z-210 days, 23:12:34r   z0:00:00.001000r   z0:00:00.000003r  r   r   r   rS   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 )N	datetime.r"   z
%s(days=1)r#   rF   z%s(days=10, seconds=2)r@    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   r9   r*   r   r+   r5   r   r   r    r     s2    zTestTimeDelta.test_reprc                 C   s   t 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}| || q2d S )Nr  r   r   r   r9  6er   r"   r   r   rF   rB   r   r   r   r:  	   )	r   r   rx   r3   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 )Nr>  r  r   g    ~.Ar   r"   )rz   r   r   rt   
resolutionrx   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 r\   )r   rt   r   r   r   r    r     r   z-TestTimeDelta.test_overflow.<locals>.<lambda>r"    ʚ;g    eAg#B;g|=gr{>)
r   rD  r   rp   OverflowError__sub____add__rt   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   rp   rG  r  INF)r+   rK  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?rF   g~jtXrD   gƠ>r   gƠ      ?        i|   tAr   g?r   g?r   r   r   gٿgɿr   r  )r   r*   rD  )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   r   r   r  )r+   r   r   r   r    test_massive_normalizationN  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   )rx   r   r   r^   r   r   r    	test_boolS  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 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      @rS  )r   r   r   r  )r+   sumr   r   r    as_hoursa  s    z9TestTimeDelta.test_subclass_timedelta.<locals>.T.as_hoursN)r9   rM   rN   staticmethodrZ  r\  r   rX  r   r    rY  \  s   rY  r"   r   r   r   ir?  i)
r   r   r   r*   r\  rZ  r   r   r   r   )r+   r'  r(  t3t4r   rX  r    test_subclass_timedeltaZ  s     

z%TestTimeDelta.test_subclass_timedeltac           	   	   C   s   G dd dt }|ddd}tdd}ddd	 |ddd
fddd	 |ddd
fddd	 |dddfg}|D ]V\}}}| |2 |||}| || | || W d    qj1 s0    Y  qjd S )Nc                   @   s   e Zd ZdS )z6TestTimeDelta.test_subclass_date.<locals>.DateSubclassNr9   rM   rN   r   r   r   r    DateSubclassz  s   rb    r"   rC   r   addc                 S   s   | | S r\   r   r-  r   r   r   r    r     r   z2TestTimeDelta.test_subclass_date.<locals>.<lambda>rJ   raddc                 S   s   ||  S r\   r   re  r   r   r    r     r   subc                 S   s   | | S r\   r   re  r   r   r    r     r   rH   )r   r   r   r*   rz   )	r+   rb  d1r   testsr5   funcexpectedactr   r   r    test_subclass_datey  s    

z TestTimeDelta.test_subclass_datec           	   	   C   s   G dd dt }|ddddd}tddd}d	d
d |ddddfddd |ddddfddd |ddddfg}|D ]V\}}}| |2 |||}| || | || W d    qv1 s0    Y  qvd S )Nc                   @   s   e Zd ZdS )z>TestTimeDelta.test_subclass_datetime.<locals>.DateTimeSubclassNra  r   r   r   r    DateTimeSubclass  s   rn  rc  r"   rC   r      )r   rS   rd  c                 S   s   | | S r\   r   re  r   r   r    r     r   z6TestTimeDelta.test_subclass_datetime.<locals>.<lambda>rJ      rf  c                 S   s   ||  S r\   r   re  r   r   r    r     r   rg  c                 S   s   | | S r\   r   re  r   r   r    r     r   rH   )r   r   r   r*   rz   )	r+   rn  rh  r   ri  r5   rj  rk  rl  r   r   r    test_subclass_datetime  s    
z$TestTimeDelta.test_subclass_datetimec                 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      r   r   g     ó@i  rF   ro  rS   r   rR   g      @r   )r   r*   rp   r  r	   r
   )r+   r   secondminutezerotdr   r   r    test_division  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 
NrF   ro  rs  r"   rR   r   rD   r   r#   )r   r*   rp   r  r   rq   )r+   r   ru  rrv  r   r   r    test_remainder  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 rx  )r   divmodr*   rp   r  rq   )r+   r   ru  qry  rv  r   r   r    test_divmod  s    
zTestTimeDelta.test_divmodc              	   C   s   dd }|  t" t |dd>   W d    n1 s:0    Y  |  t" t |dd>   W d    n1 sv0    Y  dD ]t}|  t t ||  W d    n1 s0    Y  |  t t ||  W d    q1 s0    Y  qd 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 r\   r   r^   	bad_ratior   r    as_integer_ratio  s    zWTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloat.as_integer_ratioN)r9   rM   rN   r  r   r~  r   r    BadFloat  s   r  )float)r  r  r   r~  r    get_bad_float  s    z4TestTimeDelta.test_issue31293.<locals>.get_bad_floatr"   r   )r   )rP   r"   rF   rB   )rp   rq   r   r   )r+   r  r  r   r   r    test_issue31293  s    00,zTestTimeDelta.test_issue31293c                    sp  G  fdddt }G fddd G fdddt dD ]*| jd zt|d	d
 W n tyx   Y n0 zt|d	d W n ty   Y n0 zt|d	d W n ttfy   Y n0 ztd	|d	  W n ttfy   Y n0 z|d	td	  W n ty   Y n0 ztd	|d	  W n tyH   Y n0 W d    q>1 s`0    Y  q>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 r\   r   r+   otherProdr   r    r    s    z5TestTimeDelta.test_issue31752.<locals>.BadInt.__mul__c                    s     S r\   r   r  r  r   r    __rmul__  s    z6TestTimeDelta.test_issue31752.<locals>.BadInt.__rmul__c                    s     S r\   r   r  r  r   r    __floordiv__  s    z:TestTimeDelta.test_issue31752.<locals>.BadInt.__floordiv__c                    s     S r\   r   r  r  r   r    __rfloordiv__  s    z;TestTimeDelta.test_issue31752.<locals>.BadInt.__rfloordiv__N)r9   rM   rN   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 r\   r   r  Sumr   r    rI    s    z3TestTimeDelta.test_issue31752.<locals>.Prod.__add__c                    s     S r\   r   r  r  r   r    __radd__  s    z4TestTimeDelta.test_issue31752.<locals>.Prod.__radd__N)r9   rM   rN   rI  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 r\   r   r  divmodresultr   r    
__divmod__  s    z5TestTimeDelta.test_issue31752.<locals>.Sum.__divmod__N)r9   rM   rN   r  r   r  r   r    r    s   r  )Nr   )r   r"   rF   )r   r   r  r"   r   r   r   )rU   r   r   rq   r   )r+   r  r   )r  r  r  r    test_issue31752  s:    

zTestTimeDelta.test_issue31752N)"r9   rM   rN   r   r   r   r  r  r   Zrequires_IEEE_754r  r  r"  r)  r.  r2  r7  r   r   rC  rE  rL  rO  rU  rV  rW  r`  rm  rq  rw  rz  r}  r  r  r   r   r   r    r     s<   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 )	N  r"   rF   rB   rH   rC   r9  rD   )r   r   r   r*   )r+   ra   r   r   dt2r   r   r    test_delta_non_days_ignored!  s*    


z(TestDateOnly.test_delta_non_days_ignoredN)r9   rM   rN   r  r   r   r   r    r    s   r  c                   @   s   e Zd ZdZdS )SubclassDater"   Nr9   rM   rN   Z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*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUS )VTestDatec                 C   s<   |  ddd}| |jd | |jd | |jd d S )N  rB   r"   )r   r*   yearmonthrK  r`   r   r   r    r  G  s    zTestDate.test_basic_attributesc                 C   sz   |  ddd| j  fD ]\}t|}| |d |dd  }t|}| || |  |j|j|j	}| || qd S )Nr"   rF   rB   r:  rA  )
r   todayr   rx   r3   r   r*   r  r  rK  r+   ra   rB  r  r   r   r    rC  M  s    zTestDate.test_roundtripc              	   C   s  dD ]\}}}}|  |||}| ||  | j |}| || t|dr| |jd | |jd | |jd | |jd qt	t
td dD ]|}|  |dd}| }| j |}| || |dkr| j |d }|  |d dd}| || | | |d  qg d}d	D ]\}}	|  |dd }tt	dd
|D ]r\}
}|
dkrn|	rn|d7 }t	d|d D ]@}|  ||
|}| | | | || j | |d7 }q|qNq$d S )N))r"   r"   r"   r"   )r"   r   r  r  )rF   r"   r"   n  )i  rn   r   i
 hourr   r"   rE   r   r  )r     r  ro  r  ro  r  r  ro  r  ro  r  ))r  T)r  Frp  rF   )r   r*   	toordinalfromordinalhasattrr  ru  rt  microsecondr  r   r   zip)r+   ymr-  nZfromordr  d2ZdimZisleapr  ZmaxdayrK  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 rM  r  r   r	  Zaordr   r    r     r   z0TestDate.test_extreme_ordinals.<locals>.<lambda>r"   r   c                      s     d S rM  r  r   r  r   r    r     r   )r   r   r  r  rK  r  r  r*   rp   r   r   rt   )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"   r  r   r   rp  rF        `	  ro    4  l  ro   )r   r   r   rp   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 )Nr  r   r  r"   rF   r  r   r*   r+  r,  r+   r-  eZdicr   r   r    r.    s$    zTestDate.test_hash_equalityc              	      s2  |  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 |  |   | |      |  |   |  |       |   |  |  |       |   |  | |      | ||   dD ]^| t	 fdd | t	 fdd | t	 fdd | t	 fdd q$| 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  r"   r    r  rF   A  rH   r   rE   rB   rA  r   4     r  c                      s     S r\   r   r   r  r   r    r     r   z,TestDate.test_computations.<locals>.<lambda>c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r	  rK  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s      S r\   r   r   r  r   r    r     r   c                      s      S r\   r   r   r  r   r    r      r   c                      s      S r\   r   r   r  r   r    r     r   
r   r*   r   r,  r  r   r   r   rp   rq   )r+   r
  r  diffweekr   r	  rK  r  r    r    sP    zTestDate.test_computationsc                 C   s   | j j}|tdtdfD ]p}| j j| }||8 }| t|j| | t|j|  | j j| }||7 }| t|j| | t|j|  qd S )Nr"   rF   )	r   rD  r   r   rp   rG  rH  rI  rt   )r+   rJ  r   ra   r   r   r    rL    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  rA  rr  r   )r   mktimer   fromtimestampr*   r  r  rK  )r+   r   r  r  rK  tsr-  r   r   r    test_fromtimestamp  s    
zTestDate.test_fromtimestampc                 C   s    dD ]}|  t| jj| qd S N)gZbtgZbtirp   rG  r   r  r+   Zinsaner   r   r    test_insane_fromtimestamp  s    z"TestDate.test_insane_fromtimestampc                 C   sl   dd l }tdD ]8}| j }|  }| j|}||kr> qJ|d q||krh| j||tddd d S )Nr   rB   g?r   r   )r   )r   r  r   r  r  sleepZassertAlmostEqualr   )r+   r   r   r  r  Z
todayagainr   r   r    
test_today&  s    
zTestDate.test_todayc              	   C   s   t dD ]}| | ddd|  | | | ddd|  |d  | | ddd|  | | | ddd|  |d  qd S )NrE   r  rB   rH   r"   r  rF   )r  r*   r   weekdayZ
isoweekday)r+   r  r   r   r    test_weekdayC  s
    "zTestDate.test_weekdayc              	   C   s  g d}g }|D ]T\}}| j | }tdD ]8}|t| }|dd |d | f }|||f q*q|D ]\}	}
| j|	dd  | |	 |
 W d    n1 s0    Y  | j|	dd0 |	 }| |j|j|j	f|
 W d    qj1 s0    Y  qjd S )N)))r  r      )r  r  r"   ))r  r   r  r  r"   r"   ))r  r"   rC   )r  rF   r"   ))  r   rm   )r  r  r"   ))r  r   r  )r  5   r"   ))r   r"   rH   )r   r"   r"   rE   r   rF   tuple)r-  Z
comparisonfields)
r   r  r   appendr   r*   isocalendarr  r  r  )r+   Zweek_mondays
test_casesZcal_dateZiso_dateZ	base_dater  Znew_dateZnew_isor-  Zexp_isor   r   r   r    test_isocalendarL  s    	
.zTestDate.test_isocalendarc                 C   sF   |  ddd}t| }t|}| t|t | |d dS )zTest that the result of datetime.isocalendar() can be pickled.

        The result of a round trip should be a plain tuple.
          r"   )r  r"   rF   N)r   r   r   r  r   r*   r   r  )r+   r-  presr   r   r    test_isocalendar_picklingj  s
    
z"TestDate.test_isocalendar_picklingc                 C   s   d}t tt| }g }tdD ]f}| d| dd}| d| dd}| | dd  | dd   | d dkr"|| q"| || 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
          r  r   r  i@  r"   r  )	sortedmaprU   splitr  r   r*   r  r  )r+   ZISO_LONG_YEARS_TABLEZiso_long_yearsLr  r-  rh  r   r   r    test_iso_long_yearsu  s    $zTestDate.test_iso_long_yearsc                 C   s"   |  ddd}| | d d S )NrF   rB   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 )Nr  rB   rF   zSat Mar  2 00:00:00 2002)r   r*   ctimer  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 dD ]&}z|| W q ty   Y q0 qz|d W n ty   Y n0 |d d S )N  rB   rF   m:%m d:%d y:%yzm:03 d:02 y:05r   A  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoneZtworP   %mZ03	'%z' '%Z''' '')z%e%z%#u   %y%mz%f)r   r*   strftimerp   rq   r   UnicodeEncodeError)r+   r   fr   r   r    test_strftime  s&    
zTestDate.test_strftimec                 C   sz   |  ddd}ztd W n ty8   | d Y n0 | |dtd|  | |dtd|  d S )Nr  rB   rF   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*   	timetupler  r   r   r    test_strftime_trailing_percent  s    z'TestDate.test_strftime_trailing_percentc                 C   s  |  ddd}| |dt| | td |d W d    n1 sP0    Y  G dd d| j }|ddd}| |dd G d	d
 d
| j }|ddd}| |dt| dD ]F}| |||| | |||| | ||d
 qd S )N  rA  r#   r   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r9   rM   rN   r  r   r   r   r    r    s   r  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    s    z(TestDate.test_format.<locals>.B.strftimeNr9   rM   rN   r  r   r   r   r    r    s   r  r  zm:%m d:%d y:%y H:%H M:%M S:%S%z %Zr   r*   
__format__r   assertRaisesRegexrq   r  r+   ra   r  r	  r  r
  fmtr   r   r    test_format  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 r\   )
ry   r   r   r   rz   r   rt   rD  r   rx   )r+   Zexpected_classr   r   r    rE    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     @B r   )r   rt   r   r   r   r   r   r*   )r+   bigr  Z	justasbigr   r   r    test_extreme_timedelta  s    zTestDate.test_extreme_timedeltac                 C   sr  t 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d S )
NrE   r  r"   rF   r   r   ro   rB   =   )r  r   r  r*   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   sZ   d}| j | }tD ],\}}}|||}||}| || q| | |d d S )NrJ   rE   r   rF   r   r   r   r   r*   
__reduce____reduce_ex__r1  r   r   r    r2  %  s    

zTestDate.test_picklingc                 C   sF   g d}d}| j | }|D ]&}tD ]}||dd}| || q"qd S )N)s'   cdatetime
date
(S'\x07\xdf\x0b\x1b'
tR.s   cdatetime
date
(UtR.s   cdatetime
date
UR.)  rn      latin1encodingr   pickle_loadsr*   r+   ri  r   rk  datar   r   r   r   r    test_compat_unpickle.  s    
zTestDate.test_compat_unpicklec                    s  |  ddd|  ddd}| | | |k | |k | |k | |k  | |k dD ]}| j | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k qrt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 q.d S )NrF   rB   rH   r3  FTc                      s    k S r\   r   r   r4  r   r    r   Z  r   z'TestDate.test_compare.<locals>.<lambda>c                      s    kS r\   r   r   r4  r   r    r   [  r   c                      s    kS r\   r   r   r4  r   r    r   \  r   c                      s    kS r\   r   r   r4  r   r    r   ]  r   c                      s    k S r\   r   r   r4  r   r    r   ^  r   c                      s    kS r\   r   r   r4  r   r    r   _  r   c                      s    kS r\   r   r   r4  r   r    r   `  r   )r   r*   rx   r   r5  rp   rq   r6  r   r4  r    r7  ;  sD    
zTestDate.test_comparec                    s   |  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 d S )Nr  rH   rC   r"   FTc                      s    dk S rM  r   r   ourr   r    r   l  r   z-TestDate.test_mixed_compare.<locals>.<lambda>c                      s   d k S rM  r   r   r(  r   r    r   m  r   c                   @   s   e Zd ZdS )z.TestDate.test_mixed_compare.<locals>.SomeClassNra  r   r   r   r    	SomeClassq  s   r*  c                      s    k S r\   r   r   r)  Ztheirr   r    r   y  r   c                      s    k S r\   r   r   r+  r   r    r   z  r   )r   r*   rp   rq   )r+   r*  r   r+  r    test_mixed_compareb  s    zTestDate.test_mixed_comparec                 C   s    |  | jj |  | jj d S r\   )rx   r   r   rt   r^   r   r   r    rW  |  s    zTestDate.test_boolc                 C   sZ   dD ]P}|  |dd}|dd| kr| |dd|  | |dd|  qd S )N)r"   r*  r   c   r#  i  r     r"   z%Yz%04d%dz%4Y)r   r  r*   )r+   r  r-  r   r   r    test_strftime_y2k  s
    zTestDate.test_strftime_y2kc           
      C   s   | j }g d}|| }| ||  d}dD ]L\}}|d d  }|||< || }|jf i ||i}	| ||	 |d7 }q.|ddd}| jt|jdd	 d S )
Nr  r   )r  rF   r  rB   rK  rH   r"   r  rF   r  r  r  r   r*   r   rp   r   
r+   clsr   baser  r5   newvalnewargsrk  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>.DateSubclassNra  r   r   r   r    rb    s   rb    r"   i  r4  r   r   r   r   )r+   rb  ra   r   r   r    test_subclass_replace  s    zTestDate.test_subclass_replacec                    s   G  fddd j }d} j | }||i 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>.CrP   c                    s6   |  }|d} jj| g|R i |}||_|S Nr   r   popr   r   r   r7  r   kwsZtempr   resultr^   r   r    r     s
    
z.TestDate.test_subclass_date.<locals>.C.__new__c                 S   s   || j  | j S r\   )r  r  r+   startr   r   r    newmeth  s    z.TestDate.test_subclass_date.<locals>.C.newmethNr9   rM   rN   	theAnswerr   rH  r   r^   r   r    C  s   rK  r  rH   r   r   rE   rP   rG   )	r   r*   r8   rJ  r   r  rH  r  r  r+   rK  r   rr   r  r   r^   r    rm    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}|D ]\}}	||fD ]n}
 jt	|
|dH t
|
|}||	 } ||  ||  |jd W d    q1 s0    Y  qqxd S )Nc                       s   e Zd Z fddZdS )zCTestDate.test_subclass_alternate_constructors.<locals>.DateSubclassc                    s$    j j| g|R i |}d|_|S NrE   r   r   r   r7  r   kwargsrE  r^   r   r    r     s    zKTestDate.test_subclass_alternate_constructors.<locals>.DateSubclass.__new__Nr9   rM   rN   r   r   r^   r   r    rb    s   rb  rL  i( z
2003-04-14rE   r   r  r  fromisoformatZbase_obj_typeconstr_name)r   rz   r*   r   r   combiner   	timestampr   r   getattr)r+   rb  r   Zd_ordd_isoformatbase_dr  r  rU  constr_argsbase_objconstrra   r   r^   r    $test_subclass_alternate_constructors  s,    

z-TestDate.test_subclass_alternate_constructorsc                 C   sR   d}t | }tD ]<\}}}|||}||}| || | t|t  qd S )Nr  )r  r   r   r   r*   rx   rT   r1  r   r   r    test_pickling_subclass_date  s    
z$TestDate.test_pickling_subclass_datec              	   C   s   d}t | jts|d d }dD ],}| t| j|d d | |dd    q t | jtr| td* | tdgt| d W d    n1 s0    Y  tdd	D ],}| |d d t|g |dd    qd S )
Ns
   1995-03-25rH   )   9          rF   rB   ^bad tzinfo state arg$r"   r   rp  )	ry   r   r   rp   rq   r  bytesr,  r  )r+   r8  Z
month_byteZord_byter   r   r    test_backdoor_resistance  s    	
8z!TestDate.test_backdoor_resistancec              	   C   sp   g d}|D ]^}| j | }| }| j|d, | j | }| || W d    q1 s`0    Y  qd S )N)r"   r"   r"   )r   rF   r   r  r"   r"   )r  rF   r  r  rn   r   )r  rH   rB   i  rC   ro  )dt_strr   r  r   rS  r*   )r+   
base_datesdt_tuplera   rk  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>.DateSubclassNra  r   r   r   r    rb  )  s   rb  rl   r   r   )r   rS  r  rz   )r+   rb  ra   ro  r   r   r    test_fromisoformat_subclass(  s    z$TestDate.test_fromisoformat_subclassc              	   C   sL   g d}|D ]:}|  t | j| W d    q1 s<0    Y  qd S )N)r   r   z	009-03-04Z	123456789z
200a-12-04z
2009-1a-04z
2009-12-0az
2009-01-32z
2009-02-29Z20090228u   20090228)rp   r   r   rS  r+   Zbad_strsbad_strr   r   r    test_fromisoformat_fails2  s    z!TestDate.test_fromisoformat_failsc              	   C   sT   dd t dg}|D ]:}| t | j| W d    q1 sD0    Y  qd S )Ns
   2009-03-01z
2009-03-01ioStringIOrp   rq   r   rS  r+   Z	bad_typesZbad_typer   r   r    "test_fromisoformat_fails_typeerrorF  s    z+TestDate.test_fromisoformat_fails_typeerrorc                 C   s   ddddddddd	d
dddt ddftddfg}|D ]Z}| j|d: | j| }| }| jj| }| || W d    q21 s0    Y  q2d S )N)  rH   rB   )r  r"   rF   )i  r   ro  )r   r"   rF   )r  r   r  rh  )r  r   r  )r  r"   r"   )r  r   r  r  )r  r   r  rg  )r(   r   r  r"   r   r  )	datecomps)r   r   r   r   r  fromisocalendarr*   )r+   Zdatesr{  ZdobjisocalZd_roundtripr   r   r    test_fromisocalendarM  s,    
zTestDate.test_fromisocalendarc              
   C   sx   g d}|D ]f}| j |dF | t | jj|  W d    n1 sJ0    Y  W d    q1 sh0    Y  qd S )N))r  r   r"   )r  r   r"   )r  6   r"   )r  r"   r   )r  r"   r   )r  r"      )r  r  r"   )r   r"   r"   )r   r"   r"   )i r"   r"   )        r"   r"   )r  r  r"   )r  r"   r  r}  )r   rp   r   r   r|  )r+   isocalsr}  r   r   r    !test_fromisocalendar_value_errorsk  s
    z*TestDate.test_fromisocalendar_value_errorsc              
   C   s   t tdd g}g }d}tdD ]4}|D ]*}t|}||| ||< |t| q&q|D ]f}| j|dF | t | j	j
|  W d    n1 s0    Y  W d    qX1 s0    Y  qXd S )Nc                 S   s   d S r\   r   )xr   r   r    r     r   z;TestDate.test_fromisocalendar_type_errors.<locals>.<lambda>)r  r"   r"   rB   r  )r   r  r  listr  r  r   rp   rq   r   r|  )r+   Zerr_txformersr  r8  r  ZtxformerZerr_valr}  r   r   r     test_fromisocalendar_type_errors  s    	z)TestDate.test_fromisocalendar_type_errorsN)/r9   rM   rN   r   r   r  rC  r  r  r  r.  r  rL  r  r  r  r  r  r  r  r  r  r  r  r
  rE  r  r  r2  r'  r7  r,  rW  r0  r<  r?  rm  r^  r_  rf  rp  rq  rt  ry  r~  r  r  r   r   r   r    r  A  sV   /2		&'
	',

r  c                   @   s   e Zd ZdZdS )SubclassDatetimer"   Nr  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 d7d8 Z!d9d: Z"e#$e%j&d;kd<d=d> Z'e#$e%j&d;kd<d?d@ Z(dAdB Z)dCdD Z*dEdF Z+dGdH Z,dIdJ Z-dKdL Z.dMdN Z/dOdP Z0edQdRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`da Z8dbdc Z9ddde Z:dfdg Z;dhdi Z<djdk Z=dlS )mTestDateTimec                 C   sx   |  ddddd}| |jd | |jd | |jd | |jd | |jd | |jd | |jd d S )Nr  rB   r"   r   r   	r   r*   r  r  rK  r  ru  rt  r  r`   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 )Nr  rB   r"   r   r   @  r  r`   r   r   r    test_basic_attributes_nonzero  s    z*TestDateTime.test_basic_attributes_nonzeroc              
   C   s   |  ddddddd| j  fD ]l}t|}| |d |d	d  }t|}| || |  |j|j|j	|j
|j|j|j}| || q d S )
Nr"   rF   rB   rH   rC   rJ   rE   r:  rA  )r   r{   r   rx   r3   r   r*   r  r  rK  r  ru  rt  r  r  r   r   r    rC    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"   rF   rB   rH   rC   r  z0001-02-03T04:05:01.000123rY   z0001-02-03 04:05:01.000123 z0001-02-03 04:05:01.000123r   u   0001-02-0304:05:01.000123r   timespecz0001-02-03T04rS   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fooL@ 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*   r  rp   r   r   r   r   rO   r   r   r   r   r    r    sD    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}|D ]X\}}|j|d}|| }| j|d  | |ksJ W d    q1 s0    Y  qd S )N05:00rC   r   02:00rF   06:27rJ   r  r   12:32:30r   ro   ro  r   02:04:09.123456rH   rA  r  r   r   N+00:00r   c                 S   s2   g | ]*\}}d D ]\}}|| t || fqqS ))-r   )+r"   r   r   rk  r   prefixsignr   r   r    r!     s   z8TestDateTime.test_isoformat_timezone.<locals>.<listcomp>rz  r"   %   z2016-04-01T12:37:09r   tzir   r   r   r   r   r   r  )	r+   	tzoffsetstzinfosZdt_baseexp_baseexp_tzr  ra   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    n1 sX0    Y  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| dD ]F}| |||| | |||| | ||d qd S )Nr  rA  r#   rH   rC   r"   r  r   r  c                   @   s   e Zd Zdd ZdS )z#TestDateTime.test_format.<locals>.Ac                 S   s   dS r  r   r^   r   r   r    r    s    z+TestDateTime.test_format.<locals>.A.__str__Nr  r   r   r   r    r    s   r  c                   @   s   e Zd Zdd ZdS )z#TestDateTime.test_format.<locals>.Bc                 S   s   dS r  r   r   r   r   r    r  #  s    z,TestDateTime.test_format.<locals>.B.strftimeNr  r   r   r   r    r  "  s   r  r  r  r  r   r   r    r
    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   r  rB   rF      rC   r  zSat Mar  2 18:03:05 2002r  )r   r   r*   r  r  r  )r+   r   r   r   r   r    test_more_ctime0  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 )Nr  rB   r"   rA  r   r#   r   r  r   r   r  r   )r   r*   rx   r   r   )r+   rr   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 r\   r   )r+   r   r   r   r    r   W  s    zbTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStr.replaceN)r9   rM   rN   r   r   r   r   r    MyStrV  s   r  r5   )r   )r+   ra   r  r   r   r    rc   U  s    zKTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tznameN)r9   rM   rN   rc   r   r   r   r    MyTzInfoT  s   r  r  rB   rF   r   r5   %Z)rO   r   rp   rq   r  )r+   r  r   r   r   r    %test_strftime_with_bad_tzname_replaceR  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"   r  r   r   rp  rF   r  r  r  ro  r  r  r  ro   r  r   r   r   r   r   r   r  fold)r   r   r   rp   r   rq   r^   r   r   r    r  ]  s^    




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 )Nr  r   r  r   ro     r"   rF   r  r   rC   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 |  | | |   |  | |  dD ]^| t	 fdd | t	 fd d | t	 fd!d | t	 fd"d q.| 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  r"   r  r  r  rH   r   rB   rF   r  rJ   r   r  rE   r  r#   r  r   rm   rA  r   r  r  r  r  rC   r   r   r  c                      s     S r\   r   r   r  r   r    r     r   z0TestDateTime.test_computations.<locals>.<lambda>c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s      S r\   r   r   r  r   r    r     r   c                      s      S r\   r   r   r  r   r    r     r   c                      s      S r\   r   r   r  r   r    r     r   r  )r+   r
  r  Zmillisecr  r  r   r  r    r    s    
" """zTestDateTime.test_computationsc                 C   sZ   d}| j | }tD ],\}}}|||}||}| || q| | |d d S )NrJ   rE   r   r   r   r"      rF   r  r1  r   r   r    r2    s    

zTestDateTime.test_picklingc              	   C   sn   |  ddddddd}ttjd D ]D}t||}t|}| |jd | |jd | |j	d q$d S )	Nr  rF   rE   r  0   r  i r"   )
r   r  r   HIGHEST_PROTOCOLr   r   r*   r  r  rK  )r+   r	  r   rB  r
  r   r   r    test_more_pickling  s    
zTestDateTime.test_more_picklingc                 C   sR   d}t | }tD ]<\}}}|||}||}| || | t|t  qd S )Nr  )r  r   r   r   r*   rx   rT   r1  r   r   r    test_pickling_subclass_datetime  s    
z,TestDateTime.test_pickling_subclass_datetimec                 C   sF   g d}d}| j | }|D ]&}tD ]}||dd}| || q"qd S )N)s@   cdatetime
datetime
(S'\x07\xdf\x0b\x1b\x14;\x01\x00\x10\x00'
tR.s#   cdatetime
datetime
(U
;  tR.s$   cdatetime
datetime
U
;  R.)r  rn   r  r   r   r"   r  r   r!  r#  r%  r   r   r    r'  	  s    

z!TestDateTime.test_compat_unpicklec                 C   sR  g d}| j | }| j | }| || | ||k | ||k | ||k | ||k  | ||k tt|D ]}|d d  }|| d ||< | j | }| ||k  | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k  | ||k | ||k qzd S )N)r  rn   r  r   r8  r  r  r"   )r   r*   rx   r   r  r,  )r+   r   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 r\   )r*   r  r  r  r  r  rK  r  r  r  ru  r  rt  )r+   rk  r;  r   r   r    verify_field_equality;	  s    z"TestDateTime.verify_field_equalityc                 C   s6   dd l }|  }||}| j|}| || d S Nr   )r   	localtimer   r  r  r+   r   r  rk  r;  r   r   r    r  C	  s
    
zTestDateTime.test_fromtimestampc                 C   s6   dd l }|  }||}| j|}| || d S r  )r   gmtimer   utcfromtimestampr  r  r   r   r    test_utcfromtimestampK	  s
    
z"TestDateTime.test_utcfromtimestampEST+05EDT,M3.2.0,M11.1.0c              	   C   s,  |  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 | | |  ddd|  dddfD ]:}z| }W n ty   Y q0 | | j || qd S )Nr.  r"   g     @rF   rB   rH    6@r=  rn   ro  r  r   i'  r   )r   r*   rW  r   r  r   rG  )r+   r   t0r'  rB  r   r   r    test_timestamp_naiveU	  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 )Nr.  r"   r   r  rF   rB   rH   g7  @r   r   r   r  )r   r   r   r*   rW  r   r  r   r   r    test_timestamp_awareq	  s    

z!TestDateTime.test_timestamp_awarezMSK-03c              	   C   sx  | j j| j jfD ]`}|d}| |jd | |jd |d}z|d}W n ty`   Y n~0 | |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d S )Nr   gư>gưr   r   g:0yEg1E2gHzrR  i# gHz>g1E2>g<"2?gP?r"   rP  rQ  )r   r  r  r*   rt  r  OSError)r+   Zftsr  r  Z	minus_oner   r   r   r    rU  |	  sF    
z&TestDateTime.test_microsecond_roundingc                 C   s   |  d6 | jjjtjd}| }| |d W d    n1 sF0    Y  |  d8 | jjjtjdd}| }| |d W d    n1 s0    Y  d S )Nzminimum UTCr   l w#o9 zmaximum UTCr   r   r  g  MB)	r   r   r   r   r   r   rW  r*   rt   )r+   min_dtmin_tsmax_dtmax_tsr   r   r    test_timestamp_limits	  s    *z"TestDateTime.test_timestamp_limitsc           
   
   C   s  z| j d W n  ttfy0   | d Y n0 | j jtdd }| }| j jj	dd}| j jtdd  td	d
d
d
  }d||fd||ffD ]R\}}}| j|||d( | j |}| || W d    q1 s0    Y  qd|tddd
  fd|tdd
  fd|tdd
  fd|tdd
  fg}	|	D ]v\}}| j||dL | ttf | j | W d    n1 s0    Y  W d    n1 s0    Y  qFd S )N    Test not valid on this platformr"   r   r   r  r   r   r  r   r   minimummaximumr  rk  Too small by a littler   rT  Too small by a lotr  Too big by a littleToo big by a lotr  )r   r  r  rG  r:   r   r   rW  rt   r   r   r   r*   rp   r   )
r+   r  r  r  r  	test_namer  rk  actualr  r   r   r    test_fromtimestamp_limits	  s2    ,z&TestDateTime.test_fromtimestamp_limitsc                 C   s  z| j d W n  ttfy0   | d Y n0 | j jjtjd}|	 }| j j
jdtjd}|	 }d||jd dfd||jd dffD ]\}}}| j|||dd z| j |}W n6 ttfy }	 z| t|	 W Y d }	~	n
d }	~	0 0 | || W d    q1 s0    Y  qd	|d
 fd|tdd  fd|d
 fd|tdd  fg}
|
D ]v\}}| j||dL | ttf | j | W d    n1 s0    Y  W d    n1 s0    Y  qbd S )Nr  r  r   r   r  r   r  r  r  r  r"   r  r  r   r  r  r  )r   r  r  rG  r:   r   r   r   r   rW  rt   r   r   r*   r   r   rp   r   )r+   r  r  r  r  r  r  rk  r  excr  r   r   r    test_utcfromtimestamp_limits	  s4    $.

z)TestDateTime.test_utcfromtimestamp_limitsc                 C   s    dD ]}|  t| jj| qd S r  r  r  r   r   r    r  
  s    z&TestDateTime.test_insane_fromtimestampc                 C   s    dD ]}|  t| jj| qd S r  )rp   rG  r   r  r  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 )N)r   r  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 )	Nr  i  r   r  r   r   r8  i~ )r   r  r*   )r+   r-  r   r   r    $test_negative_float_utcfromtimestamp
  s    z1TestDateTime.test_negative_float_utcfromtimestampc                 C   sf   dd l }tdd}tdD ]2}| j }| j|  }t|| |kr qNq| t|| | d S )Nr   r"   r   rB   )r   r   r  r   utcnowr  r  ZassertLessEqual)r+   r   Z	tolerancer   Zfrom_nowfrom_timestampr   r   r    test_utcnow#
  s    

zTestDateTime.test_utcnowc              	   C   s  d}d}t | j||}| j||}| || | t|| j | t|| j g d}|D ]`\}}| j||d: t | j||}| j||}| || W d    qb1 s0    Y  qb| jj}| |dd dt	  | |dd d	t	  | |d
d t
dddd  ddtj tjd ffD ]z\}}|dk rXd}	| }
nd}	|}
t|
d d\}}d|	|||}||d}| | t
|d | | | q:d\}}|||}| | dt dt	   | | d | ||| | |ddjd  | t |dd W d    n1 sF0    Y  | t |dd W d    n1 s|0    Y  | t |dd W d    n1 s0    Y  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+0002%zrF   z-0002rD   z-00:02:01.000003r"   rB   )rS   r   r   )r   r   )r   ZGMTr   r  r  r   z{}{:02d}{:02d} {}r  r   )z	+1234 UTCr  r   r/  r   r  z-2400z-000z)	_strptimeZ_strptime_datetimer   strptimer*   r   r   r   rb   MINUTEr   r  r   rc   r{  r  r   r  r   rp   r   )r+   r  r  rk  r;  inputsr  Z	tzsecondsrc   r  r   r   rS   dtstrra   r	  r   r   r    test_strptime1
  sX    
,


66zTestDateTime.test_strptimec                 C   s`  | j j}| t |dd}W d    n1 s20    Y  |  ddd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
}|D ]b\}}	}
}d"| }| j||	|
|d#* ||	|
}| j|||d$ W d    q1 sP0    Y  qd S )%Nz01/02/3 04:05:06z%d/%m/%y %H:%M:%Sr  rF   r"   rH   rC   rJ   r      r/  z1/02/03 4:5:6r  z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  rp   r   r   r*   )r+   r  Znewdaterr   r  r  Zdt4r  r  r  r  r  r   r   r    test_strptime_single_digitl
  s6    (










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 )
Nr  r   r  rJ   r  !   )	r  r   r  rJ   r  r  rH   r  r   r"   r   )r   r*   r  r  r  rK  r  ru  rt  r  r  r   r  r  r  r  r  r  r  r  r  )r+   r   ttr   r   r    test_more_timetuple
  s0    
z TestDateTime.test_more_timetuplec              	   C   s   |  ddddddd}| |dd	 d
D ]B\\}}}ttd||d }|j|d}| |dd|  q,z|d W n ty   Y n0 d S )Nr  r   r  rJ   r  r  /   z%m %d %y %f %S %M %H %jz12 31 04 000047 33 22 06 366)))r  r  z	33.000123))r  r   Z33rF   )r   r   r   r   r  z-0200u   %y%m %H%M)r   r*   r  r   r   r   r  )r+   r   rB  r  r  r   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 )Nr  rB   rH   r  -     )r   r*   r   r   r`   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 )Nr  rB   rH   r  r  r   )r   r   r"   rF   r   r   r   )r   r   r   rV  r*   rp   rq   r   r   r   r   )r+   r-  r   rk  rV  ra   r   r   r    test_combine
  s6    

zTestDateTime.test_combinec           
      C   s   | j }g d}|| }| ||  d}dD ]L\}}|d d  }|||< || }|jf i ||i}	| ||	 |d7 }q.|ddd}| jt|jdd	 d S )
N)r"   rF   rB   rH   rC   rJ   rE   r   )r1  r2  r3  r  rC   ru  rJ   rt  rE   r  r  r"   r  rF   r  r  r4  r5  r6  r   r   r    r<  
  s    
zTestDateTime.test_replaceZEDT4c                 C   s\  | 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    n1 sN0    Y  d S )N,   Z0044rI   r   EDTr   rH   r   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 r\   r   r`   r   r   r    rb     r   z5TestDateTime.test_astimezone.<locals>.Bogus.utcoffsetc                 S   s   t dS r  r   r`   r   r   r    rd     r   z/TestDateTime.test_astimezone.<locals>.Bogus.dstNr9   rM   rN   rb   rd   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 r  r   r`   r   r   r    rb     r   z9TestDateTime.test_astimezone.<locals>.AlsoBogus.utcoffsetc                 S   s   d S r\   r   r`   r   r   r    rd   	  r   z3TestDateTime.test_astimezone.<locals>.AlsoBogus.dstNr
  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 rM  r   r`   r   r   r    rb     r   z6TestDateTime.test_astimezone.<locals>.Broken.utcoffsetc                 S   s   dS rM  r   r`   r   r   r    rd     r   z0TestDateTime.test_astimezone.<locals>.Broken.dstNr
  r   r   r   r    Broken  s   r  )r   r{   rO   r   r   r   r*   
astimezonerp   rq   r   r   )r+   ra   r  dt_utcZdt_fr  Zbogr  Zalsobogr  brokenZ	dt_brokenr   r   r    test_astimezone
  s*    

zTestDateTime.test_astimezonec                    s   G  fddd j }d} j | }||i 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>.CrP   c                    s6   |  }|d} jj| g|R i |}||_|S r@  rA  rC  r^   r   r    r     s
    
z6TestDateTime.test_subclass_datetime.<locals>.C.__new__c                 S   s   || j  | j | j S r\   )r  r  rt  rF  r   r   r    rH  !  s    z6TestDateTime.test_subclass_datetime.<locals>.C.newmethNrI  r   r^   r   r    rK    s   rK  )r  rH   r   r   rp  )   r   rE   rP   rG   )
r   r*   r8   rJ  r   r  rH  r  r  rt  rM  r   r^   r    rq    s    
z#TestDateTime.test_subclass_datetimec                    sB  G  fddd j }d}d}d}|| } ||  |jd | }d|f|fd|tjf|tjfd|f|fd	|f|fd
|df|fdt|dd  t	|dd   f|fg}|D ]\}}	}
||fD ]p} j
t||dH t||}||	 } ||  ||
  |jd W d    q1 s00    Y  qqd S )Nc                       s   e Zd Z fddZdS )zTTestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclassc                    s$    j j| g|R i |}d|_|S rN  rO  rP  r^   r   r    r   3  s    z\TestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclass.__new__NrR  r   r^   r   r    rn  2  s   rn  )r  rH   r   r   ro     r  z2003-04-14T12:30:15.123456gh͏TMArE   r  r  rS  r  z%Y-%m-%dT%H:%M:%S.%frV  r   rB   rT  )r   rz   r*   r   rW  r   r   r  r   r   r   r   rX  )r+   rn  r   rY  Zutc_tsrZ  r  r  rU  r[  rk  r\  constructorra   r   r^   r    -test_subclass_alternate_constructors_datetime0  s6    




$

z:TestDateTime.test_subclass_alternate_constructors_datetimec              
      s   G  fddd j }ddi fddi fdddtjifdddttdd	d
ifg}|D ]f\}}} |B t||}|f i |} ||  |jd W d    qT1 s0    Y  qTd S )Nc                       s   e Zd Z fddZdS )z8TestDateTime.test_subclass_now.<locals>.DateTimeSubclassc                    s$    j j| g|R i |}d|_|S rN  rO  rP  r^   r   r    r   d  s    z@TestDateTime.test_subclass_now.<locals>.DateTimeSubclass.__new__NrR  r   r^   r   r    rn  c  s   rn  r{   r  Znow_utcr   Z	now_fixedr   r   r   rE   )	r   r   r   r   r   rX  rz   r*   r   )r+   rn  r  r5   Z	meth_namerQ  r]  ra   r   r^   r    test_subclass_nowa  s    
zTestDateTime.test_subclass_nowc              
      s   g d}g d ddg}d t jt tddt tddg fdd	|D }|D ]^}|D ]T}|j|d
}j|d( j|}|| W d    q\1 s0    Y  q\qTd S )N)rg  rh  ri  rj  )r   r   r   r   )r   r   r   ih )r   r   r   G )r   ro  r  r  r  rY  r   r   rF   c                    s:   g | ]2} D ](}D ]}j g ||R d |iqqqS r   )r   )r   Z
date_tupleZ
time_tupler  Z
base_timesr+   r  r   r    r!     s   z<TestDateTime.test_fromisoformat_datetime.<locals>.<listcomp>r  r  )r   r   r   r  r   r   rS  r*   )r+   rm  
separatorsdtsra   r  r  ro  r   r  r    test_fromisoformat_datetimey  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 }|D ]`}|j|d}| }| j|d, | j |}||ksJ |W d    q1 s0    Y  qd S )Nrl   r   ro  r  pQ rC   r   rF   rJ   r  r   ro   r   rH   rA  r  r   c                 S   s   g | ]}d | qS r   r   r   r   r   r   r    r!     r   z<TestDateTime.test_fromisoformat_timezone.<locals>.<listcomp>r   c                 S   s   g | ]}t |qS r   r   r!  r   r   r    r!     r   r   tstrr   r   r   r   r   r  r   rS  )r+   Zbase_dtr  r  r  ra   r  ro  r   r   r    test_fromisoformat_timezone  s"    
z(TestDateTime.test_fromisoformat_timezonec              
   C   s|   g d}|D ]j}|  ddddddd}|j|d	}| j|d
( | j |}| || W d    q1 sl0    Y  qd S )N)	r  rY     u   ʁu   ᛇu   時u   🐍r   rc  r"   r  r   r   r  iu r  r  rl  r+   r  r  ra   r  ro  r   r   r    test_fromisoformat_separators  s    z*TestDateTime.test_fromisoformat_separatorsc              	   C   sx   ddg}|D ]f}|  ddddd}|j|d}| j|d	( | j |}| || W d    q1 sh0    Y  qd S )
Nr  r  rc  r"   r  r   r  r  r  rl  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}g d	}t|D ]\}}|D ]}|D ]}|d
krd|d d  }|dd |f }| j|dd|  d|i}	|	j|d}
| j|
d( | j|
}| |	| W d    q\1 s0    Y  q\qTqHd S )N)r  r   rH   r  r  r  r  )r  r   rH   r  r  r  r   r   r   rF   rJ   r  r   r   rS   r   r   r   r   r   r   rH   r   r  r  	r   r   r   	enumerater   r  r   rS  r*   )r+   Zdatetime_basesr  	timespecsipr  r  rn  new_microsecondsra   r  ro  r   r   r    test_fromisoformat_timespecs  s(    z)TestDateTime.test_fromisoformat_timespecsc              
   C   sx   g d}|D ]f}| j |dF | t | j| W d    n1 sJ0    Y  W d    q1 sh0    Y  qd S )N)r   r   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rs  r   rp   r   r   rS  rr  r   r   r    !test_fromisoformat_fails_datetime  s
    z.TestDateTime.test_fromisoformat_fails_datetimec                 C   sJ   d}|  ttt| | j| W d    n1 s<0    Y  d S )Nu   2018-01-0301:0113)r  r   reescaper   r   rS  )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   rS  r   r   r   r   )r+   rk  ra   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>.DateTimeSubclassNra  r   r   r   r    rn     s   rn  rl   r   r   rA  ro  r  i r#   r   r   )r   r   r   rS  r  r*   rz   )r+   rn  ra   ro  r   r   r    rq    s    z(TestDateTime.test_fromisoformat_subclassN)>r9   rM   rN   r   r   r  r  rC  r  r  r
  r  r  r  r  r.  r  r2  r  r  r'  r  r  r  r  r   run_with_tzr  r  rU  r  r  r  r  r  unittestZskipIfr7   platformr  r  r  r  r  r  r  r  r  r<  r  rq  r  r  r  r%  r)  r*  r1  r4  r7  r8  rq  r   r   r   r    r    sr   
,5D			!


(''		

;""
 1#&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 r\   r   r^   r   r   r    rC  /  s    z#TestSubclassDateTime.test_roundtripN)r9   rM   rN   r  r   r:  skiprC  r   r   r   r    r<  ,  s   r<  c                   @   s   e Zd ZdZdS )SubclassTimer"   Nr  r   r   r   r    r>  3  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-S ).TestTimec                 C   sH   |  dd}| |jd | |jd | |jd | |jd d S )Nr   r   r   r*   r  ru  rt  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   r  r@  r  r   r   r    r  A  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"   rF   rB   rH   r:  rA  )
r   r   rx   r3   r   r*   r  ru  rt  r  )r+   r   rB  r(  r   r   r    rC  J  s    zTestTime.test_roundtripc                    sN  g d}| j | | j | }| | | |k | |k | |k | |k  | |k tt|D ]}|d d  }|| d ||< | j | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k qzt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 qRd S )Nr"   rF   rB   rH   r"   FTc                      s    kS r\   r   r   r4  r   r    r   {  r   z)TestTime.test_comparing.<locals>.<lambda>c                      s    k S r\   r   r   r4  r   r    r   |  r   c                      s    kS r\   r   r   r4  r   r    r   }  r   c                      s    kS r\   r   r   r4  r   r    r   ~  r   c                      s    kS r\   r   r   r4  r   r    r     r   c                      s    k S r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   c                      s    kS r\   r   r   r4  r   r    r     r   )	r   r*   rx   r   r  r,  r5  rp   rq   )r+   r   r(  r  r:  r   r4  r    test_comparingY  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   r   r  )r   rp   r   r^   r   r   r    r    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   ro  r  r"   rF   r   rC   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 )+NrH   rC   r"   r  z04:05:01.000123z00:00:00r  z00:00:00.000001r#   z00:00:00.000010r#  z00:00:00.000100r   z00:00:00.001000r   z00:00:00.010000i z00:00:00.100000r   r/  r0  r  )r  ru  rt  r  r   r  Z12rS   z12:34r   z12:34:56r   z12:34:56.123r   z12:34:56.123456r  Zmonkeyr   r  z12:34:56.999r   z12:34:56.000z12:34:56.000000)r   r*   r  r   rp   r   r  r   r   r    r    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}|D ]X\}}|j|d}|| }| j|d  | |ksJ W d    q1 s0    Y  qd S )Nr  rC   r   r  rF   r  rJ   r  r   r  r   ro   ro  r   r  rH   rA  r  r   r  r  r   c                 S   s2   g | ]*\}}d D ]\}}|| t || fqqS r  r   r  r   r   r    r!     s   z4TestTime.test_isoformat_timezone.<locals>.<listcomp>r  z12:37:09r   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"   rt  rB   )r  )r   rp   rq   r  r  r   r   r    test_1653736  s    zTestTime.test_1653736c                 C   sZ   |  dddd}| |dd | |dd z|d	 W n tyT   Y n0 d S )
Nr"   rF   rB   rH   z%H %M %S %fz01 02 03 000004r  r  u   %H%M)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    n1 sR0    Y  G dd	 d	| j }|dddd}| |dd	 G d
d d| j }|dddd}| |dt| dD ]F}| |||| | |||| | ||d qd S )Nr"   rF   rB   rH   r   r  r  c                   @   s   e Zd Zdd ZdS )zTestTime.test_format.<locals>.Ac                 S   s   dS r  r   r^   r   r   r    r    s    z'TestTime.test_format.<locals>.A.__str__Nr  r   r   r   r    r    s   r  c                   @   s   e Zd Zdd ZdS )zTestTime.test_format.<locals>.Bc                 S   s   dS r  r   r   r   r   r    r  $  s    z(TestTime.test_format.<locals>.B.strftimeNr  r   r   r   r    r  #  s   r  )z%H %M %Sr  )r+   r   r  r	  r  r
  r	  r   r   r    r
    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"   rF   rB   rH   z01:02:03.000004r#   r   z10:02:03.004000r   r;  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 )Nr:  r"   rF   rB   rH   z%s(1, 2, 3, 4)r#   r   z%s(10, 2, 3, 4000)r   r;  z%s(0, 2, 3, 400000)r   z%s(12, 2, 3)r   r  z
%s(23, 15)r<  r=  r   r   r    r   6  s     zTestTime.test_reprc                 C   sN   |  | jj| j |  | jj| j |  | jjt | | jj| jjk d S r\   )rz   r   r   rt   rD  r   rx   r^   r   r   r    rE  C  s    zTestTime.test_resolution_infoc                 C   sZ   d}| j | }tD ],\}}}|||}||}| || q| | |d d S )Nr   r   r  r  rF   r  r1  r   r   r    r2  I  s    

zTestTime.test_picklingc                 C   sR   d}t | }tD ]<\}}}|||}||}| || | t|t  qd S )NrE  )r>  r   r   r   r*   rx   rT   r1  r   r   r    test_pickling_subclass_timeR  s    
z$TestTime.test_pickling_subclass_timec              	   C   sz   g d}t |D ]d\}\}}| j|d< | j| }tD ]}||dd}| || q8W d    q1 sj0    Y  qd S )N))s,   cdatetime
time
(S'\x14;\x10\x00\x10\x00'
tR.rE  )s   cdatetime
time
(U;  tR.rE  )s   cdatetime
time
U;  R.rE  )s,   cdatetime
time
(S'\x14;\x19\x00\x10\x00'
tR.r   r   r  r  )s   cdatetime
time
(U;  tR.rG  )s   cdatetime
time
U;  R.rG  )r  r   r!  )r-  r   r   r$  r*   )r+   ri  r  r&  r   rk  r   r   r   r   r    r'  [  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   rx   )r+   r7  r   r   r    rW  q  s    zTestTime.test_boolc           
      C   s   | j }g d}|| }| ||  d}dD ]L\}}|d d  }|||< || }|jf i ||i}	| ||	 |d7 }q.|d}| jt|jdd | jt|jdd | jt|jd	d
 | jt|jdd d S )NrA  r   )r  r  r  r  r"   r   r  r   ru  r#  rC  r  r  r5  r6  r   r   r    r<  {  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>.TimeSubclassNra  r   r   r   r    TimeSubclass  s   rJ  r   ro  r#   rH  r>  )r+   rJ  r  r   r   r    r?    s    
zTestTime.test_subclass_replacec                    s   G  fddd j }d} j | }||i 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>.CrP   c                    s6   |  }|d} jj| g|R i |}||_|S r@  rA  rC  r^   r   r    r     s
    
z.TestTime.test_subclass_time.<locals>.C.__new__c                 S   s   || j  | j S r\   r  rt  rF  r   r   r    rH    s    z.TestTime.test_subclass_time.<locals>.C.newmethNrI  r   r^   r   r    rK    s   rK  )rH   rC   rJ   r   rE   rP   rG   )	r   r*   r8   rJ  r   r  rH  r  rt  rM  r   r^   r    test_subclass_time  s    
zTestTime.test_subclass_timec              	   C   s   d}ddt ddfD ] }| t| j||dd    q| td* | tdgt| d W d    n1 sr0    Y  d S )	Nz2:59.0r  9r      ÿr"   rd  r   )chrrp   rq   r   r  re  r,  )r+   r8  Z	hour_byter   r   r    rf    s    
z!TestTime.test_backdoor_resistanceN)r9   rM   rN   r   r   r  r  rC  rB  r  r.  r  r  rD  r  r
  r   r   rE  r2  rF  r'  rW  r<  r?  rL  rf  r   r   r   r    r?  6  s.   	+4		
r?  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u r4dp6d}| | | t|tu 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`   r   r   r    rc     r   z>TZInfoBase.test_argument_passing.<locals>.introspective.tznamec                 S   s   t |r
dpddS )NrP   rR   r   r`   r   r   r    rb     s    zATZInfoBase.test_argument_passing.<locals>.introspective.utcoffsetN)r9   rM   rN   rc   rb   rd   r   r   r   r    introspective  s   rT  r"   rF   rB   r   rR  rQ  rS  rP   rR   )r   r   r   r*   rc   r   rb   rd   )r+   r7  rT  objrk  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 r\   r   r^   r   r   r    r[     r   z<TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.__init__c                 S   s   d S r\   r   r`   r   r   r    rb     r   z=TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.utcoffsetNr9   rM   rN   r[   rb   r   r   r   r    NiceTry  s   rX  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 r\   r   r^   r   r   r    r[     r   z>TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.__init__c                 S   s   d S r\   r   r`   r   r   r    rb     r   z?TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.utcoffsetNrW  r   r   r   r    	BetterTry  s   rY  )r   rp   rq   objectr   r   )r+   r7  rX  rY  r
  r   r   r   r    test_bad_tzinfo_classes  s    z"TZInfoBase.test_bad_tzinfo_classesc           
   
   C   s   G dd dt }| j}dD ]\}}|tu r@|ddd||d}n0|tu rd|dddddd||d}nd	spJ d
|rt|}t|d\}}d|d	k rdpd||f }	t|tr| }| t	|d|	  q| 
tt	| q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 rQ   r   rZ   )r+   rZ   r   r   r    r[     s    z?TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.__init__c                 S   s   | j S r\   )rZ   r`   r   r   r    rb     s    z@TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.utcoffsetNrW  r   r   r   r    Edgy  s   r]  ))`F)aT)  T)r   Fr"   rF   rB   r   rJ   r   Z
impossibler   z%c%02d:%02dr  r  z01:02:03)r   r   r   r   r  r{  rT   timetzr*   r   rp   r   )
r+   r]  r7  rZ   Zlegitr   Zaofsr   r  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}|ddd|dddd d|ddd| dfD ].}| |  | |  | |  qBG 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 r\   r   r`   r   r   r    rb     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C1.utcoffsetc                 S   s   d S r\   r   r`   r   r   r    rd     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C1.dstc                 S   s   d S r\   r   r`   r   r   r    rc     r   z1TZInfoBase.test_tzinfo_classes.<locals>.C1.tznameNr9   rM   rN   rb   rd   rc   r   r   r   r    C1  s   re  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 )Nr_  rR   r   r`   r   r   r    rb     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C3.utcoffsetc                 S   s
   t ddS )Nr`  rR   r   r`   r   r   r    rd     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C3.dstc                 S   s   dS Nanamer   r`   r   r   r    rc     r   z1TZInfoBase.test_tzinfo_classes.<locals>.C3.tznameNrd  r   r   r   r    C3  s   rh  r_  rR   r`  rg  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 rf  r   r`   r   r   r    rb     r   z4TZInfoBase.test_tzinfo_classes.<locals>.C4.utcoffsetc                 S   s   dS rN  r   r`   r   r   r    rd     r   z.TZInfoBase.test_tzinfo_classes.<locals>.C4.dstc                 S   s   dS r  r   r`   r   r   r    rc     r   z1TZInfoBase.test_tzinfo_classes.<locals>.C4.tznameNrd  r   r   r   r    C4  s   ri  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 )Nir   r   r`   r   r   r    rb   $  r   z4TZInfoBase.test_tzinfo_classes.<locals>.C6.utcoffsetc                 S   s
   t ddS )Nr   r   r   r`   r   r   r    rd   %  r   z.TZInfoBase.test_tzinfo_classes.<locals>.C6.dstNr
  r   r   r   r    C6#  s   rj  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 )Nr  r   r   r`   r   r   r    rb   ,  r   z4TZInfoBase.test_tzinfo_classes.<locals>.C7.utcoffsetc                 S   s
   t ddS )Nr   r   r`   r   r   r    rd   -  r   z.TZInfoBase.test_tzinfo_classes.<locals>.C7.dstNr
  r   r   r   r    C7+  s   rl  r  r   rk  )r   r   r   rb   rd   rc   r*   r   rp   rq   r   )r+   r7  re  r   rh  ri  rj  rl  r   r   r    test_tzinfo_classes  s6    
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}|||fD ]N}|||fD ]>}ttttttfD ](}	|	||}
|	|j	|j	}| 
|
| qxqdqV|tur|jd| d
}|jd| d
}|jd	| d
}|||fD ]}|||fD ]}||k||k  }
||u s ||u r:||u s4||u r:d}nD||  u rR|u r\n nd}n"||u rld}n||u szJ d}| 
|
| qqd 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#   rR   r   ru  r   r  r   r   r    rb   8  s    
zGTZInfoBase.test_aware_compare.<locals>.OperandDependentOffset.utcoffsetNrj   r   r   r   r    OperandDependentOffset7  s   rp  r  rA  r#   r   rB   rI  rn   ru  r   r   r   r"   )r   r   r   r   r   r   r   r   r   ru  r*   r   )r+   r7  rp  r8  d0rh  r  r  r  opr;  rk  r   r   r    test_aware_compare2  s8    	

(
zTZInfoBase.test_aware_compareN)r9   rM   rN   rV  r[  rc  rm  rt  r   r   r   r    rP    s
   0rP  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 r  )r   r*   r  ru  rt  r  r   r   r  r   r   r    
test_emptyf  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v rd5|	_| t|
jd3 d S )6Nr   r   r"   r   r   rD   r   METrB   rE   r  r   r   rp  (   r  r  rR   zno argsc                      s    k S r\   r   r   r_  Zt5r   r    r     r   z'TestTimeTZ.test_zones.<locals>.<lambda>c                      s    k S r\   r   r   ry  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 +0100r_  z%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>.BadtznamerP   c                 S   s   | j S r\   r	  r`   r   r   r    rc     r   z/TestTimeTZ.test_zones.<locals>.Badtzname.tznameN)r9   rM   rN   r   rc   r   r   r   r    	Badtzname  s   rz  rF   rH   z%H:%M:%Sz02:03:04r  r?   r   )rO   r   r*   r   r   rb   r   rp   rq   rc   rd   r+  r   r   r  r   r  r8   r9   r   r   )r+   estr   metr'  r(  r^  r-  Zyuckrz  r   r   ry  r    
test_zonesn  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"   rF   rB   r`  r   r   i  r   r8  rJ   r#  ir  i)r   rO   r*   r+  r&  r   r   r    test_hash_edge_cases  s    zTestTimeTZ.test_hash_edge_casesc           	      C   s   d}| j | }tD ],\}}}|||}||}| || q| | |d tdd}| j ddd|d}tD ]`\}}}|||}||}| || | |j	t | |
 tdd	 | | d qv| | |d d S )
NrE  rF   r   r   rC   rJ   rE   r   rR   )r   r   r   r   r*   r  r  re   rz   r   rb   r   rc   	r+   r   r   r   r   r   r   r   tinfor   r   r    r2    s"    



zTestTimeTZ.test_picklingc                 C   s   g d}t dd}| jdddd|d}|D ]`}tD ]V}||d	d
}| ||t| | |jt  | | tdd | |	 d q2q*d S )N)s   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.r   r   rC   rJ   rE   r  r   r   r!  rR   )
re   r   r$  r*   r   rz   r   rb   r   rc   )r+   ri  r  rk  r&  r   r   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   r   r   r   rC   i,  r   r   r`  )r   rO   rx   )r+   r7  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
}ddddd|ffD ]L\}}|d d  }	||	|< ||	 }
|jf i ||i}| |
| |d7 }q\| | 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#  +1008rR   -200r"   rF   rB   rH   r   r  r  r  r  r   r   r   rH  r   rI  rC  r  r  r   rO   r   r*   r   rc   r   r   r   rp   r   r+   r7  Zz100Zzm200r   r8  r  r5   r9  r:  rk  r;  Zbase2Zbase3r   r   r    r<    s>    

zTestTimeTZ.test_replacec                 C   s  |  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"   rF   rB   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 Nr  rR   r\  r^   r   r   r    r[   K  s    z6TestTimeTZ.test_mixed_compare.<locals>.Varies.__init__c                 S   s   |  j tdd7  _ | j S Nr"   rR   rZ   r   r  r   r   r    rb   M  s    z7TestTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetNrW  r   r   r   r    VariesJ  s   r  r   rR   r   )	r   r*   r   rO   r   r   rb   r   rx   r+   r'  r(  r  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}|D ]j}|D ]`}| j|d|i}	|	 }
| j|
d( | j	|
}| 
|	| W d    q`1 s0    Y  q`qXd S )Nr  )r   r   r   r   )rA  r   r   )rC   ro  )rH   r  )r   i i[
 rF   r   rJ   r  r   r   r"  )r  	itertoolsproductr   r   r   r   r  r   rS  r*   )r+   Ztime_examplesZhhZmmssZusecr  Zttupr  r   r#  t_rtr   r   r    rp  \  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 }|D ]`}|j|d}| }| j|d, | j |}||ksJ |W d    q1 s0    Y  qd S )Nr   ro  r  r  rC   r   rF   rJ   r  r   ro   r   rH   rA  r  r   c                 S   s   g | ]}d | qS r   r   r!  r   r   r    r!     r   z:TestTimeTZ.test_fromisoformat_timezone.<locals>.<listcomp>r   c                 S   s   g | ]}t |qS r   r   r!  r   r   r    r!     r   r   r"  r$  )r+   Z	base_timer  r  r  r   r#  r  r   r   r    r%  v  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}g d	}t|D ]\}}|D ]}|D ]}|d
krd|d d  }|dd |f }| j|dd|  d|i}	|	j|d}
| j|
d( | j|
}| |	| W d    q\1 s0    Y  q\qTqHd S )N)r  r  r  r  )r  r  r  r   r   r   rF   rJ   r  r   r+  r   r   r   r   r"   r   r  r"  r,  )r+   Z
time_basesr  r.  r/  r  r  Zt_tupler0  r   r#  r  r   r   r    r1    s(    z'TestTimeTZ.test_fromisoformat_timespecsc              
   C   sx   g d}|D ]f}| j |dF | t | j| W d    n1 sJ0    Y  W d    q1 sh0    Y  qd S )N)r   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:30ar2  r3  rr  r   r   r    rt    s
    z#TestTimeTZ.test_fromisoformat_failsc              	   C   sT   dd t dg}|D ]:}| t | j| W d    q1 sD0    Y  qd S )Ns   12:30:45z12:30:45ru  rx  r   r   r    ry    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>.TimeSubclassNra  r   r   r   r    rJ    s   rJ  r   r   r  i r   )r   r   r   rS  r  r*   rz   )r+   rJ  ZtscZtsc_rtr   r   r    rq    s
    z&TestTimeTZ.test_fromisoformat_subclassc                    s   G  fddd j }ddddtddd	f} j | }||i 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>.CrP   c                    s6   |  }|d} jj| g|R i |}||_|S r@  rA  rC  r^   r   r    r     s
    
z2TestTimeTZ.test_subclass_timetz.<locals>.C.__new__c                 S   s   || j  | j S r\   rK  rF  r   r   r    rH    s    z2TestTimeTZ.test_subclass_timetz.<locals>.C.newmethNrI  r   r^   r   r    rK    s   rK  rH   rC   rJ     r   r   r"   r   rE   rP   rG   )
r   rO   r*   r8   rJ  r   rb   rH  r  rt  rM  r   r^   r    test_subclass_timetz  s    
zTestTimeTZ.test_subclass_timetzN)r9   rM   rN   r   r   rv  r}  r~  r2  r'  r  r<  r,  rp  r%  r1  rt  ry  rq  r  r   r   r   r    ru  c  s    W
"'
ru  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"   rF   rB   rH   rC   rJ   rE   )
r   r*   r  r  rK  r  ru  rt  r  r   r`   r   r   r    test_trivial  s    zTestDateTimeTZ.test_trivialc                    sj  | 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    n1 s0    Y  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"   r`  r   r   r   r  r   r   r   r_  rF   rB   rp     r   )r   rt  r  c                   @   s   e Zd Zdd ZdS )z4TestDateTimeTZ.test_even_more_compare.<locals>.Naivec                 S   s   d S r\   r   r`   r   r   r    rb   8  r   z>TestDateTimeTZ.test_even_more_compare.<locals>.Naive.utcoffsetNrj   r   r   r   r    Naive7  s   r  rC   rJ   rE   c                   @   s   e Zd Zdd ZdS )z4TestDateTimeTZ.test_even_more_compare.<locals>.Bogusc                 S   s
   t ddS )Nr   rR   r   r`   r   r   r    rb   D  s    z>TestDateTimeTZ.test_even_more_compare.<locals>.Bogus.utcoffsetNrj   r   r   r   r    r  C  s   r  c                      s    kS r\   r   r   r'  r(  r   r    r   H  r   z7TestDateTimeTZ.test_even_more_compare.<locals>.<lambda>)r   rO   r   rx   r*   r   r   rp   rq   r   r   )r+   r  r  r   r  r    test_even_more_compare  sN    (z%TestDateTimeTZ.test_even_more_comparec           	      C   s  d}| j | }tD ],\}}}|||}||}| || q| | |d tdd}| j |i d|i}| j dddtdddd	}tD ]`\}}}|||}||}| || | 	|j
t | | tdd
 | | d q| | |d d S )Nr  rF   r   r   r   r"   r   r   r   rR   )r   r   r   r   r*   r  r  re   rO   rz   r   rb   r   rc   r  r   r   r    r2  J  s$    



zTestDateTimeTZ.test_picklingc                 C   s   g d}d}t dd}| j|i d|i}|D ]Z}tD ]P}||dd}| || | |jt  | | tdd | | d q6q.d S )	N)s   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.)r  rn   r  r   r   r"   r  r   r   r   r   r!  rR   )	re   r   r$  r*   rz   r   rb   r   rc   )r+   ri  r   r  rk  r&  r   r   r   r   r    r'  a  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"   r`  r   r   r   r  r   r   r   r_  rC   r^  )r   rO   r+  r   rp   r   r  r   r   r    test_extreme_hashes  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 )Nr   r   r   r   r   rw  r  rB   rr  rE   r  r   r   rp  rR   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))
rO   r   r*   r   rb   r   rc   r+  r   r   )r+   r{  r   r|  r'  r(  r^  r-  r   r   r    r}    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   rw  r  rB   rH   r  r  r   r   )rO   r   r   r   rV  r*   )r+   r|  r-  r   ra   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 r  )rO   r   r*   r   r   ra  )r+   r|  ra   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:30r   c                      s     S r\   r   r   r{   nowawarer   r    r     r   z9TestDateTimeTZ.test_tz_aware_arithmetic.<locals>.<lambda>c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s     S r\   r   r   r  r   r    r     r   c                      s      S r\   r   r   )r  r   r    r     r   r   r"   r   i.  )r   rS   r   c                      s     S r\   r   r   )r   nowawareplusr   r    r     r   r_  r   Zrandomtimezoner`  r   r  r   r   r   rt   i>  rR   r  r  )r   r{   rO   r   r   rV  r   r   r   r*   ra  rp   rq   r   ri   	randrangerb   r   rt   r   r   r   )r+   Ztz55Z	timeawareZnowawareplus2r  Ztzrr;  rk  r   rt   ZmaxdiffZtzaZtzbr   )r   r{   r  r  r    test_tz_aware_arithmetic  sT    



z'TestDateTimeTZ.test_tz_aware_arithmeticc                 C   s.  | 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}ttd
ddddt
td
dddfD ]h}tdD ]P}t|}	| |	j| t j|d}
|
|}t|	| tddk r qq| d qd S )NrP   42r	  rR   r  r   r  r   r   r  r8  r   weirdtzrB   ro  r   z0utcnow(), now(tz), or astimezone() may be broken)r   r{   rO   r   r   r*   rb   r   rp   rq   r   r  r   r  r   r  r  Zfail)r+   methr8  off42anotheragainr   r  r   r{   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   rP   r  r	  rR   r  r   r  rF  i'   r   r   )r   r   r  rO   r   r   r*   rb   r   rp   rq   r   r  r   )r+   r   r  r  r8  r  r  r  rW  Zutcdatetimerb   r   rk  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 )NrP   r  r   )r   r  rO   rp   rq   )r+   r  r8  r  r   r   r    test_tzinfo_utcnowJ  s
    
z!TestDateTimeTZ.test_tzinfo_utcnowc                 C   sP   dd l }| jj}|  }||}tdd}| t||| | jt|||d d S )Nr   rP   r  r   )r   r   r  rO   rp   rq   )r+   r   r  r  r8  r  r   r   r    test_tzinfo_utcfromtimestampT  s    
z+TestDateTimeTZ.test_tzinfo_utcfromtimestampc                 C   sh  G dd dt }| j}d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| 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 rQ   rT   rU   r   dstvaluer+   r  r   r   r    r[   d  s    

z:TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.__init__c                 S   s   | j S r\   r  r`   r   r   r    rd   h  s    z5TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.dstNr9   rM   rN   r[   rd   r   r   r   r    DSTc  s   r  ))r"   )r  r"   )r   r   )Nr   r"   r#   r   ro  rx  r   r   r  r`  r_  r   r^  )r   r   r  r*   r  r  r  r  r  r  r  r  r  rp   rq   r   )r+   r  r7  r  flagr-  r   r   r   r    test_tzinfo_timetuple`  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 }d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 qL|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}tjtjtjfD ]>}|j|d}	| |	 d d |	tj d d  q |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 rQ   r  r  r   r   r    r[     s    

z6TestDateTimeTZ.test_utctimetuple.<locals>.DST.__init__c                 S   s   | j S r\   r  r`   r   r   r    rd     s    z1TestDateTimeTZ.test_utctimetuple.<locals>.DST.dstN)r   r  r   r   r   r    r    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 rQ   )r[   r   uofs)r+   r  Zdofsr  r   r    r[     s    z7TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.__init__c                 S   s   | j S r\   )r  r`   r   r   r    rb     s    z8TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.utcoffset)NrW  r   r  r   r    UOFS  s   r  )r  r  r   NrF   rB   r#   r   ro  rx  irn   rp  r   c                   @   s   e Zd Zdd ZdS )z.TestDateTimeTZ.test_utctimetuple.<locals>.NOFSc                 S   s   d S r\   r   r`   r   r   r    rb     s    z8TestDateTimeTZ.test_utctimetuple.<locals>.NOFS.utcoffsetNrj   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 )Nr   r   r`   r   r   r    rb     s    z8TestDateTimeTZ.test_utctimetuple.<locals>.BOFS.utcoffsetNrj   r   r   r   r    BOFS  s   r  r   r   r  r  i+ r  r`  r   r  r   r   r   r_  )#r   r   rp   ru   rb   Zutctimetupler*   r  r  r  r  rK  r  r  r  rt  r  r  r  r  r   r  r  r  rq   r   r   r   rt   r   r  r   rG  r   r  )r+   r7  r  r  r-  r   r  r  r   ZdtzrJ  Zhuger   r  r    test_utctimetuple  s\      z TestDateTimeTZ.test_utctimetuplec                 C   s  t dd}t dd}t dd}t d d}| j}d}d ||||fD ]}d	D ]}|d
ddddd||d}	d|rndppd }
|d ur|	 pd}|
| }|	 }| ||d |  | ||	d | |	d|d |  | |	d|d |  | t|	|d |  qHq@d S )Nr   r     z+03:40iz-03:51r   z
0001-02-03)r   iy r"   rF   rB   rH   rC   r   r   z04:05:59z.987001rY  ku   ሴr  )rO   r   rc   r  r*   r   )r+   r  ZplusZminusunknownr7  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}dddddddd|ffD ]L\}}|d d  }	||	|< ||	 }
|jf i ||i}| |
| |d7 }qh| | d |jd d}| |j | |  |j|d}| || | |j|j |ddd}| j	t
|jdd d S )Nr#  r  r  rR   r  r"   rF   rB   rH   rC   rJ   rE   r   r1  r2  r3  r  r  r  r  r   r   r  r  r  r4  r  r  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44rC   r   Zm300r	  r   r   )rO   r   r   r{   r   r   rp   r   r  r*   r   r   rb   r   ra  )r+   ZfnoneZf44mZfm5hra   r  r;  rk  r   r   r    test_more_astimezone  s*    


z#TestDateTimeTZ.test_more_astimezoner   c                 C   s4   | j tj}| |d | | | | d S r\   )r   r{   r   r   r*   r  r`   r   r   r    test_astimezone_default_utc-  s    z*TestDateTimeTZ.test_astimezone_default_utcr  c                 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 )Nr=  rn   rH   rJ   ro  r   r  z	-0500 ESTrC   z	-0400 EDT)r   r   r   r  r*   r  )r+   ra   r   r   r   r    test_astimezone_default_eastern5  s    z.TestDateTimeTZ.test_astimezone_default_easternc                 C   s8   t ddddtjd}| }| }| |j|j d S )Nr  rn   r"   rC   r   )r   r   r   r  r*   r   )r+   r   r   rB  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}|||fD ]:}|||fD ]*}|| }	t|j|j d}
| |	|
 qlq^|ddddddd	}|jd| d}|jd| d}|jd| d}|||fD ]}|||fD ]}|| }	||u s||u r4||u s*||u r4td}
nT||  u rL|u rZn n
td}
n.||u rptdd}
n||u s~J tdd}
| |	|
 qqd 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 rn  ro  r  r   r   r    rb   N  s    
zLTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffset.utcoffsetNrj   r   r   r   r    rp  M  s   rp  r  rA  r#   rn   r   rp  r   r   rB   rI  rR   rq  r   ir  )r   r   r   r   ru  r*   )r+   r7  rp  r8  rr  rh  r  r  r  r;  rk  r   r   r    test_aware_subtractH  s6    	(



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"   rF   rB   rH   rC   rJ   rE   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 r  r\  r^   r   r   r    r[     s    z:TestDateTimeTZ.test_mixed_compare.<locals>.Varies.__init__c                 S   s   |  j tdd7  _ | j S r  r  r  r   r   r    rb     s    z;TestDateTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetNrW  r   r   r   r    r    s   r  r   rR   r   )	r   r*   r   rO   r   r   rb   r   rx   r  r   r   r    r,  t  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 | }||i 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>.CrP   c                    s6   |  }|d} jj| g|R i |}||_|S r@  rA  rC  r^   r   r    r     s
    
z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.__new__c                 S   s   || j  | j S r\   )r  r  rF  r   r   r    rH    s    z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.newmethNrI  r   r^   r   r    rK    s   rK  r  r   r  rH   rC   rJ   r  r   r   r"   r   rE   rP   rG   )
r   rO   r*   r8   rJ  r   rb   rH  r  r  rM  r   r^   r    test_subclass_datetimetz  s    
z'TestDateTimeTZ.test_subclass_datetimetzN)r9   rM   rN   r   r   r  r  r2  r'  r  r}  r  r  r  r  r  r  r  r  r  r  r<  r  r   r9  r  r  r  r  r,  r  r   r   r   r    r    s8   E%A%#
$P'



,r  c                 C   s    d|    }|r| t|7 } | S )NrJ   )r  r   )ra   Z
days_to_gor   r   r    first_sunday_on_or_after  s    r  rR   r   r   rH   rF   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 Nr   r   	stdoffsetreprnamestdnamedstnamer+   r   r  r  r  r   r   r    r[     s    zUSTimeZone.__init__c                 C   s   | j S r\   r  r^   r   r   r    r_     s    zUSTimeZone.__repr__c                 C   s   |  |r| jS | jS d S r\   rd   r  r  r`   r   r   r    rc     s    
zUSTimeZone.tznamec                 C   s   | j | | S r\   r  rd   r`   r   r   r    rb     s    zUSTimeZone.utcoffsetc                 C   s   |d u s|j d u rtS |j | u s$J ttj|jd}| dkrV|jdkrV|jdksZJ tt	j|jd}| dkr|jdkr|jdksJ ||jd d  kr|k rn nt
S tS d S Nr4  rJ   rH   rE   r#   r  r   )r   r   r  DSTSTARTr   r  r  r  rK  DSTENDr   r+   ra   rG  endr   r   r    rd     s    $$ zUSTimeZone.dstNr9   rM   rN   r[   r_   rc   rb   rd   r   r   r   r    r    s
   r  r   r   r   r  rK   CentralZCSTZCDTrG   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 )TestTimezoneConversionsr  rH   rE   rF   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 )NrF   r   r"   rH  )r*   rd   r   r  r   r  r   r   )
r+   ra   r   r   dstondstoffasutcthere_and_backZnexthour_utcZnexthour_tzr   r   r    checkinside  s&    





z#TestTimezoneConversions.checkinsidec                 C   sF   |  | t |  ||| ||}||}|  || d S r\   )r*   rd   r   r  )r+   ra   r   r   r  r  r   r   r    checkoutside/  s
    

z$TestTimezoneConversions.checkoutsidec              	   C   s   | j j|d}| jj|d}tddtttddtddfD ]p}| ||||| || || fD ]}| ||||| qb| ||| || || fD ]}| ||| qq<d S )Nr   rp  r   r"   rR   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 r\   )r  r   utc_realr  utc_faker^   r   r   r    	test_easyP  s    z!TestTimezoneConversions.test_easyc              	   C   sH  | 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}| || ttfD ]}tt	fD ]}| j
tdd }||d 8 }||d  }	|	j|d}
dD ]Z}| j
j|d}dD ]:}|j|d}|
j|d}	|	|}| |jd d| q|
t7 }
qqqd S )NrH   r   iz-0900r   r   rB   rH  rJ   r  r   r"   rF   )r   r"   r"   rF   r   ro  r   rI  )r  r   rO   r   r  r   r*   r  r  r  r  rb   r   )r+   ZfourbackZninewestrk  r;  Zsixutcr   r   Zfirst_std_hourr  Z	asutcbaseZtzhourZexpectedbaseru  Zastzr   r   r    test_trickyh  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 r\   r   r`   r   r   r    rb     r   z<TestTimezoneConversions.test_bogus_dst.<locals>.ok.utcoffsetc                 S   s   t S r\   r  r`   r   r   r    rd     r   z6TestTimezoneConversions.test_bogus_dst.<locals>.ok.dstNr
  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 r\   r   r`   r   r   r    rd     r   z9TestTimezoneConversions.test_bogus_dst.<locals>.notok.dstNr9   rM   rN   rd   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 )Nr  r#   )r  r   r`   r   r   r    rd     s    
z@TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notok.dstNr  r   r   r   r    tricky_notok  s   r  r  r"   )r   r   r{   r   r  r  rp   r   )r+   r  r{   r  r  ra   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}d
D ]}|j|d}|dkr|tdd8 }t|}	| 	||	 ||j }||}	| 	||	 |jtd|}	| 	||	 |t7 }|t7 }q| jjdtd	}|j|d}dD ]v}|j|d}t|}	| 	||	 ||j }||}	| 	||	 |jtd|}	| 	||	 |t7 }|t7 }qbd S )Nr   c                   @   s   e Zd Zdd ZdS )z<TestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZonec                 S   s
   || j  S r\   )r  r`   r   r   r    r     s    zDTestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZone.fromutcNr9   rM   rN   r   r   r   r   r    FauxUSTimeZone  s   r  r   FEasternZFESTZFEDTrH   r  )r   r   r"   rB   rH   rC   rH  r   r"   r   )r   r"   r"   rF   rB   rH   )rp   rq   r   r   r   r  r   r  r   r*   r   r   r  r  r  r   r  r  r   r  )
r+   r{   Zenowr  r  rG  ZfstartZwallrk  r;  r   r   r    r     sL    







z$TestTimezoneConversions.test_fromutcN)r9   rM   rN   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 r\   r   r   Zas_dateZas_datetimer   r    r     r   z+Oddballs.test_bug_1028306.<locals>.<lambda>c                      s    k S r\   r   r   r  r   r    r     r   c                      s    kS r\   r   r   r  r   r    r     r   c                      s    kS r\   r   r   r  r   r    r     r   c                      s    kS r\   r   r   r  r   r    r     r   c                      s    kS r\   r   r   r  r   r    r     r   c                      s    kS r\   r   r   r  r   r    r     r   c                      s    kS r\   r   r   r  r   r    r     r   Tr"   r   )rK  Fr   )r   r  r   rV  r   rx   r   rp   rq   r*   __eq__rK  r   r  r  r  r  )r+   Zdifferent_dayZas_differentZdate_scZdatetime_scr   r  r    test_bug_1028306  s4    

zOddballs.test_bug_1028306c              	   C   s^   t  t t t t tt fD ]4}| t	 d|_
W d    q$1 sN0    Y  q$d S rM  )r   r  r   r   r  r   r   r   rp   AttributeErrorr$   )r+   r  r   r   r    test_extra_attributes  s    zOddballs.test_extra_attributesc                 C   s  G dd d}t dt d|dfD ]Z}| t< | tdddddddt||||||| W d    q(1 sx0    Y  q(| td tddd W d    n1 s0    Y  |d}| td tdd| W d    n1 s0    Y  G d	d
 d
t}|d}| td tdd| W d    n1 sD0    Y  | 	t tddd W d    n1 s|0    Y  | 	t tddd W d    n1 s0    Y  | 	t tddd W d    n1 s0    Y  | 	t tdddd W d    n1 s&0    Y  | 	t  tddddd W d    n1 sb0    Y  | 	t" tdddddd W d    n1 s0    Y  | 	t$ tddddddd W d    n1 s0    Y  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 r\   value)r+   r  r   r   r    r[   )  s    z6Oddballs.test_check_arg_types.<locals>.Number.__init__c                 S   s   | j S r\   r  r^   r   r   r    __int__+  s    z5Oddballs.test_check_arg_types.<locals>.Number.__int__N)r9   rM   rN   r[   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>.FloatNra  r   r   r   r    Float>  s   r  z&^integer argument expected, got float$g      $@)
decimalZDecimalZassertWarnsDeprecationWarningr*   r   r  rq   r  rp   )r+   r  xxZf10r  Zs10r   r   r    test_check_arg_types'  s@    $**,,,,.02zOddballs.test_check_arg_typesN)r9   rM   rN   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| ur$td|jdd }|jdd }|du s`|du s`| du rdt||kr|| }| }||kr|S ||fD ]@}|| }| |kr|  S |jdd}| |kr|  S qtddS )*datetime in UTC -> datetime in local time.&fromutc() requires a datetime argumentdt.tzinfo is not selfr   r  r"   NzNo suitable local time found)rT   r   rq   r   r   r   rb   rd   )r+   ra   Zoff0Zoff1ldtZoffr   r   r    r   [  s*    


ztzinfo2.fromutcNr  r   r   r   r    r  Y  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 r  r  r  r   r   r    r[   }  s    zUSTimeZone2.__init__c                 C   s   | j S r\   r  r^   r   r   r    r_     s    zUSTimeZone2.__repr__c                 C   s   |  |r| jS | jS d S r\   r  r`   r   r   r    rc     s    
zUSTimeZone2.tznamec                 C   s   | j | | S r\   r  r`   r   r   r    rb     s    zUSTimeZone2.utcoffsetc                 C   s  |d u s|j d u rtS |j | u s$J ttj|jd}| dkrV|jdkrV|jdksZJ tt	j|jd}| dkr|jdkr|jdksJ |jd d}|t
 |  kr|k rn nt
S ||  kr|t
 k rn n|jrtS t
S ||  kr|t
 k rn n|jrt
S tS tS d S r  )r   r   r  r  r   r  r  r  rK  r  r   r  r  r   r   r    rd     s    $$ zUSTimeZone2.dstNr  r   r   r   r    r  {  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 )N  rJ   r   rm   r   r  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 )Nr  rJ   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 )NrB   rF   r  r   r  r+   ra   Z
fold_startZ	fold_stopr   r   r    rb     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   r    rd     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  r   r   r    rc     s    
zEurope_Vilnius_1941.tznamec                 C   sr   |j dksJ |j| u sJ |jdkr*t|  \}}||k rJ|dt  S ||k rf|dt  jddS |dt  S )Nr   r  rB   rF   r"   r  )r  r   r  ru   r  r   r   r  r   r   r    r     s    
zEurope_Vilnius_1941.fromutcN)	r9   rM   rN   r  r  rb   rd   rc   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 )Nr  rJ   r   r   r   r   z%c %Z%zz!Mon Jun 23 23:59:59 1941 MSK+0300r   rm   z"Mon Jun 23 23:00:00 1941 CEST+0200r"   r  z"Tue Jun 24 00:00:00 1941 CEST+0200)r  r   r   r   r  r*   r  r  r   rd   rx   )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 )Nr  rJ   r   r  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   sx   t ddd}tddddd}| |jd | |jd | t" t ddddd d W d    n1 sj0    Y  d S Nr   r"   r  )r   r   r*   r  rp   rq   r+   r   ra   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  ra  )r+   ra   r   r   r   r    test_member*  s
    z'TestLocalTimeDisambiguation.test_memberc                 C   s  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    n1 s0    Y  | t |jdd W d    n1 s0    Y  | t" |dddd d W d    n1 sV0    Y  | t* |dddddddd d	 W d    n1 s0    Y  d S )Nr   r"   r  )r  r   r   rF   )	r   r   r*   r   r  r   rp   r   rq   r  r   r   r    r<  1  s$    *,2z(TestLocalTimeDisambiguation.test_replacec                 C   s@   t d}tddd}| ||jdd | ||jdd d S r  )r   r   r*   r   r  r   r   r    r   H  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 r  )r   r   r*   r+  r   r  r   r   r    	test_hashN  s    z%TestLocalTimeDisambiguation.test_hashr  c                 C   s<   d}t |}t |d }| |jd | |jd d S )NiXUTr  r   r"   )r   r  r*   r  )r+   rB  dt0rr   r   r   r    r  T  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 )	N   A%Z%z	LHST+1030>Australia/Lord_Howe timezone is not supported on this platformiU  r   r"   )r  r  r  r:   r   r  r*   r  )r+   tmrB  r  r'  r   r   r    test_fromtimestamp_lord_howe\  s    


z8TestLocalTimeDisambiguation.test_fromtimestamp_lord_howec                 C   s   |  tdjd d S r  )r*   r   r  r  r^   r   r   r    %test_fromtimestamp_low_fold_detectionl  s    zATestLocalTimeDisambiguation.test_fromtimestamp_low_fold_detectionc                 C   s8   t ddddd}|jdd}| | d |  d S )Nrl   rn   rF   r"   ro  r  r  )r   r   r*   rW  )r+   r   rr   r   r   r    test_timestampq  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 )Nr!  r"  r#  r$  r  rH   rC   r"   r  r   r  r%  )r  r  r  r:   r   r   rW  r*   )r+   r&  r   s0s1r   r   r    test_timestamp_lord_howex  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 )
Nrl   rn   rF   r"   ro  r  r  r   r   )r   r   r  r*   rc   r   r  )r+   r   rr   Zadt0Zadt1r   r   r    r    s    z+TestLocalTimeDisambiguation.test_astimezonec           	      C   sz   t dd}tddddd}tD ]V\}}}||fD ]B}|||}||}| || | |dk rfdn|j|j q0qd S )Nr"   r  rH   r   )r   r   r   r   r   r*   r  )	r+   r   ra   r   r   r   r  rB  r  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   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 dD ]@}t dddd|td}| | t | |jdd t q~dD ]@}t dd	d
d|td}| | t | |jdd t qd S )Nr  r#   r  r"   r   rF   r  r  rH   rE   )	r   r	  r   rD  r*   rd   r   r   r   )r+   	dt_summer	dt_winterru  ra   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 )
Nr  r#   r  r"   r   rF   rI   r   r  )r   r	  r   rD  r*   rb   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 )Nr  r#   r  rJ   r   rE   rH   rC   r   ro  r"   )r   rm   )r  r"   rF   )rJ   rm   )
r   r	  r   rD  r   r*   r   r  rK  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 )Nr  r"   r   rJ   )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 )Nr  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 )Nr  rH   rE   rF   r  r   r1  )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 )Nr  r"   r   r  r  r#   r  r  rH   rE   rF   )r   r	  r*   r+  r   )r+   r   r2  r4  r   r   r    test_hash_aware  s    z+TestLocalTimeDisambiguation.test_hash_awareN)r9   rM   rN   r  r  r  r  r<  r   r  r   r9  r  r'  r(  r)  r,  r  r-  r   r   r   r   r0  r3  r5  r6  r   r   r   r    r    s6   



	


!r  c                 C   s"   t | \}}t|d  t||S r\   )r  teenextr  )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    r[     s    	zZoneInfo.__init__c                 C   s   t d| t d| f}| r|d d t }|d d  |7  < |d d  |7  < tdt| D ]H}|d |  ||d  d t 7  < |d |  || d t 7  < q^|S )Nr|  r   r"   )r   SECr  r,  )r<  r=  r   rZ   r  r   r   r    r>    s    $"zZoneInfo.invertc              	   C   sH  | 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 }t	|d
 D ]}|
td| d q| |d }t|D ]:\}\}}	}
||
|d|
  }td||	|f||< qd gt| }t|D ]\}}|| ||< q"| ||}|S )NrH   ZTZifznot a zoneinfo filero   r  rB   r  r   r  r"   z>lbbrJ   rF   )readdecoder   seekr   fromfiler7   	byteorderbyteswapr  r  structunpackr-  findr   r,  )r7  fileobjcountsr<  Ztype_indicesZttisr  ZabbrsZgmtoffisdstZabbrindabbrr=  idxr+   r   r   r    rC  $  s2    



zZoneInfo.fromfilec                 C   sH   t j| j|}t|d}| |W  d    S 1 s:0    Y  d S )Nrb)ospathjoinzonerootopenrC  )r7  r5   rP  r  r   r   r    fromnameI  s    zZoneInfo.fromnamer.  r"   c                 C   s  t |tstd|j| ur$td| | j d |jd  |jd  |j	 }|| j
d k rn| jd }d}nt| j
|}| j
|d  |ksJ |t| j
ks|| j
| k sJ | j|d | \}}|d |d  }|td|| j
|d   k}||d 7 }|r|jdd	S |S d
S )r  r  r  r   r  r   r"   r   rF   r  N)rT   r   rq   r   r   r  EPOCHORDINALr  ru  rt  r<  r=  bisectbisect_rightr,  r   r   )r+   ra   rW  Zttir  rM  Ztti_prevshiftr   r   r    r   Q  s0    


 zZoneInfo.fromutcc                 C   s\   |  | j d |jd  |jd  |j }| j|j }t||}| j	t
d|d  | S )Nr   r  r   r   r"   )r  rU  r  ru  rt  r   r  rV  rW  r=  rt   )r+   ra   r  rW  r   rM  r   r   r    _find_tio  s    zZoneInfo._find_tic                 C   s   |  |dS r  rY  r`   r   r   r    rb   y  s    zZoneInfo.utcoffsetc                 C   s   |  |d}|rtS tS rM  )rY  r   r   )r+   ra   rK  r   r   r    rd   |  s    zZoneInfo.dstc                 C   s   |  |dS )NrF   rZ  r`   r   r   r    rc     s    zZoneInfo.tznameNc                 c   s   |d u r| j }tj|d}zt|}W n ty<   Y d S 0 |> |D ](}| }|rH|dsH| d V  qHW d    n1 s0    Y  d S )Nzzone.tab#rF   )	rR  rO  rP  rQ  rS  r  stripr3   r  )r7  ZzonedirZzone_tabr  liner   r   r    	zonenames  s    zZoneInfo.zonenamesc                 C   s  d } } }}t j }}t }}	tj }
}d  }}tj }}d  }}t|dd}|  D ]}|d7 }| |}| D ]\}}||k rqx|tkr|d7 }||f||fkr|}|}|}|tj| f|tj|
 fk r|}|}|}
qx|tk rB|d7 }| }||f|	|fkr|}	|}|}|tj| f|tj| fk rJ|}|}|}qx|d7 }qxqZ|||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   rt   r   r   r   r^  rT  transitionsprintr[  )r7  
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   ra   rX  Ztrans_countsr   r   r    stats  sZ    





zZoneInfo.statsc                 c   sH   t t| j| jD ]0\\}}\}}|d |d  }t||fV  qd S r  )r:  r  r<  r=  r   r  r+   _Zprev_tir   r=  rX  r   r   r    r_    s    "zZoneInfo.transitionsc                 c   sn   t t| j| jD ]V\\}}\}}|d |d  }|tk r|d |d krt|| |d |d fV  qdS )zLFind all folds with the same value of isdst on both sides of the transition.r   r"   rF   N)r:  r  r<  r=  r   r   r  re  r   r   r    nondst_folds  s    "zZoneInfo.nondst_foldsFc           
   
   C   sn   d}|   D ]\}| |}| D ]D\}}}}	|j|k s"|rF||	krFq"|d7 }td||||||	f  q"qd S )Nr   r"   z%3d) %-30s %s %10s %5s -> %s)r^  rT  rg  r  r`  )
r7  Z	same_abbrra  rb  rc  r   ra   rX  Z	prev_abbrrL  r   r   r    print_all_nondst_folds  s    
zZoneInfo.print_all_nondst_foldsc                 c   s*   |   D ]\}}|tk r|| fV  qd S r\   r_  r   r+   r   rX  r   r   r    folds  s    zZoneInfo.foldsc                 c   s(   |   D ]\}}|tkr||fV  qd S r\   ri  rj  r   r   r    gaps  s    zZoneInfo.gapsc                 c   s    |   D ]\}}|s|V  qd S r\   )r_  rj  r   r   r    zeros  s    zZoneInfo.zeros)N)r"   )Fr"   )r9   rM   rN   rR  r[   r]  r>  classmethodrC  rT  r   r  rU  r   rY  rb   rd   rc   r^  rd  r_  rg  rh  rk  rl  rm  r   r   r   r    r;  	  s2   

$

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   sx   t jdkr| d t jdkr(| d zt| j| _W n8 tyr } z | d| j|f  W Y d }~n
d }~0 0 d S )NZvxworksz"Skipping zoneinfo tests on VxWorksr  z"Skipping zoneinfo tests on WindowszSkipping %s: %s)r7   r;  r:   r;  rT  rc  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 )Nr   )r*   r   r  idr   )r+   r	  r
  r   r   r    assertEquivDatetimes  s    z!ZoneInfoTest.assertEquivDatetimesc           	      C   s   | j }| D ]\}}d| d| |tj fD ]}|| }||j|d}| |jd |jtj	d
|}| || | }| |jd d||  | |
tj	|jtj	d q.tj |fD ]0}|| }|j|d}||}| |jd qqd S )Nr   r   r   r"   )r   rk  r   rD  r   r   r*   r  r   r   r  rs  rb   	r+   r   ra   rX  r  udtr  Zadtrb   r   r   r    
test_folds   s$    
zZoneInfoTest.test_foldsc           	      C   s.  | j }| D ]\}}d| d| |tj fD ]}|| }|j|d}||}| |jd |jtj	d
|}| || | }| |jd d|jd d|  ||j|d| | }| |jdd |jdd d|  q0tj |fD ],}|| }||j|d}| |jd qqd S )Nr   r   r   r"   r  zAt %s.)r   rl  r   rD  r   r   r*   r  r   r   r  rs  rb   Z
assertLessrt  r   r   r    	test_gaps  s(    
 zZoneInfoTest.test_gapsc              	   C   s  d| j v s| j dr&| d| j   | j}tjd}| j tjd< z4t  |	 D ]\}}|j
dkrp qR|tddd t }|t }dd	d
d|d |d |d fD ]J}|| }t|}	t||jd d}
| |	|
 |	 }| || q|dkrXt||d  }| }|jdd }| |||d   | |||d   qXW |d u rhtjd= n
|tjd< t  n(|d u rtjd= n
|tjd< t  0 d S )NZRiyadh8zright/zSkipping %sTZi  r.  r"   iir   r   i@ i2 r   rF   r  )rc  r3   r:   r   rO  environgetr  tzsetr_  r  r   r?  r  r   rs  rW  r*   )r+   r   rx  ru  rX  r*  r  r  rB  ZsdtZtzdtr+  ra   Zts0Zts1r   r   r    test_system_transitions-  sJ    










z$ZoneInfoTest.test_system_transitionsN)	r9   rM   rN   rc  r   rs  rv  rw  r|  r   r   r   r    ro    s   
ro  c                       s   e Zd Z fddZ  ZS )ZoneInfoCompleteTestc                    sh   g }t drXt D ]B}td| tfi }||_t|D ]}|dr8||| q8qt	 
| d S )NZtzdatazZoneInfoTest[%s]Ztest_)r   r;  r^  r   ro  rc  r-   r3   r  superr[   )r+   ri  r5   ZTestmethodr8   r   r    r[   [  s    
zZoneInfoCompleteTest.__init__)r9   rM   rN   r[   __classcell__r   r   r  r    r}  Z  s   r}  c                   @   s   e Zd ZdZdS )IranTestzAsia/TehranN)r9   rM   rN   rc  r   r   r   r    r  g  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	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 ),CapiTestc                 C   s$   | j jdr| d t  d S )NZPurezNot relevant in pure Python)r8   r9   r4   r:   	_testcapiZtest_datetime_capir^   r   r   r    r   l  s    
zCapiTest.setUpc              	   C   sR   dD ]H}t |}| j|d | |tj W d    q1 sB0    Y  qd S )NTF)	use_macro)r  Zget_timezone_utc_capir   r   r   r   )r+   r  Zcapi_utcr   r   r    test_utc_capiu  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}|D ]\}}}	| j|d | ||	 tdd	d
|d}
tdd	d
|	d}| |
| | |
 |  tdd	d
dtjd}| |
	tj| W d    qL1 s0    Y  qLd S )Nr   r   r   est_capi	est_macroest_macro_nn)r5   r  rF   rH   r   rC   )
r  Zmake_timezones_capir   r   r   r*   r   rc   r   r  )r+   r  r  r  Z	exp_namedZexp_unnamedcasesr5   Ztz_actZtz_exprr   r  r  r   r   r    test_timezones_capi|  s     zCapiTest.test_timezones_capic              
   C   s   G dd dt }t |fD ]~}dD ]t}|| }| j||dJ t|\}}}| ||j | ||j | ||j W d    q 1 s0    Y  q qd S )Nc                   @   s   e Zd ZdS )z=CapiTest.test_PyDateTime_DELTA_GET.<locals>.TimeDeltaSubclassNra  r   r   r   r    TimeDeltaSubclass  s   r  )r   7   韆 r  r7  r   )r   r   r  ZPyDateTime_DELTA_GETr*   r   r   r   )r+   r  klassr   r-  r   r   r   r   r   r    test_PyDateTime_DELTA_GET  s    z"CapiTest.test_PyDateTime_DELTA_GETc              
   C   s   G dd dt }t |fD ]~}dD ]t}|| }| j||dJ t|\}}}| ||j | ||j | ||j W d    q 1 s0    Y  q qd S )Nc                   @   s   e Zd ZdS )z2CapiTest.test_PyDateTime_GET.<locals>.DateSubclassNra  r   r   r   r    rb    s   rb  ))r  r"   rF   )r=  rF   r  r  )r   r   r  ZPyDateTime_GETr*   r  r  rK  )r+   rb  r  r   r-  r  r  rK  r   r   r    test_PyDateTime_GET  s    zCapiTest.test_PyDateTime_GETc           	   
   C   s   G dd dt }t |fD ]}dD ]}|| }| j||dZ t|\}}}}| ||j | ||j | ||j | ||j W d    q 1 s0    Y  q qd S )Nc                   @   s   e Zd ZdS )z;CapiTest.test_PyDateTime_DATE_GET.<locals>.DateTimeSubclassNra  r   r   r   r    rn    s   rn  )  r  r   r  r   r  r  r  r  )	r   r   r  ZPyDateTime_DATE_GETr*   r  ru  rt  r  )	r+   rn  r  r   r-  r  ru  rt  r  r   r   r    test_PyDateTime_DATE_GET  s    z!CapiTest.test_PyDateTime_DATE_GETc           	   
   C   s   G dd dt }t |fD ]}dD ]}|| }| j||dZ t|\}}}}| ||j | ||j | ||j | ||j W d    q 1 s0    Y  q qd S )Nc                   @   s   e Zd ZdS )z7CapiTest.test_PyDateTime_TIME_GET.<locals>.TimeSubclassNra  r   r   r   r    rJ    s   rJ  )r   ro  r   r#   r  r  )	r   r   r  ZPyDateTime_TIME_GETr*   r  ru  rt  r  )	r+   rJ  r  r   r-  r  ru  rt  r  r   r   r    test_PyDateTime_TIME_GET  s    z!CapiTest.test_PyDateTime_TIME_GETc                 C   s  t  \}}}| jdd | |tj W d    n1 s>0    Y  | jdd | |tj W d    n1 sx0    Y  | jddz | |tj ttddd}| || t	dd	d
|d}t	dd	d
|d}| || | |
 |
  W d    n1 s0    Y  d S )Nutc0)Ztestnameutc1non_utcr   r   r   r  rF   rH   r   )r  Zget_timezones_offset_zeror   r   r   r   r   r   r*   r   rc   )r+   r  r  r  Znon_utc_exprr   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}|D ]L}d	D ]B}| j||d
  | ||| W d    q1 s0    Y  qqd S )Nc                   @   s   e Zd ZdS )z.CapiTest.test_check_date.<locals>.DateSubclassNra  r   r   r   r    rb    s   rb    r"   T
2011-01-01r   r   r  argexact)r   r   r  Zdatetime_check_daterx   r   r  r  r   r   r   r   r   )	r+   rb  r-  Zdsra   Zis_dater   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}|D ]L}d	D ]B}| j||d
  | ||| W d    q1 s0    Y  qqd S )Nc                   @   s   e Zd ZdS )z.CapiTest.test_check_time.<locals>.TimeSubclassNra  r   r   r   r    rJ    s   rJ  r   ro  Tr"   r  r  r  r  )r   r  Zdatetime_check_timerx   r   r  r  r   r   r   r   r   )r+   rJ  r   r  Zis_timer   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}|D ]L}d	D ]B}| j||d
  | ||| W d    q1 s0    Y  qqd S )Nc                   @   s   e Zd ZdS )z6CapiTest.test_check_datetime.<locals>.DateTimeSubclassNra  r   r   r   r    rn    s   rn  r  r"   r   ro  Tr  r  r  )r   r  Zdatetime_check_datetimerx   r   r  r  r   r   r   r   r   )r+   rn  ra   r  Zis_datetimer   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}|D ]L}dD ]B}| j||d  | ||| W d    q1 s0    Y  qqd S )	Nc                   @   s   e Zd ZdS )z4CapiTest.test_check_delta.<locals>.TimeDeltaSubclassNra  r   r   r   r    r  8  s   r  r"   Tr  r  r  r  )r   r  Zdatetime_check_deltarx   r   r  r  r   r   r   r   r   )r+   r  r   ZtdsZis_timedeltar   r  r  r   r   r    test_check_delta7  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}|D ]L}d	D ]B}| j||d
  | ||| W d    q1 s0    Y  qqd S )Nc                   @   s   e Zd ZdS )z2CapiTest.test_check_tzinfo.<locals>.TZInfoSubclassNra  r   r   r   r    TZInfoSubclassR  s   r  r   r   Tr"   r  r  r  r  )r   r   r   r  Zdatetime_check_tzinforx   r   r  r  r   r   r   )	r+   r  r  Ztzisr   Z	is_tzinfor   r  r  r   r   r    test_check_tzinfoQ  s$    zCapiTest.test_check_tzinfoc              	   C   sh   t ddd}dD ]R}| j|d2 t||j|j|j}| || W d    q1 sX0    Y  qd S )Nr  r  r   FTmacro)r   r   r  Zget_date_fromdater  r  rK  r*   r+   exp_dater  
c_api_dater   r   r    test_date_from_daten  s    zCapiTest.test_date_from_datec                 C   s   t ddddddd}dD ]b}| j|d	B t||j|j|j|j|j|j	|j
}| || W d    q1 sp0    Y  qd S )
Nr  r  r   r  r   r  r  r  r  )r   r   r  Zget_datetime_fromdateandtimer  r  rK  r  ru  rt  r  r*   r  r   r   r    test_datetime_from_dateandtime{  s    
z'CapiTest.test_datetime_from_dateandtimec                 C   s   t ddddddd}dD ]}d	D ]x}| j||d
V t||j|j|j|j|j|j	|j
|j	}| || | |j|j W d    q 1 s0    Y  q qd S )Nr  r  r   r  r   r  r  r   r"   r  r  r  )r   r   r  Z#get_datetime_fromdateandtimeandfoldr  r  rK  r  ru  rt  r  r  r*   )r+   r  r  r  r  r   r   r    %test_datetime_from_dateandtimeandfold  s"    z.CapiTest.test_datetime_from_dateandtimeandfoldc              	   C   sn   t dddd}dD ]V}| j|d6 t||j|j|j|j}| || W d    q1 s^0    Y  qd S )Nr  r   r  r  r  r  )	r   r   r  Zget_time_fromtimer  ru  rt  r  r*   )r+   exp_timer  
c_api_timer   r   r    test_time_from_time  s    zCapiTest.test_time_from_timec                 C   s   t dddd}dD ]v}dD ]l}| j||dJ t||j|j|j|j|j}| 	|| | 	|j|j W d    q1 s|0    Y  qqd S )Nr  r   r  r  r  r  r  )
r   r   r  Zget_time_fromtimeandfoldr  ru  rt  r  r  r*   )r+   r  r  r  r  r   r   r    test_time_from_timeandfold  s    z#CapiTest.test_time_from_timeandfoldc              	   C   sh   t ddd}dD ]R}| j|d2 t||j|j|j}| || W d    q1 sX0    Y  qd S )Nr   r  r  r  r  )r   r   r  Zget_delta_fromdsur   r   r   r*   )r+   Z	exp_deltar  Zc_api_deltar   r   r    test_delta_from_dsu  s    zCapiTest.test_delta_from_dsuc              	   C   sn   t ddd }dD ]T}| j|d4 tt||}| |tddd W d    q1 s^0    Y  qd S )N  rH   r   r  r  )r   rW  r   r  Zget_date_fromtimestamprU   r*   r   )r+   r  r  r-  r   r   r    test_date_from_timestamp  s
    z!CapiTest.test_date_from_timestampc              
   C   s   dddt tdddfddd	t tdddfg}tj}|D ]z}d
D ]p}| j||dN |\}}}t|d|i}t| }	||	|||}
| ||
 W d    qB1 s0    Y  qBq:d S )N)r  rH   r   NF)r  NTr  r"   r   T)r  rH   r   r   ro  NF)r  NTr  r  )caser  r   )	r   r   r  Zget_datetime_fromtimestampr   r   rU   rW  r*   )r+   r  r  r  r  Zdtupr   ZusetzZdt_origr  ro  r   r   r    test_datetime_from_timestamp  s     	
z%CapiTest.test_datetime_from_timestampN)r9   rM   rN   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  k  s*   		r  c                 C   s   | t  |S r\   )ZaddTestr}  )loaderZstandard_testspatternr   r   r    
load_tests  s    r  __main__)mr   rv  r  rV  r   r  r7   rO  r   ri   r5  rF  r:  r   operatorr   r   r   r   r   r   r	   r
   r   testr   Ztest.supportr   r   r   r   r   r)   r   r   r   r   r   r   r   r  r  r  r   _loadsr$  r  r  r   r,  r5  r  rN  r  ZTestCaser'   rO   re   rh   rk   r   r   r   r  r  r  r  r  r<  r>  r?  rP  ru  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;  ro  Z	TestSuiter}  r  r  r  r9   mainr   r   r   r    <module>   s   ,8_ A3    =!      a             "        <


*  c"32  
 gk   
