o
    g                    @   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 Z0dddi g dfZ1e2dZ3e2dZ4G dd dej5Z6G dd de$Z7G dd de7Z8G dd de$Z9G dd dej5Z:G d d! d!ej5Z;G d"d# d#Z<G d$d% d%e<ej5Z=G d&d' d'ej5Z>G d(d) d)e'Z?G d*d+ d+e<ej5Z@G d,d- d-eZAG d.d/ d/e@ZBG d0d1 d1eBZCG d2d3 d3e%ZDG d4d5 d5e<ej5ZEG d6d7 d7ZFG d8d9 d9eEeFej5ZGG d:d; d;eBeFej5ZHd<d= ZIe#dZJe#dd>ZKe#dd?ZLe#dd@ZMeddAddBZNedddCdZOG dDdE dEe$ZPePdFdGdHdIZQePdJdKdLdMZRePdNdOdPdQZSePdRdSdTdUZTe7ddVdZUe7dWdXdZVG dYdZ dZej5ZWG d[d\ d\ej5ZXG d]d^ d^e$ZYG d_d` d`eYZZeZdFdadHdIZ[eZdJdbdLdMZ\eZdNdcdPdQZ]eZdRdddTdUZ^G dedf dfe$Z_G dgdh dhej5Z`e#ddZadidj ZbG dkdl dle$ZcG dmdn dnej5ZdG dodp dpejeZfG dqdr dredZgG dsdt dtej5Zhdudv ZiejdwkrGek  dS 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   I/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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   namesZ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=   rK   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)rV   lowerr+   r   r   r    __repr__}      
zFixedOffset.__repr__c                 C      | j S r[   )rU   r+   dtr   r   r    	utcoffset      zFixedOffset.utcoffsetc                 C   r`   r[   )rV   ra   r   r   r    tzname   rd   zFixedOffset.tznamec                 C   r`   r[   )rW   ra   r   r   r    dst   rd   zFixedOffset.dstNrO   )r9   rL   rM   rZ   r^   rc   re   rf   r   r   r   r    rN   s   s    
rN   c                   @   s   e Zd ZdddZdd ZdS )PicklableFixedOffsetNc                 C   s   t | ||| d S r[   )rN   rZ   rX   r   r   r    rZ      s   zPicklableFixedOffset.__init__c                 C   r`   r[   )__dict__r]   r   r   r    __getstate__   rd   z!PicklableFixedOffset.__getstate__)NNN)r9   rL   rM   rZ   rj   r   r   r   r    rh      s    
rh   c                   @      e Zd Zdd ZdS )_TZInfoc                 C   s   t   S r[   )random)r+   r)   r   r   r    rc      s   z_TZInfo.utcoffsetNr9   rL   rM   rc   r   r   r   r    rl          rl   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   sT   t  }tddddddd|}| t |  W d    d S 1 s#w   Y  d S )N  rD             rA   r   )rl   r   assertRaises	TypeErrorrc   )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   maxru   NotImplementedErrorre   rc   rf   )r+   Zuselessrb   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                   @   rk   )z9TestTZInfo.test_subclass_must_override.<locals>.NotEnoughc                 S   s   || _ || _d S r[   )Z_NotEnough__offsetZ_NotEnough__name)r+   rY   r5   r   r   r    rZ      s   
zBTestTZInfo.test_subclass_must_override.<locals>.NotEnough.__init__N)r9   rL   rM   rZ   r   r   r   r    	NotEnough   ro   r|   rA   ZNotByALongShot)r   
assertTrue
issubclassassertIsInstancer   nowru   rz   re   rc   rf   )r+   r|   r   rb   r   r   r    test_subclass_must_override   s   
z&TestTZInfo.test_subclass_must_overridec                 C   sn   t dd}| |t t d fD ]#}| ||tdd | ||d | |	|tdd qd S )NrA   ZThreerQ   rO   )
rN   r   r   r   r   r*   rc   r   re   rf   )r+   Zforb   r   r   r    test_normal   s   
zTestTZInfo.test_normalc                 C   sT   t t }| t|t  tD ]\}}}|||}||}| 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 ]0\}}}|||}	||	}
| |
t | t|
| | |
	d | | |
d | qDqd S )NrQ   cookieEST)r   rh   r   re   r   r   r   r   r*   rc   r   r   r   )r+   rY   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 r[   r   ra   )	DSTOFFSETr   r    rc         z:TestTZInfo.test_issue23600.<locals>.UKSummerTime.utcoffsetc                    r   r[   r   ra   )DSTDIFFr   r    rf      r   z4TestTZInfo.test_issue23600.<locals>.UKSummerTime.dstc                 S      dS )NUKSummerTimer   ra   r   r   r    re      r   z7TestTZInfo.test_issue23600.<locals>.UKSummerTime.tznameN)r9   rL   rM   __doc__rc   rf   re   r   r   r   r   r    r      s
    r   rq   rG         r   )r   r   r   fromutcr*   rc   )r+   r   tzutr   r   r    test_issue23600   s   
zTestTZInfo.test_issue23600N)
r9   rL   rM   rx   r{   r   r   r   r   r   r   r   r   r    rp      s    
rp   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   ACDTrB   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minry   r*   strre   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   ry   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   rR   )r   r*   r   r   rc   ZEROr   ry   )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 q-tddtdfD ]}| t	t| | t	t|  qK| t
 td  W d    n1 sqw   Y  | t
 td W d    n1 sw   Y  | t
 ttd  W d    n1 sw   Y  | t
 ttd W d    n1 sw   Y  | t
 ttdd	 W d    d S 1 sw   Y  d S )
Nr   UTCr"   microsecondssecondsrQ   rO   ABCextra)r   r   r   r   assertIsNotr*   assertNotEqualrc   ru   
ValueErrorrv   r   )r+   Z	subminuter   invalidr   r   r    test_constructor  s   2244<zTestTimeZone.test_constructorc                 C   s    |  tjt |  | jt d S r[   )r   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 s:w   Y  | t | jd W d    d S 1 sVw   Y  d S )N)r   g      ?r    rB   )r   HOURr*   r   rc   ru   rv   r   )r+   dummyhrY   r   r   r    test_utcoffset!  s   6<zTestTimeZone.test_utcoffsetc                 C   s   |  tj| j | t | jd W d    n1 s w   Y  | t | jd W d    d S 1 s<w   Y  d S )Nr   rB   )assertIsNoner   r   rf   r   ru   rv   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 sw   Y  | t | j	d W d    d S 1 sw   Y  d S )Nr   z	UTC-05:00z	UTC+09:30r   z	UTC-00:01rQ   ZXYZ   zUTC+01:06:40r     zUTC-01:06:40zUTC+01:06:40.000001r"   zUTC-01:06:40.000001r   rB   )
r*   r   r   re   r   r   r   ru   rv   r   r]   r   r   r    test_tzname2  s&   6<zTestTimeZone.test_tznamec                 C   s   |  t tj| j W d    n1 sw   Y  |  t tjd W d    n1 s2w   Y  | j| jt	fD ]%}| jj
|d}||}| || || | || jj
tjd q>d S )Nznot datetimer   )ru   r   r   r   r   r   rv   r   r   Easternreplacer*   rc   )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 s;w   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*   ru   rv   r/   r}   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   ry   r   r*   re   r   rc   rf   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 ]}tD ]\}}}||||}| || qq
tj	}tD ]\}}}||||}| 
|| q)d S r[   )r   r   r   r   ry   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   ry   copyr*   r   r   r+   r   r   r   r   r    	test_copy~     

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   ry   r   deepcopyr*   r   r   r   r   r   r    test_deepcopy  r   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 s8w   Y  q t ddt dddg}|dd |D  |D ]2}| jd|d
! | t t| W d    n1 ssw   Y  W d    qU1 sw   Y  qUd S )Nr   r   r   r   rR   r   ?B r   rR   r   r   c                 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   r   r   r   r   r   r   r    r!     r   Zbad)r   extendsubTestr   ru   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   rL   rM   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                   @      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   r}   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                          dk S Nr   r   r   r   r   r    <lambda>      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                         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   ru   rv   r]   r   r   r    test_harmful_mixed_comparison  s   z5HarmlessMixedComparison.test_harmful_mixed_comparisonN)r9   rL   rM   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   rR   r   millisecondsr   r"   r   r   r   r   rD   r   r   <   rQ     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  qQtd(dD ]}||| d | t|d  qi||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 )-NrD   r   r  r  rI   iDQ rF   r   Q X> Q i r#   F   iX  '  rC     r   r"   i@  i6 i@       ?   x   r   rA   rE   rB   r@   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 )NrO   r"         ?c                           S r[   r   r   r  r  r   r    r   Y  r   z<TestTimeDelta.test_disallowed_computations.<locals>.<lambda>c                           S r[   r   r   r  r   r    r   Z  r   c                           S r[   r   r   r  r   r    r   [  r   c                           S r[   r   r   r  r   r    r   \  r   r   c                           S r[   r   r   r  zeror   r    r   a  r   c                           S r[   r   r   r$  r   r    r   b  r   c                      s     S r[   r   r   r$  r   r    r   c  r   c                          d S )N        r   r   r  r   r    r   d  r   c                      r'  )Nr   r   r   r)  r   r    r   e  r   )r   ru   rv   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 )NrO   )r   ru   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"   rD      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  q!d S )	Nm  r   g    8~A)g˟$@g˟$r  r   g    .Ar   )r   rC   ir   r"   )r   r*   total_seconds)r+   r  r4  Z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   rF   8r@   r   g   Ar   r   r   rR   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 )Nr6  rF   r7  r@   r   i z
r8  rD   r   1   r   r"   rE   )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 ]Z}t | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k q7tD ]z |  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 qd S )NrE   rA   rG   )rA   rA   rA   )rE   rG   rG   )rE   rA   rB   FTc                          kS r[   r   r   Zbadargr:  r   r    r     r   z,TestTimeDelta.test_compare.<locals>.<lambda>c                          k S r[   r   r   rH  r   r    r     r   c                          kS r[   r   r   rH  r   r    r     r   c                          kS r[   r   r   rH  r   r    r     r   c                          kS r[   r   r   rH  r   r    r     r   c                          k S r[   r   r   rH  r   r    r     r   c                          kS r[   r   r   rH  r   r    r     r   c                          kS r[   r   r   rH  r   r    r     r   )r   r*   r}   r   
OTHERSTUFFru   rv   r+   r;  r   r   rH  r    test_compare  sH   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:00rE   z2 days, 0:00:00rC   z-2 days, 0:00:00r   :   r   r   z12:58:59rA   rG   z2:03:04ir   rB  )r   r   rR   r   z-210 days, 23:12:34r  z0:00:00.001000r   z0:00:00.000003r  r   r   r   rR   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#   rE   z%s(days=10, seconds=2)r?    z,%s(days=-10, seconds=2, microseconds=400000)r  r   z%s(seconds=60)z%s(0)r6  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 ]-}t|}| |d |dd  }t|}| || t |j|j|j}| || qd S )Nr  r   r   r   rT  6er   r"   r   r   rE   rA   r   r   r   rU  	   )	r   r   r}   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 )NrY  r  r  g    ~.Ar   r"   )r   r   r   ry   
resolutionr}   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   ry   r   r   r   r    r     r   z-TestTimeDelta.test_overflow.<locals>.<lambda>r"    ʚ;g    eAg#B;g|=gr{>)
r   r_  r   ru   OverflowError__sub____add__ry   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   ru   rb  r,  INF)r+   rf  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?rE   g~jtXrC   gƠ>r   gƠ      ?        i|   tAr   g?r   g?r   )r   r   gٿgɿr  r  )r   r*   r_  )r+   r  r   Zus_per_hourZ
us_per_dayr   r   r    test_microsecond_rounding-  s0     &z'TestTimeDelta.test_microsecond_roundingc                 C   s&   t dd}| |j|j|jfd d S )Nr   r   )r   r  r   r1  )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   )r}   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      @rn  )r   r   r   r  )r+   sumr   r   r    as_hoursa  s   z9TestTimeDelta.test_subclass_timedelta.<locals>.T.as_hoursN)r9   rL   rM   staticmethodrt  rv  r   rr  r   r    rs  \  s    rs  r"   r   r   r   irZ  i)
r   r   r   r*   rv  rt  r   r   r   r   )r+   r:  r;  t3t4r   rr  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 ]+\}}}| | |||}| || | || W d    q51 s[w   Y  q5d S )Nc                   @      e Zd ZdS )z6TestTimeDelta.test_subclass_date.<locals>.DateSubclassNr9   rL   rM   r   r   r   r    DateSubclassz      r}    r"   rB   r   addc                 S      | | S r[   r   r@  r   r   r   r    r     r   z2TestTimeDelta.test_subclass_date.<locals>.<lambda>rI   raddc                 S      ||  S r[   r   r  r   r   r    r     r   subc                 S      | | S r[   r   r  r   r   r    r     r   rG   )r   r   r   r*   r   )	r+   r}  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 ]+\}}}| | |||}| || | || W d    q;1 saw   Y  q;d S )Nc                   @   r{  )z>TestTimeDelta.test_subclass_datetime.<locals>.DateTimeSubclassNr|  r   r   r   r    DateTimeSubclass  r~  r  r  r"   rB   r      )r   rR   r  c                 S   r  r[   r   r  r   r   r    r     r   z6TestTimeDelta.test_subclass_datetime.<locals>.<lambda>rI      r  c                 S   r  r[   r   r  r   r   r    r     r   r  c                 S   r  r[   r   r  r   r   r    r     r   rG   )r   r   r   r*   r   )	r+   r  r  r  r  r5   r  r  r  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  rE   r  rR   r   rQ   g      @r   )r   r*   ru   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 
NrE   r  r  r"   rQ   r   rC   r   r#   )r   r*   ru   r*  r   rv   )r+   r   r  rr  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 r  )r   divmodr*   ru   r*  rv   )r+   r   r  qr  r  r   r   r    test_divmod  s   
zTestTimeDelta.test_divmodc              	   C   s   dd }|  t t |dd>   W d    n1 sw   Y  |  t t |dd>   W d    n1 s;w   Y  dD ]:}|  t t ||  W d    n1 s[w   Y  |  t t ||  W d    qB1 sww   Y  qBd S )Nc                    s   G  fdddt }| S )Nc                          e Zd Z fddZdS )zFTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloatc                    r   r[   r   r]   	bad_ratior   r    as_integer_ratio  r   zWTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloat.as_integer_ratioN)r9   rL   rM   r  r   r  r   r    BadFloat      r  )float)r  r  r   r  r    get_bad_float  s   z4TestTimeDelta.test_issue31293.<locals>.get_bad_floatr"   r  )r   rg   r"   rE   rA   )ru   rv   r   r   )r+   r  r  r   r   r    test_issue31293  s   zTestTimeDelta.test_issue31293c                    sf  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y:   Y nw z	t|d	d W n	 tyM   Y nw z	t|d	d W n ttfyb   Y nw z
td	|d	  W n ttfyx   Y nw z
|d	td	  W n	 ty   Y nw z
td	|d	  W n	 ty   Y nw W d    q1 sw   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 r[   r   r+   otherProdr   r    r,    rd   z5TestTimeDelta.test_issue31752.<locals>.BadInt.__mul__c                    r  r[   r   r  r  r   r    __rmul__  rd   z6TestTimeDelta.test_issue31752.<locals>.BadInt.__rmul__c                    r  r[   r   r  r  r   r    __floordiv__  rd   z:TestTimeDelta.test_issue31752.<locals>.BadInt.__floordiv__c                    r  r[   r   r  r  r   r    __rfloordiv__  rd   z;TestTimeDelta.test_issue31752.<locals>.BadInt.__rfloordiv__N)r9   rL   rM   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                    r  r[   r   r  Sumr   r    rd    rd   z3TestTimeDelta.test_issue31752.<locals>.Prod.__add__c                    r  r[   r   r  r  r   r    __radd__  rd   z4TestTimeDelta.test_issue31752.<locals>.Prod.__radd__N)r9   rL   rM   rd  r  r   r  r   r    r    s    r  c                       r  )z*TestTimeDelta.test_issue31752.<locals>.Sumc                    r   r[   r   r  divmodresultr   r    
__divmod__  r   z5TestTimeDelta.test_issue31752.<locals>.Sum.__divmod__N)r9   rL   rM   r  r   r  r   r    r    r  r  )Nr   )r   r"   rE   )r   r   r  r"   r   r   r   )rT   r   r   rv   r   )r+   r  r   )r  r  r  r    test_issue31752  sL   
zTestTimeDelta.test_issue31752N)"r9   rL   rM   r   r   r   r  r+  r   Zrequires_IEEE_754r/  r2  r5  r<  rA  rE  rR  r   r   r^  r`  rg  rj  ro  rp  rq  rz  r  r  r  r  r  r  r  r   r   r   r    r     s>    S

(	
!r   c                   @   rk   )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"   rE   rA   rG   rB   rT  rC   )r   r   r   r*   )r+   rb   r   r   dt2r   r   r    test_delta_non_days_ignored!  s*   


z(TestDateOnly.test_delta_non_days_ignoredN)r9   rL   rM   r  r   r   r   r    r    s    r  c                   @      e Zd ZdZdS )SubclassDater"   Nr9   rL   rM   Zsub_varr   r   r   r    r  >      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  rA   r"   )r   r*   yearmonthrf  ra   r   r   r    r2  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"   rE   rA   rU  r\  )
r   todayr   r}   r3   r   r*   r  r  rf  r+   rb   r]  r  r   r   r    r^  M  s   zTestDate.test_roundtripc              	   C   s  dD ]B\}}}}|  |||}| ||  | j |}| || t|drD| |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  qMg d}d	D ]K\}}	|  |dd }tt	dd
|D ]5\}
}|
dkr|	r|d7 }t	d|d D ]}|  ||
|}| | | | || j | |d7 }qqqd S )N))r"   r"   r"   r"   )r"   r   r0  r3  )rE   r"   r"   n  )i  rs   r   i
 hourr   r"   rD   r   r0  )r0     r0  r  r0  r  r0  r0  r  r0  r  r0  ))r  T)r  Fr  rE   )r   r*   	toordinalfromordinalhasattrr  r  r  microsecondr  r   r   zip)r+   ymr@  nZfromordr  d2ZdimZisleapr  Zmaxdayrf  r   r   r    test_ordinal_conversions[  sH   

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 rh  r  r   r  Zaordr   r    r         z0TestDate.test_extreme_ordinals.<locals>.<lambda>r"   r   c                      s     d S rh  r  r   r  r   r    r     r  )r   r   r  r  rf  r  r  r*   ru   r   r   ry   )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   r  rE        `	  r    4  l  rt   )r   r   r   ru   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   r0  r"   rE   r  r   r*   r>  r?  r+   r@  eZdicr   r   r    rA    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"   r0    r  rE   A  rG   r   rD   rA   r\  r   4     r  c                      r  r[   r   r   r  r   r    r     r   z,TestDate.test_computations.<locals>.<lambda>c                      r   r[   r   r   r  r   r    r     r   c                      r!  r[   r   r   r  r   r    r     r   c                      r"  r[   r   r   r  r   r    r     r   c                      r"  r[   r   r   r  rf  r   r    r     r   c                           S r[   r   r   r  r   r    r     r   c                           S r[   r   r   r  r   r    r     r   c                      r#  r[   r   r   r  r   r    r     r   c                      r&  r[   r   r   r  r   r    r     r   c                            S r[   r   r   r)  r   r    r     r   c                            S r[   r   r   r)  r   r    r      r   c                            S r[   r   r   r)  r   r    r     r   
r   r*   r   r?  r  r   r   r   ru   rv   )r+   r  r  diffweekr   r  rf  r  r    r    sP   zTestDate.test_computationsc                 C   s   | j j}|tdtdfD ]8}| j j| }||8 }| t|j| | t|j|  | j j| }||7 }| t|j| | t|j|  qd S )Nr"   rE   )	r   r_  r   r   ru   rb  rc  rd  ry   )r+   re  r   rb   r   r   r    rg    s   zTestDate.test_overflowc                 C   sh   dd l }d\}}}||||ddddddf	}| j|}| |j| | |j| | |j| d S )Nr   )i  r\  r  r   )r   mktimer   fromtimestampr*   r  r  rf  )r+   r   r  r  rf  tsr@  r   r   r    test_fromtimestamp  s   
zTestDate.test_fromtimestampc                 C       dD ]}|  t| jj| qd S N)gZbtgZbtiru   rb  r   r  r+   Zinsaner   r   r    test_insane_fromtimestamp  
   z"TestDate.test_insane_fromtimestampc                 C   sp   dd l }tdD ]}| j }|  }| j|}||kr q%|d q||kr6| j||tddd d S d S )Nr   rA   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 ]B}| | ddd|  | | | ddd|  |d  | | ddd|  | | | ddd|  |d  qd S )NrD   r  rA   rG   r"   r  rE   )r  r*   r   weekdayZ
isoweekday)r+   r  r   r   r    test_weekdayC  s   "$zTestDate.test_weekdayc              	   C   s  g d}g }|D ]*\}}| j | }tdD ]}|t| }|dd |d | f }|||f qq|D ]J\}	}
| j|	dd | |	 |
 W d    n1 sSw   Y  | j|	dd |	 }| |j|j|j	f|
 W d    q51 szw   Y  q5d S )N)))r  r      )r  r  r"   ))r  r   r  r  r"   r"   ))r  r"   rB   )r  rE   r"   ))  r   rr   )r  r  r"   ))r  r   r  )r  5   r"   ))r   r"   rG   )r   r"   r"   rD   r   rE   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"   rE   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 ]3}| d| dd}| d| dd}| | dd  | dd   | d dkrD|| 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
        i  r  r   r0  i@  r"   r  )	sortedmaprT   splitr  r   r*   r  r  )r+   ZISO_LONG_YEARS_TABLEZiso_long_yearsLr  r@  r  r   r   r    test_iso_long_yearsu  s   $
zTestDate.test_iso_long_yearsc                 C   s"   |  ddd}| | d d S )NrE   rA   z
0002-03-02)r   r*   	isoformatr+   r   r   r   r    test_isoformat     zTestDate.test_isoformatc                 C   s"   |  ddd}| | d d S )Nr  rA   rE   zSat Mar  2 00:00:00 2002)r   r*   ctimer  r   r   r    
test_ctime  r  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 qN ty`   Y qNw z|d W n	 tyq   Y nw |d d S )N  rA   rE   m:%m d:%d y:%yzm:03 d:02 y:05r   A  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxoneZtworO   %mZ03	'%z' '%Z''' '')z%e%z%#u   %y%mz%f)r   r*   strftimeru   rv   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y   | d Y nw | |dtd|  | |dtd|  d S )Nr  rA   rE   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 s(w   Y  G dd d| j }|ddd}| |dd G d	d
 d
| j }|ddd}| |dt| dD ]#}| |||| | |||| | ||d
 qad S )N  r\  r#   r   must be str, not int{   c                   @   rk   )zTestDate.test_format.<locals>.Ac                 S   r   NAr   r]   r   r   r    __str__  r   z'TestDate.test_format.<locals>.A.__str__Nr9   rL   rM   r(  r   r   r   r    r'    ro   r'  c                   @   rk   )zTestDate.test_format.<locals>.Bc                 S   r   NBr   r+   format_specr   r   r    r    r   z(TestDate.test_format.<locals>.B.strftimeNr9   rL   rM   r  r   r   r   r    r+    ro   r+  r  zm:%m d:%d y:%y H:%H M:%M S:%S%z %Zr   r*   
__format__r   assertRaisesRegexrv   r  r+   rb   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[   )
r~   r   r   r   r   r   ry   r_  r   r}   )r+   Zexpected_classr   r   r    r`    s   zTestDate.test_resolution_infoc                 C   sz   | j j| j j }|jd d |j d |j }tdd|}| || | | j j| | j j | | j j| | j j d S )Nr     @B r   )r   ry   r   r   r   r   r   r*   )r+   bigr  Z	justasbigr   r   r    test_extreme_timedelta  s   zTestDate.test_extreme_timedeltac                 C   sp  t 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	 | 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 )
NrD   r  r"   rE   r   r   rt   rA   =   )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   Z   d}| j | }tD ]\}}}|||}||}| || q	| | |d d S )NrI   rD   r   rE   r   r   r   r   r*   
__reduce____reduce_ex__rD  r   r   r    rE  %     

zTestDate.test_picklingc                 C   F   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.)  rs      latin1encodingr   pickle_loadsr*   r+   r  r   r  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 q9tD ]o |  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 qd S )NrE   rA   rG   rF  FTc                      rI  r[   r   r   rH  r   r    r   Z  r   z'TestDate.test_compare.<locals>.<lambda>c                      rJ  r[   r   r   rH  r   r    r   [  r   c                      rK  r[   r   r   rH  r   r    r   \  r   c                      rL  r[   r   r   rH  r   r    r   ]  r   c                      rM  r[   r   r   rH  r   r    r   ^  r   c                      rN  r[   r   r   rH  r   r    r   _  r   c                      rO  r[   r   r   rH  r   r    r   `  r   )r   r*   r}   r   rP  ru   rv   rQ  r   rH  r    rR  ;  sF   
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  rG   rB   r"   FTc                      r   rh  r   r   ourr   r    r   l  r   z-TestDate.test_mixed_compare.<locals>.<lambda>c                      r   rh  r   r   rW  r   r    r   m  r   c                   @   r{  )z.TestDate.test_mixed_compare.<locals>.SomeClassNr|  r   r   r   r    	SomeClassq  r~  rY  c                      rM  r[   r   r   rX  Ztheirr   r    r   y  r   c                      rI  r[   r   r   rZ  r   r    r   z  r   )r   r*   ru   rv   )r+   rY  r   rZ  r    test_mixed_compareb  s   zTestDate.test_mixed_comparec                 C   s    |  | jj |  | jj d S r[   )r}   r   r   ry   r]   r   r   r    rq  |  s   zTestDate.test_boolc                 C   sZ   dD ](}|  |dd}|dd| kr*| |dd|  | |dd|  qd S )N)r"   r=  r  c   r6  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      | j }g d}|| }| ||  d}dD ]&\}}|d d  }|||< || }|jd
i ||i}	| ||	 |d7 }q|ddd}| jt|jdd	 d S )Nr  r   )r  rE   r  rA   rf  rG   r"   r  rE   r  r  r  r   r   r*   r   ru   r   
r+   clsr   baser  r5   newvalnewargsr  gotr   r   r    test_replace  s   
zTestDate.test_replacec                 C   s:   G dd d| j }|ddd}| t|jdd| d S )Nc                   @   r{  )z4TestDate.test_subclass_replace.<locals>.DateSubclassNr|  r   r   r   r    r}    r~  r}    r"   i  rd  r   r   r   r   )r+   r}  rb   r   r   r    test_subclass_replace  s   zTestDate.test_subclass_replacec                       G  fddd j }d} j | }||i ddi} |j|  |jd  |jd  | |   |d|j|j d  d S )Nc                       $   e Zd ZdZ fddZdd ZdS )z&TestDate.test_subclass_date.<locals>.CrO   c                    6   |  }|d} jj| g|R i |}||_|S Nr   r   popr   r   r   rg  r   kwsZtempr   resultr]   r   r    r     
   
z.TestDate.test_subclass_date.<locals>.C.__new__c                 S      || j  | j S r[   )r  r  r+   startr   r   r    newmeth     z.TestDate.test_subclass_date.<locals>.C.newmethNr9   rL   rM   	theAnswerr   r}  r   r]   r   r    C      r  r  rG   r  r   rD   rO   rF   )	r   r*   r8   r  r   r  r}  r  r  r+   r  r   rw   r  r   r]   r    r       
"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 ]7}
 jt	|
|d$ t
|
|}||	 } ||  ||  |jd W d    qD1 svw   Y  qDq<d S )Nc                       r  )zCTestDate.test_subclass_alternate_constructors.<locals>.DateSubclassc                    $    j j| g|R i |}d|_|S NrD   r   r   r   rg  r   kwargsrx  r]   r   r    r        zKTestDate.test_subclass_alternate_constructors.<locals>.DateSubclass.__new__Nr9   rL   rM   r   r   r]   r   r    r}    r  r}  r  i( z
2003-04-14rD   r   r  r  fromisoformatZbase_obj_typeconstr_name)r   r   r*   r   r   combiner   	timestampr   r   getattr)r+   r}  r   Zd_ordd_isoformatbase_dr  r  r  constr_argsbase_objconstrrb   r   r]   r    $test_subclass_alternate_constructors  s2   

z-TestDate.test_subclass_alternate_constructorsc                 C   R   d}t | }tD ]\}}}|||}||}| || | t|t  qd S )NrG  )r  r   r   r   r*   r}   rS   rD  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rP| td | tdgt| d W d    n1 sKw   Y  tdd	D ]}| |d d t|g |dd    qUd S )
Ns
   1995-03-25rG   )   9          rE   rA   ^bad tzinfo state arg$r"   r   r  )	r~   r   r   ru   rv   r3  bytesr?  r  )r+   rh  Z
month_byteZord_byter   r   r    test_backdoor_resistance  s   	
*z!TestDate.test_backdoor_resistancec              	   C   sp   g d}|D ]/}| j | }| }| j|d | j | }| || W d    q1 s0w   Y  qd S )N)r"   r"   r"   )r  rE   r  r  r"   r"   )r  rE   r  r  rs   r   )r  rG   rA   i  rB   r  )dt_strr   r  r   r  r*   )r+   
base_datesdt_tuplerb   r  dt_rtr   r   r    test_fromisoformat  s   

zTestDate.test_fromisoformatc                 C   s<   G dd d| j }|ddd}|| }| || d S )Nc                   @   r{  )z:TestDate.test_fromisoformat_subclass.<locals>.DateSubclassNr|  r   r   r   r    r}  )  r~  r}  rq   r   r  )r   r  r  r   )r+   r}  rb   r  r   r   r    test_fromisoformat_subclass(  s   z$TestDate.test_fromisoformat_subclassc              	   C   sL   g d}|D ]}|  t | j| W d    q1 sw   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)ru   r   r   r  r+   Zbad_strsbad_strr   r   r    test_fromisoformat_fails2  s   z!TestDate.test_fromisoformat_failsc              	   C   \   dd l }dd |dg}|D ]}| t | j| W d    q1 s&w   Y  qd S )Nr   s
   2009-03-01z
2009-03-01ioStringIOru   rv   r   r  r+   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 ]-}| j|d | j| }| }| jj| }| || W d    q1 sAw   Y  qd S )N)  rG   rA   )r  r"   rE   )i  r   r  )r   r"   rE   )r  r   r0  r  )r  r   r0  )r  r"   r"   )r  r   r0  r  )r  r   r0  r  )r(   r   r0  r"   r   r0  )	datecomps)r   r   r   r   r  fromisocalendarr*   )r+   Zdatesr  ZdobjisocalZd_roundtripr   r   r    test_fromisocalendarO  s0   
zTestDate.test_fromisocalendarc              
   C   sx   g d}|D ]3}| j |d# | t | jj|  W d    n1 s%w   Y  W d    q1 s4w   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   ru   r   r   r  )r+   isocalsr  r   r   r    !test_fromisocalendar_value_errorsm  s   z*TestDate.test_fromisocalendar_value_errorsc              
   C   s   t tdd g}g }d}tdD ]}|D ]}t|}||| ||< |t| qq|D ]3}| j|d# | t | j	j
|  W d    n1 sKw   Y  W d    q,1 sZw   Y  q,d S )Nc                 S      d S r[   r   )xr   r   r    r         z;TestDate.test_fromisocalendar_type_errors.<locals>.<lambda>)r  r"   r"   rA   r  )r   r  r  listr  r   r   ru   rv   r   r  )r+   Zerr_txformersr  rh  r  ZtxformerZerr_valr  r   r   r     test_fromisocalendar_type_errors  s(   	z)TestDate.test_fromisocalendar_type_errorsN)/r9   rL   rM   r   r   r2  r^  r  r  r  rA  r  rg  r  r  r  r  r  r	  r  r  r  r  r"  r6  r`  r:  rE  rE  rV  rR  r[  rq  r_  rl  ro  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r    r  A  sX    /2		&'
	',

	r  c                   @   r  )SubclassDatetimer"   Nr  r   r   r   r    r    r  r  c                   @   s  e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zed)d*d+ Zd,d- Zed.d/d0 Zd1d2 Zd3d4 Zd5d6 Z e!"e#j$d7kd8d9d: Z%e!"e#j$d7kd8d;d< Z&d=d> Z'd?d@ Z(dAdB Z)dCdD Z*dEdF Z+dGdH Z,dIdJ Z-dKdL Z.edMdNdO Z/dPdQ Z0dRdS Z1dTdU Z2dVdW Z3dXdY Z4dZd[ Z5d\d] Z6d^d_ Z7d`da Z8dbdc Z9ddde Z:dfdg Z;dhS )i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  rA   r"   r   r   	r   r*   r  r  rf  r  r  r  r  ra   r   r   r    r2    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  rA   r"   r   r   @  r  ra   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 ]6}t|}| |d |d	d  }t|}| || |  |j|j|j	|j
|j|j|j}| || qd S )
Nr"   rE   rA   rG   rB   rI   rD   rU  r\  )r   r   r   r}   r3   r   r*   r  r  rf  r  r  r  r  r  r   r   r    r^    s   zTestDateTime.test_roundtripc              
   C   sb  |  ddddddd}| | d | |dd | |d	d
 | |dd | |dd | |jddd | |jddd | |jddd | |jddd | |jddd | |jddd | |jd	ddd | jt|jdd | jt|jdd | t|d
 | j dddddddtjd}| |jddd |  ddddddd}| |jddd  |  dddddd}| |jddd | |jddd | |jddd! |  ddd}| | d" | |dd" | |d	d# | t|d# tt	d$d%d&}| j ddd|d}| | d' d S )(Nr"   rE   rA   rG   rB   r%  z0001-02-03T04:05:01.000123rs   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-03T04rR   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  ru   r   r   r   r   rN   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 ]$\}}|j|d}|| }| j|d W d    qK1 sjw   Y  qKd S )N05:00rB   r   02:00rE   06:27rI   rN  r   12:32:30r   rt   r  r   02:04:09.123456rG   r\  r  r   r   N+00:00r   c                 S   2   g | ]\}}d D ]\}}|| t || fqqS ))-r   )+r"   r   r   r  r  prefixsignr   r   r    r!         z8TestDateTime.test_isoformat_timezone.<locals>.<listcomp>r  r"   %   z2016-04-01T12:37:09r   tzir   r   r   r   r   r   )	r+   	tzoffsetstzinfosZdt_baseexp_baseexp_tzr  rb   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 s,w   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 ]#}| |||| | |||| | ||d qmd S )Nr#  r\  r#   rG   rB   r"   r%  r   r$  c                   @   rk   )z#TestDateTime.test_format.<locals>.Ac                 S   r   r&  r   r]   r   r   r    r(    r   z+TestDateTime.test_format.<locals>.A.__str__Nr)  r   r   r   r    r'    ro   r'  c                   @   rk   )z#TestDateTime.test_format.<locals>.Bc                 S   r   r*  r   r,  r   r   r    r  %  r   z,TestDateTime.test_format.<locals>.B.strftimeNr.  r   r   r   r    r+  $  ro   r+  r/  r1  r4  r   r   r    r6    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  rA   rE      rB   r%  zSat Mar  2 18:03:05 2002r  )r   r   r*   r  r  r!  )r+   r   r   r   r   r    test_more_ctime2  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  rA   r"   r\  r   r#   r   r0  r   r   r  r   )r   r*   r}   r   r   )r+   rw   r  dt3r  r   r   r    test_tz_independent_comparingB  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                   @   rk   )zDTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfoc                 S   s   G dd dt }|dS )Nc                   @   rk   )zZTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStrc                 W   r  r[   r   )r+   r   r   r   r    r   Y  r   zbTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStr.replaceN)r9   rL   rM   r   r   r   r   r    MyStrX  ro   r  r5   )r   )r+   rb   r  r   r   r    re   W  s   zKTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tznameN)r9   rL   rM   re   r   r   r   r    MyTzInfoV  ro   r  r  rA   rE   r   r5   %Z)rN   r   ru   rv   r  )r+   r  r   r   r   r    %test_strftime_with_bad_tzname_replaceT  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   r  rE   r  r  r  r  r  r  r  rt   r0  r   r   r   r   r  r   r8  fold)r   r   r   ru   r   rv   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   r0  r   r     r"   rE   r  r   rB   r  r  r   r   r    rA    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"   r0  r  r  rG   r   rA   rE   r  rI   r  r7  rD   r  r#   r  r   rr   r\  r   r  r  r  r  rB   r   r  r  c                      r  r[   r   r   r  r   r    r     r   z0TestDateTime.test_computations.<locals>.<lambda>c                      r   r[   r   r   r  r   r    r     r   c                      r!  r[   r   r   r  r   r    r     r   c                      r"  r[   r   r   r  r   r    r     r   c                      r"  r[   r   r   r  r   r    r     r   c                      r  r[   r   r   r  r   r    r     r   c                      r  r[   r   r   r  r   r    r     r   c                      r#  r[   r   r   r  r   r    r     r   c                      r&  r[   r   r   r  r   r    r     r   c                      r  r[   r   r   r)  r   r    r     r   c                      r  r[   r   r   r)  r   r    r     r   c                      r  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   rF  )NrI   rD   r   r   r   r"      rE   rH  rD  r   r   r    rE    rK  zTestDateTime.test_picklingc              	   C   sn   |  ddddddd}ttjd D ]"}t||}t|}| |jd | |jd | |j	d qd S )	Nr  rE   rD   r  0   r  i r"   )
r   r  r   HIGHEST_PROTOCOLr   r   r*   r  r  rf  )r+   r  r   r]  r  r   r   r    test_more_pickling  s   
zTestDateTime.test_more_picklingc                 C   r  )Nr  )r  r   r   r   r*   r}   rS   rD  r   r   r    test_pickling_subclass_datetime	     
z,TestDateTime.test_pickling_subclass_datetimec                 C   rL  )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.)rM  rs   rN  r   r   r"   r  rO  rP  rR  rT  r   r   r    rV  
	  s   

z!TestDateTime.test_compat_unpicklec                 C   sR  g d}| j | }| j | }| || | ||k | ||k | ||k | ||k  | ||k tt|D ]i}|d d  }|| d ||< | j | }| ||k  | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k  | ||k | ||k q=d S )N)r  rs   r  r   rS  r  r  r"   )r   r*   r}   r   r  r?  )r+   r   r:  r;  r  rj  r   r   r    test_more_compare	  s4   


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>  rf  r?  r  r@  r  rA  r  )r+   r  rk  r   r   r    verify_field_equality=	  s   z"TestDateTime.verify_field_equalityc                 C   6   dd l }|  }||}| j|}| || d S Nr   )r   	localtimer   r  r   r+   r   r  r  rk  r   r   r    r  E	  
   
zTestDateTime.test_fromtimestampc                 C   r  r  )r   gmtimer   utcfromtimestampr   r  r   r   r    test_utcfromtimestampM	  r  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 qvw | | j || qvd S )Nr]  r"   g     @rE   rA   rG    6@rm  rs   r  r  r   i'  r   )r   r*   r  r   r  r   rb  )r+   r   t0r:  r]  r   r   r    test_timestamp_naiveW	  s0   
 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(  rE   rA   rG   g7  @r   r   r   r
  )r   r   r   r*   r  r   r  r   r   r    test_timestamp_awares	  s   

z!TestDateTime.test_timestamp_awarezMSK-03c              	   C   sv  | j j| j jfD ]}|d}| |jd | |jd |d}z|d}W n	 ty/   Y n?w | |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2gHzrm  i# gHz>g1E2>g<"2?gP?r"   rk  rl  )r   r  r  r*   r  r  OSError)r+   Zftsr%  r  Z	minus_oner   r   r   r    ro  ~	  sJ   z&TestDateTime.test_microsecond_roundingc              
   C   s  | j jjtjd}| }z| | j j|tjd| W n tt	fy7 } z| 
t| W Y d }~nd }~ww | j jjtjddd}| }| | j j|tjd| d}|| }| ttf | j | W d    n1 srw   Y  | ttf | j | W d    n1 sw   Y  | | }| ttf | j | W d    n1 sw   Y  | ttf | j | W d    d S 1 sw   Y  d S )Nr   r   r   )r   r  r  i X)r   r   r   r   r   r  r*   r  rb  r  r:   r   ry   ru   r   r  )r+   Zmin_dtZmin_tsexcZmax_dtZmax_tsr   r  r   r   r    test_timestamp_limits	  s@   "z"TestDateTime.test_timestamp_limitsc                 C   r  r  r  r  r   r   r    r  	  r  z&TestDateTime.test_insane_fromtimestampc                 C   r  r  )ru   rb  r   r  r  r   r   r    test_insane_utcfromtimestamp	  r  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   r0  r   r   rS  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 ]}| j }| j|  }t|| |kr& q'q| t|| | d S )Nr   r"   r   rA   )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 ]0\}}| j||d t | j||}| j||}| || W d    q11 s\w   Y  q1| 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 ];\}}|dk rd}	| }
nd}	|}
t|
d d\}}d|	|||}||d}| | t
|d | | | qd\}}|||}| | dt dt	   | | d | ||| | |ddjd  | t |dd W d    n	1 s!w   Y  | t |dd W d    n	1 s<w   Y  | t |dd W d    d S 1 sXw   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%zrE   z-0002rC   z-00:02:01.000003r"   rA   )rR   r   r   )r   r   )r   ZGMTr   r  r  r  z{}{:02d}{:02d} {}r0  r   )z	+1234 UTCr0  r   rB  r   r  z-2400z-000z)	_strptimeZ_strptime_datetimer   strptimer*   r   r   r   rc   MINUTEr   r   r   re   r  r  r   r  r   ru   r   )r+   r  r  r  rk  inputsr  Z	tzsecondsre   r  r   r   rR   dtstrrb   r5  r   r   r    test_strptime	  sZ   


66<zTestDateTime.test_strptimec                 C   s^  | j j}| t |dd}W d    n1 sw   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 ]0\}}	}
}d"| }| j||	|
|d# ||	|
}| j|||d$ W d    q|1 sw   Y  q|d S )%Nz01/02/3 04:05:06z%d/%m/%y %H:%M:%Sr  rE   r"   rG   rB   rI   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  ru   r   r   r*   )r+   r  Znewdaterw   r  r  Zdt4r!  r%  r  r  r&  r   r   r    test_strptime_single_digit6
  s<   










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   r0  rI   r  !   )	r  r   r0  rI   r  r)  rG   r  r   r"   r   )r   r*   r!  r  r  rf  r  r  r  r  r  r   r<  r=  r>  r?  r@  rA  rB  rC  rD  )r+   r   Zttr   r   r    test_more_timetupleX
  s0   
z TestDateTime.test_more_timetuplec              	   C   s   |  ddddddd}| |dd	 d
D ]!\\}}}ttd||d }|j|d}| |dd|  qz|d W d S  tyJ   Y d S w )Nr  r   r0  rI   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33rE   )r   r   r   r   r  z-0200u   %y%m %H%M)r   r*   r  r   r   r   r  )r+   r   r]  r  r  r   r   r   r    test_more_strftimen
  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  rA   rG   r  -     )r   r*   r   r   ra   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  rA   rG   r  r-  r.  )r   r   r"   rE   r   r   r   )r   r   r   r  r*   ru   rv   r   r   r   r   )r+   r@  r   r  r  rb   r   r   r    test_combine
  s6   

zTestDateTime.test_combinec           
      C   r`  )N)r"   rE   rA   rG   rB   rI   rD   r   )ra  rb  rc  r  rB   r  rI   r  rD   r  r  r"   r  rE   r  r  rd  r   re  rf  r   r   r    rl  
  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    d S 1 sw   Y  d S )N,   Z0044rH   r   EDTr   rG   r   r  c                   @   r   )z+TestDateTime.test_astimezone.<locals>.Bogusc                 S   r  r[   r   ra   r   r   r    rc   
  r  z5TestDateTime.test_astimezone.<locals>.Bogus.utcoffsetc                 S      t dS r  r   ra   r   r   r    rf   
  r   z/TestDateTime.test_astimezone.<locals>.Bogus.dstNr9   rL   rM   rc   rf   r   r   r   r    Bogus
      r9  c                   @   r   )z/TestDateTime.test_astimezone.<locals>.AlsoBogusc                 S   r7  r  r   ra   r   r   r    rc   
  r   z9TestDateTime.test_astimezone.<locals>.AlsoBogus.utcoffsetc                 S   r  r[   r   ra   r   r   r    rf   
  r  z3TestDateTime.test_astimezone.<locals>.AlsoBogus.dstNr8  r   r   r   r    	AlsoBogus
  r:  r;  c                   @   r   )z,TestDateTime.test_astimezone.<locals>.Brokenc                 S   r   rh  r   ra   r   r   r    rc   
  r  z6TestDateTime.test_astimezone.<locals>.Broken.utcoffsetc                 S   r   rh  r   ra   r   r   r    rf   
  r  z0TestDateTime.test_astimezone.<locals>.Broken.dstNr8  r   r   r   r    Broken
  r:  r<  )r   r   rN   r   r   r   r*   
astimezoneru   rv   r   r   )r+   rb   r  dt_utcZdt_fr9  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                       rq  )z.TestDateTime.test_subclass_datetime.<locals>.CrO   c                    rr  rs  rt  rv  r]   r   r    r   
  ry  z6TestDateTime.test_subclass_datetime.<locals>.C.__new__c                 S   s   || j  | j | j S r[   )r  r  r  r{  r   r   r    r}  
  s   z6TestDateTime.test_subclass_datetime.<locals>.C.newmethNr  r   r]   r   r    r  
  r  r  )r  rG   r  r   r  )   r   rD   rO   rF   )
r   r*   r8   r  r   r  r}  r  r  r  r  r   r]   r    r  
  s   

z#TestDateTime.test_subclass_datetimec                    s@  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 ]A\}}	}
||fD ]7} j
t||d$ t||}||	 } ||  ||
  |jd W d    qe1 sw   Y  qeq\d S )Nc                       r  )zTTestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclassc                    r  r  r  r  r]   r   r    r   
  r  z\TestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclass.__new__Nr  r   r]   r   r    r  
  r  r  )r  rG   r  r   r     r  z2003-04-14T12:30:15.123456gh͏TMArD   r  r  r  r  z%Y-%m-%dT%H:%M:%S.%fr  r   rA   r  )r   r   r*   r   r  r   r   r=  r   r   r   r   r  )r+   r  r   r  Zutc_tsr  r  r  r  r  r  r  constructorrb   r   r]   r    -test_subclass_alternate_constructors_datetime
  s<   




$

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 ]3\}}} |! t||}|di |} ||  |jd W d    q*1 sXw   Y  q*d S )Nc                       r  )z8TestDateTime.test_subclass_now.<locals>.DateTimeSubclassc                    r  r  r  r  r]   r   r    r   .  r  z@TestDateTime.test_subclass_now.<locals>.DateTimeSubclass.__new__Nr  r   r]   r   r    r  -  r  r  r   r  Znow_utcr   Z	now_fixedr   r   r   rD   r   )	r   r   r   r   r   r  r   r*   r   )r+   r  r  r5   Z	meth_namer  r  rb   r   r]   r    test_subclass_now+  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 ]*}|j|d
}j|d j|}|| W d    q.1 sSw   Y  q.q*d S )N)r  r  r  r  )r   r   r   r   )r   r   r   ih )r   r   r   G )r   r  r-  rG  r  rs  r   r   rE   c                    s:   g | ]} 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!   Y  s    "z<TestDateTime.test_fromisoformat_datetime.<locals>.<listcomp>r  r"  )r   r   r   r  r   r   r  r*   )r+   r  
separatorsdtsrb   r  r"  r  r   rH  r    test_fromisoformat_datetimeC  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 |}W d    qF1 siw   Y  qFd S )Nrq   r   r  r-  pQ rB   r   rE   rI   rN  r   rt   r   rG   r\  r  r   c                 S      g | ]}d | qS r   r   r   r  r   r   r    r!   p      z<TestDateTime.test_fromisoformat_timezone.<locals>.<listcomp>r   c                 S      g | ]}t |qS r   r   rQ  r   r   r    r!   u  rR  r   tstrr   r   r   r   r   r  r   r  )r+   Zbase_dtr  r  r  rb   r"  r  r   r   r    test_fromisoformat_timezonef  s$   
z(TestDateTime.test_fromisoformat_timezonec              
   C   s|   g d}|D ]5}|  ddddddd}|j|d	}| j|d
 | j |}| || W d    q1 s6w   Y  qd S )N)	r  rs     u   ʁu   ᛇu   時u   🐍r   r  r"   r0  r   r   r+  iu rI  rJ  r  r+   rK  r  rb   r"  r  r   r   r    test_fromisoformat_separators  s   z*TestDateTime.test_fromisoformat_separatorsc              	   C   sx   ddg}|D ]3}|  ddddd}|j|d}| j|d	 | j |}| || W d    q1 s4w   Y  qd S )
Nr  r  r  r"   r0  r   rB  rI  rJ  r  rZ  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 ]Y\}}|D ]R}|D ]M}|d
krEd|d d  }|dd |f }| j|dd|  d|i}	|	j|d}
| j|
d | j|
}| |	| W d    q.1 svw   Y  q.q*q$d S )N)r  r   rG   r  r  r-  r  )r  r   rG   r  r  r-  r   r   r   rE   rI   rN  r   r   rR   r   r   r   r   r  r   rG   r   r  rJ  	r   r   r   	enumerater   r  r   r  r*   )r+   Zdatetime_basesr  	timespecsipr  r  r  new_microsecondsrb   r"  r  r   r   r    test_fromisoformat_timespecs  s0   z)TestDateTime.test_fromisoformat_timespecsc              
   C   x   g d}|D ]3}| j |d# | t | j| W d    n1 s%w   Y  W d    q1 s4w   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r  r   ru   r   r   r  r  r   r   r    !test_fromisoformat_fails_datetime  s   z.TestDateTime.test_fromisoformat_fails_datetimec                 C   sL   d}|  ttt| | j| W d    d S 1 sw   Y  d S )Nu   2018-01-0301:0113)r3  r   reescaper   r   r  )r+   r"  r   r   r    "test_fromisoformat_fails_surrogate  s   "z/TestDateTime.test_fromisoformat_fails_surrogatec                 C   s$   d}| j |}| |jtj d S )Nz2014-04-19T13:21:13+00:00)r   r  r   r   r   r   )r+   r  rb   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                   @   r{  )zBTestDateTime.test_fromisoformat_subclass.<locals>.DateTimeSubclassNr|  r   r   r   r    r    r~  r  rq   r   r  r\  r  r-  i r#   r   r   )r   r   r   r  r  r*   r   )r+   r  rb   r  r   r   r    r    s   z(TestDateTime.test_fromisoformat_subclassN)<r9   rL   rM   r   r   r2  r  r^  r  r  r6  r  r  r  r  rA  r  rE  r  r  rV  r  r   r  r  r   run_with_tzr  r  ro  r  r  r  unittestZskipIfr7   platformr  r  r  r#  r(  r*  r,  r/  r0  rl  r@  r  rD  rE  rM  rW  r[  r\  rc  rg  rj  rk  r  r   r   r   r    r    sp    
,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   r  r[   r   r]   r   r   r    r^    s   z#TestSubclassDateTime.test_roundtripN)r9   rL   rM   r  r   rm  skipr^  r   r   r   r    ro    s    ro  c                   @   r  )SubclassTimer"   Nr  r   r   r   r    rq    r  rq  c                   @   s   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-S ).TestTimec                 C   sH   |  dd}| |jd | |jd | |jd | |jd d S )Nr   r   r   r*   r  r  r  r  r  r   r   r    r2    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  rs  r  r   r   r    r    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"   rE   rA   rG   rU  r\  )
r   r   r}   r3   r   r*   r  r  r  r  )r+   r   r]  r;  r   r   r    r^    s   zTestTime.test_roundtripc                    sL  g d}| j | | j | }| | | |k | |k | |k | |k  | |k tt|D ]i}|d d  }|| d ||< | j | }| |k  | |k | |k | |k | |k | |k | |k | |k | |k | |k  | |k | |k q=tD ]z |  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 qd S )Nr"   rE   rA   rG   r"   FTc                      rG  r[   r   r   rH  r   r    r   E  r   z)TestTime.test_comparing.<locals>.<lambda>c                      rI  r[   r   r   rH  r   r    r   F  r   c                      rJ  r[   r   r   rH  r   r    r   G  r   c                      rK  r[   r   r   rH  r   r    r   H  r   c                      rL  r[   r   r   rH  r   r    r   I  r   c                      rM  r[   r   r   rH  r   r    r   J  r   c                      rN  r[   r   r   rH  r   r    r   K  r   c                      rO  r[   r   r   rH  r   r    r   L  r   )	r   r*   r}   r   r  r?  rP  ru   rv   )r+   r   r;  r  rj  r   rH  r    test_comparing#  sN   


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   r8  )r   ru   r   r]   r   r   r    r  N  s    z'TestTime.test_bad_constructor_argumentsc                 C   s   |  ddd}|  ddd}| || | t|t| |di}d||< | t|d | || d | || d |  ddd}|  ddd}| || | t|t| |di}d||< | t|d | || d | || d d S )Nr   r  r  r"   rE   r   rB   r  r  r   r   r    rA  d  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 )+NrG   rB   r"   r%  z04:05:01.000123z00:00:00r  z00:00:00.000001r#   z00:00:00.000010r6  z00:00:00.000100r  z00:00:00.001000r	  z00:00:00.010000i z00:00:00.100000r   rB  rC  r  )r  r  r  r  r   r  Z12rR   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   ru   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 ]$\}}|j|d}|| }| j|d W d    qH1 sgw   Y  qHd S )Nr  rB   r   r  rE   r  rI   rN  r   r  r   rt   r  r   r  rG   r\  r  r   r  r  r   c                 S   r  r  r   r  r   r   r    r!     r  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"   r  rA   )r  )r   ru   rv   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 d S  ty,   Y d S w )
Nr"   rE   rA   rG   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 s)w   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 ]#}| |||| | |||| | ||d qdd S )Nr"   rE   rA   rG   r   r$  r%  c                   @   rk   )zTestTime.test_format.<locals>.Ac                 S   r   r&  r   r]   r   r   r    r(    r   z'TestTime.test_format.<locals>.A.__str__Nr)  r   r   r   r    r'    ro   r'  c                   @   rk   )zTestTime.test_format.<locals>.Bc                 S   r   r*  r   r,  r   r   r    r    r   z(TestTime.test_format.<locals>.B.strftimeNr.  r   r   r   r    r+    ro   r+  )z%H %M %Sr1  )r+   r   r'  r  r+  r  r5  r   r   r    r6    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"   rE   rA   rG   z01:02:03.000004r#   r   z10:02:03.004000r   rV  z00:02:03.400000r   z12:02:03r   rB  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 )NrU  r"   rE   rA   rG   z%s(1, 2, 3, 4)r#   r   z%s(10, 2, 3, 4000)r   rV  z%s(0, 2, 3, 400000)r   z%s(12, 2, 3)r   rB  z
%s(23, 15)rW  rX  r   r   r    r      s    zTestTime.test_reprc                 C   sN   |  | jj| j |  | jj| j |  | jjt | | jj| jjk d S r[   )r   r   r   ry   r_  r   r}   r]   r   r   r    r`    s   zTestTime.test_resolution_infoc                 C   rF  )Nr   r   r  r  rE   rH  rD  r   r   r    rE    rK  zTestTime.test_picklingc                 C   r  )Nry  )rq  r   r   r   r*   r}   rS   rD  r   r   r    test_pickling_subclass_time  r  z$TestTime.test_pickling_subclass_timec              	   C   sz   g d}t |D ]2\}\}}| j|d | j| }tD ]}||dd}| || qW d    q1 s5w   Y  qd S )N))s,   cdatetime
time
(S'\x14;\x10\x00\x10\x00'
tR.ry  )s   cdatetime
time
(U;  tR.ry  )s   cdatetime
time
U;  R.ry  )s,   cdatetime
time
(S'\x14;\x19\x00\x10\x00'
tR.r   r   r$  r  )s   cdatetime
time
(U;  tR.r{  )s   cdatetime
time
U;  R.r{  )r  rO  rP  )r_  r   r   rS  r*   )r+   r  r  rU  r   r  r   r   r   r   r    rV  %  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   r}   )r+   rg  r   r   r    rq  ;  s   zTestTime.test_boolc           
      C   s   | j }g d}|| }| ||  d}dD ]&\}}|d d  }|||< || }|jd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 )Nrt  r   )r1  r2  r3  r4  r"   r   r  r   r  r6  rw  r8  rv  r   re  rf  r   r   r    rl  E  s"   
zTestTime.test_replacec                 C   s8   G dd d| j }|dd}| t|jdd| d S )Nc                   @   r{  )z4TestTime.test_subclass_replace.<locals>.TimeSubclassNr|  r   r   r   r    TimeSubclass_  r~  r~  r   r  r#   r|  rn  )r+   r~  r  r   r   r    ro  ^  s   
zTestTime.test_subclass_replacec                    rp  )Nc                       rq  )z&TestTime.test_subclass_time.<locals>.CrO   c                    rr  rs  rt  rv  r]   r   r    r   j  ry  z.TestTime.test_subclass_time.<locals>.C.__new__c                 S   rz  r[   r  r  r{  r   r   r    r}  q  r~  z.TestTime.test_subclass_time.<locals>.C.newmethNr  r   r]   r   r    r  g  r  r  )rG   rB   rI   r   rD   rO   rF   )	r   r*   r8   r  r   r  r}  r  r  r  r   r]   r    test_subclass_timee  r  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    d S 1 s:w   Y  d S )	Nz2:59.0r  9r      ÿr"   r  r   )chrru   rv   r   r3  r  r?  )r+   rh  Z	hour_byter   r   r    r    s   
"z!TestTime.test_backdoor_resistanceN)r9   rL   rM   r   r   r2  r  r^  ru  r  rA  r  r  rx  r  r6  r   r   r`  rE  rz  rV  rq  rl  ro  r  r  r   r   r   r    rr     s0    	+4		
rr  c                   @   4   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 rdpd}| | | t|tu r+d	p,d
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   ra   r   r   r    re     s    z>TZInfoBase.test_argument_passing.<locals>.introspective.tznamec                 S   s   t |rdpddS )NrO   rQ   r   ra   r   r   r    rc     s   zATZInfoBase.test_argument_passing.<locals>.introspective.utcoffsetN)r9   rL   rM   re   rc   rf   r   r   r   r    introspective  s    r  r"   rE   rA   r   r  r  r  rO   rQ   )r   r   r   r*   re   r   rc   rf   )r+   rg  r  objr  r   r   r    test_argument_passing  s   z TZInfoBase.test_argument_passingc                 C   sz   | j }| jt|ddddd G dd dt}| jt|ddd|d G dd dt}| }|ddd|d}| |j| d S )Nr"   r   r   c                   @   r   )z3TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTryc                 S   r  r[   r   r]   r   r   r    rZ     r  z<TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.__init__c                 S   r  r[   r   ra   r   r   r    rc     r  z=TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.utcoffsetNr9   rL   rM   rZ   rc   r   r   r   r    NiceTry  r:  r  c                   @   r   )z5TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTryc                 S   r  r[   r   r]   r   r   r    rZ     r  z>TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.__init__c                 S   r  r[   r   ra   r   r   r    rc     r  z?TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.utcoffsetNr  r   r   r   r    	BetterTry  r:  r  )r   ru   rv   objectr   r   )r+   rg  r  r  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 ]Y\}}|tu r |ddd||d}n|tu r1|dddddd||d}|r_t|}t|d	\}}d
|dk rEdpFd||f }	t|trT| }| t	|d|	  q| 
tt	| qd S )Nc                   @   r   )z6TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgyc                 S   s   t |d| _d S rP   r   rY   )r+   rY   r   r   r    rZ     r~  z?TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.__init__c                 S   r`   r[   )rY   ra   r   r   r    rc     rd   z@TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.utcoffsetNr  r   r   r   r    Edgy      r  ))`F)aT)  T)r
  Fr"   rE   rA   r   rI   r  z%c%02d:%02dr   r  r  z01:02:03)r   r   r   r   r  r  rS   timetzr*   r   ru   r   )
r+   r  rg  rY   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 ]}| |  | |  | |  q!G dd dt}|ddd| d}| | tdd | | td	d | | d
 G dd dt}|ddd| d}| t	|j | t	|j | t	|j G dd dt}|ddd| d}| t
|j | t
|j G dd dt}|ddd| d}| | tdd | | tdd d S )Nc                   @   $   e Zd Zdd Zdd Zdd ZdS )z*TZInfoBase.test_tzinfo_classes.<locals>.C1c                 S   r  r[   r   ra   r   r   r    rc     r  z4TZInfoBase.test_tzinfo_classes.<locals>.C1.utcoffsetc                 S   r  r[   r   ra   r   r   r    rf     r  z.TZInfoBase.test_tzinfo_classes.<locals>.C1.dstc                 S   r  r[   r   ra   r   r   r    re     r  z1TZInfoBase.test_tzinfo_classes.<locals>.C1.tznameNr9   rL   rM   rc   rf   re   r   r   r   r    C1      r  r"   r   c                   @   r  )z*TZInfoBase.test_tzinfo_classes.<locals>.C3c                 S   
   t ddS )Nr  rQ   r   ra   r   r   r    rc        
 z4TZInfoBase.test_tzinfo_classes.<locals>.C3.utcoffsetc                 S   r  )Nr  rQ   r   ra   r   r   r    rf     r  z.TZInfoBase.test_tzinfo_classes.<locals>.C3.dstc                 S   r   Nanamer   ra   r   r   r    re     r  z1TZInfoBase.test_tzinfo_classes.<locals>.C3.tznameNr  r   r   r   r    C3  r  r  r  rQ   r  r  c                   @   r  )z*TZInfoBase.test_tzinfo_classes.<locals>.C4c                 S   r   r  r   ra   r   r   r    rc     r  z4TZInfoBase.test_tzinfo_classes.<locals>.C4.utcoffsetc                 S   r   r  r   ra   r   r   r    rf     r  z.TZInfoBase.test_tzinfo_classes.<locals>.C4.dstc                 S   r   r  r   ra   r   r   r    re     r  z1TZInfoBase.test_tzinfo_classes.<locals>.C4.tznameNr  r   r   r   r    C4  r  r  c                   @   r   )z*TZInfoBase.test_tzinfo_classes.<locals>.C6c                 S   r  )Nir   r   ra   r   r   r    rc     r  z4TZInfoBase.test_tzinfo_classes.<locals>.C6.utcoffsetc                 S   r  )Nr   r   r   ra   r   r   r    rf     r  z.TZInfoBase.test_tzinfo_classes.<locals>.C6.dstNr8  r   r   r   r    C6  r:  r  c                   @   r   )z*TZInfoBase.test_tzinfo_classes.<locals>.C7c                 S   r  )Nr;  r   r   ra   r   r   r    rc     r  z4TZInfoBase.test_tzinfo_classes.<locals>.C7.utcoffsetc                 S   r  )Nr   r   ra   r   r   r    rf     r  z.TZInfoBase.test_tzinfo_classes.<locals>.C7.dstNr8  r   r   r   r    C7  r:  r  r;  r   r  )r   r   r   rc   rf   re   r*   r   ru   rv   r   )r+   rg  r  r   r  r  r  r  r   r   r    test_tzinfo_classes  s6   
zTZInfoBase.test_tzinfo_classesc                 C   sx  | j }G dd dt}|ddd| d}|jdd}|jdd}|jd	d}|||fD ]'}|||fD ]}ttttttfD ]}	|	||}
|	|j	|j	}| 
|
| q<q2q+|tur|jd| d
}|jd| d
}|jd	| d
}|||fD ]E}|||fD ];}||k||k  }
||u s||u r||u s||u rd}n||  u r|u rn nd}n	||u rd}nd}| 
|
| q{qtd S d S )Nc                   @   rk   )z=TZInfoBase.test_aware_compare.<locals>.OperandDependentOffsetc                 S       |j dk rt|j dS tddS Nr#   rQ   r   r  r   r  r   r   r    rc        

zGTZInfoBase.test_aware_compare.<locals>.OperandDependentOffset.utcoffsetNrn   r   r   r   r    OperandDependentOffset  ro   r  r  r\  r#   r   rA   r}  rs   r  r   r   r   r"   )r   r   r   r   r   r   r   r   r   r  r*   r   )r+   rg  r  rh  d0r  r  r  r  oprk  r  r   r   r    test_aware_compare  s@   	

 zTZInfoBase.test_aware_compareN)r9   rL   rM   r  r  r  r  r  r   r   r   r    r    s    0r  c                   @   s   e Zd ZeZdd Zdd Zdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) 
TestTimeTZc                 C   sP   |   }| |jd | |jd | |jd | |jd | |j d S r  )r   r*   r  r  r  r  r   r   r  r   r   r    
test_empty0  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 d S )6Nr   r   r"   r   r   rC   r  METrA   rD   r+  r   r   r  (   rv  )r  r   rQ   zno argsc                      rM  r[   r   r   ry  Zt5r   r    r   b  r   z'TestTimeTZ.test_zones.<locals>.<lambda>c                      rI  r[   r   r   r  r   r    r   c  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>.BadtznamerO   c                 S   r`   r[   r  ra   r   r   r    re     s    z/TestTimeTZ.test_zones.<locals>.Badtzname.tznameN)r9   rL   rM   r   re   r   r   r   r    	Badtzname  s    r  rE   rG   z%H:%M:%Sz02:03:04r  r>   r   )rN   r   r*   r   r   rc   r   ru   rv   re   rf   r>  r   r   r  r   r  r8   r9   r   r   )r+   estr   metr:  r;  rx  r@  Zyuckr  r   r   r  r    
test_zones8  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"   rE   rA   r  r   r   i  r   rS  rI   r6  ir  i)r   rN   r*   r>  r9  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 ]0\}}}|||}||}| || | |j	t | |
 tdd	 | | d q;| | |d d S )
Nry  rE   r   r   rB   rI   rD   r   rQ   )r   r   r   r   r*   rI  rJ  rh   r   r   rc   r   re   	r+   r   r   r   r   r   r   r   tinfor   r   r    rE    s"   



zTestTimeTZ.test_picklingc                 C   s   g d}t dd}| jdddd|d}|D ]0}tD ]+}||d	d
}| ||t| | |jt  | | tdd | |	 d qq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   rB   rI   rD   r  r   rO  rP  rQ   )
rh   r   rS  r*   r   r   r   rc   r   re   )r+   r  r  r  rU  r   r   r   r   r    rV    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   rB   i,  r   r   r  )r   rN   r}   )r+   rg  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 ]&\}}|d d  }	||	|< ||	 }
|jd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 )Nr6  +1008rQ   -200r"   rE   rA   rG   r   r1  r2  r3  r4  r   r   r   r|  r   r}  rw  r8  rv  r   r   rN   r   r*   r   re   r   r   r   ru   r   r+   rg  Zz100Zzm200r   rh  r  r5   ri  rj  r  rk  Zbase2Zbase3r   r   r    rl    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"   rE   rA   r   r   r   c                   @   r   )z-TestTimeTZ.test_mixed_compare.<locals>.Variesc                 S      t dd| _d S Nr  rQ   r  r]   r   r   r    rZ     r~  z6TestTimeTZ.test_mixed_compare.<locals>.Varies.__init__c                 S      |  j tdd7  _ | j S Nr"   rQ   rY   r   r  r   r   r    rc        z7TestTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetNr  r   r   r   r    Varies  r  r  r   rQ   r   )	r   r*   r   rN   r   r   rc   r   r}   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 ]5}|D ]0}| j|d|i}	|	 }
| j|
d | j	|
}| 
|	| W d    q01 s[w   Y  q0q,d S )NrF  )r   r   r   r   )r\  r   r   )rB   r  )rG   r-  )r   i i[
 rE   r   rI   rN  r   r   rT  )r  	itertoolsproductr   r   r   r   r  r   r  r*   )r+   Ztime_examplesZhhZmmssZusecr  Zttupr  r   rU  t_rtr   r   r    r  &  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 |}W d    qC1 sfw   Y  qCd S )Nr   r  r-  rN  rB   r   rE   rI   rN  r   rt   r   rG   r\  r  r   c                 S   rO  rP  r   rQ  r   r   r    r!   J  rR  z:TestTimeTZ.test_fromisoformat_timezone.<locals>.<listcomp>r   c                 S   rS  r   r   rQ  r   r   r    r!   O  rR  r   rT  rV  )r+   Z	base_timer  r  r  r   rU  r  r   r   r    rW  @  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 ]Y\}}|D ]R}|D ]M}|d
krEd|d d  }|dd |f }| j|dd|  d|i}	|	j|d}
| j|
d | j|
}| |	| W d    q.1 svw   Y  q.q*q$d S )N)r  r  r-  r  )r  r  r-  r   r   r   rE   rI   rN  r   r]  r   r  r   r   r"   r   r  rT  r^  )r+   Z
time_basesr  r`  ra  r  r  Zt_tuplerb  r   rU  r  r   r   r    rc  Y  s0   z'TestTimeTZ.test_fromisoformat_timespecsc              
   C   rd  )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:30are  rf  r  r   r   r    r  t  s   z#TestTimeTZ.test_fromisoformat_failsc              	   C   r  )Nr   s   12:30:45z12:30:45r  r  r   r   r    r    s   z-TestTimeTZ.test_fromisoformat_fails_typeerrorc                 C   sP   G dd d| j }|ddddtjd}|| }| || | || d S )Nc                   @   r{  )z<TestTimeTZ.test_fromisoformat_subclass.<locals>.TimeSubclassNr|  r   r   r   r    r~    r~  r~  r   r  r-  i r   )r   r   r   r  r  r*   r   )r+   r~  ZtscZtsc_rtr   r   r    r    s
   z&TestTimeTZ.test_fromisoformat_subclassc                    s   G  fddd j }ddddtddd	f} j | }||i d
di} |j|  |jd  |jd  | |   |d|j|j	 d  d S )Nc                       rq  )z*TestTimeTZ.test_subclass_timetz.<locals>.CrO   c                    rr  rs  rt  rv  r]   r   r    r     ry  z2TestTimeTZ.test_subclass_timetz.<locals>.C.__new__c                 S   rz  r[   r  r{  r   r   r    r}    r~  z2TestTimeTZ.test_subclass_timetz.<locals>.C.newmethNr  r   r]   r   r    r    r  r  rG   rB   rI     r   r   r"   r   rD   rO   rF   )
r   rN   r*   r8   r  r   rc   r}  r  r  r  r   r]   r    test_subclass_timetz  s   
"zTestTimeTZ.test_subclass_timetzN)r9   rL   rM   r   r   r  r  r  rE  rV  r  rl  r[  r  rW  rc  r  r  r  r  r   r   r   r    r  -  s"    W
"'

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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"   rE   rA   rG   rB   rI   rD   )
r   r*   r  r  rf  r  r  r  r  r   ra   r   r   r    test_trivial  s   zTestDateTimeTZ.test_trivialc                    sh  | 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 sw   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   r0  r   r   r   r  rE   rA   r     r   )r   r  )r   r  c                   @   rk   )z4TestDateTimeTZ.test_even_more_compare.<locals>.Naivec                 S   r  r[   r   ra   r   r   r    rc     r  z>TestDateTimeTZ.test_even_more_compare.<locals>.Naive.utcoffsetNrn   r   r   r   r    Naive  ro   r  rB   rI   rD   c                   @   rk   )z4TestDateTimeTZ.test_even_more_compare.<locals>.Bogusc                 S   r  )Nr
  rQ   r   ra   r   r   r    rc     r_   z>TestDateTimeTZ.test_even_more_compare.<locals>.Bogus.utcoffsetNrn   r   r   r   r    r9    ro   r9  c                      s    kS r[   r   r   r:  r;  r   r    r     r   z7TestDateTimeTZ.test_even_more_compare.<locals>.<lambda>)r   rN   r   r}   r*   r   r   ru   rv   r   r   )r+   r  r9  r   r  r    test_even_more_compare  sP   
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 ]0\}}}|||}||}| || | 	|j
t | | tdd
 | | d qI| | |d d S )Nr  rE   r   r   r   r"   r   r   r   rQ   )r   r   r   r   r*   rI  rJ  rh   rN   r   r   rc   r   re   r  r   r   r    rE    s$   



zTestDateTimeTZ.test_picklingc                 C   s   g d}d}t dd}| j|i d|i}|D ]-}tD ](}||dd}| || | |jt  | | tdd | | d qq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.)rM  rs   rN  r   r   r"   r  r   r   r   rO  rP  rQ   )	rh   r   rS  r*   r   r   rc   r   re   )r+   r  r   r  r  rU  r   r   r   r   r    rV  -  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   r0  r   r   r   r  rB   r  )r   rN   r>  r   ru   r   r  r   r   r    test_extreme_hashesR  s   z"TestDateTimeTZ.test_extreme_hashesc                 C   s  t dd}t dd}t dd}tddd	d
d|d}tddd	dd|d}tddd	dd|d}| |j| | |j| | |j| | | tdd | | tdd | | tdd | | d | | d | | d | t|t| | t|t| | t|t| | || | || | || | t|d | t|d | t|d d}| t	||d  | t	||d  | t	||d  d S )Nr   r   r   r   r  r  r  rA   r  rD   r+  r   r   r  rQ   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))
rN   r   r*   r   rc   r   re   r>  r   r   )r+   r  r   r  r:  r;  rx  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  r  r  rA   rG   r  r-  r.  r   )rN   r   r   r   r  r*   )r+   r  r@  r   rb   r   r   r    r0  ~  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  )rN   r   r*   r   r   r  )r+   r  rb   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                      r   r[   r   r   r   nowawarer   r    r     r   z9TestDateTimeTZ.test_tz_aware_arithmetic.<locals>.<lambda>c                      r"  r[   r   r   r  r   r    r     r   c                      r  r[   r   r   r  r   r    r     r   c                      r!  r[   r   r   r  r   r    r     r   c                      r  r[   r   r   )r  r   r    r     r   r   r"   r   i.  )r   rR   r   c                      r   r[   r   r   )r   nowawareplusr   r    r     r   r  r
  Zrandomtimezoner  r   r0  r   r   r   ry   i>  rQ   r'  r+  )r   r   rN   r   r   r  r   r   r   r*   r  ru   rv   r   rm   	randrangerc   r   ry   r   r   r   )r+   Ztz55Z	timeawareZnowawareplus2r  Ztzrrk  r  r   ry   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 ]4}tdD ](}t|}	| |	j| t j|d}
|
|}t|	| tddk r q`qf| d q`d S )NrO   42r  rQ   r  r   r  r   r   rB  rS  r   weirdtzrA   r  r   z0utcnow(), now(tz), or astimezone() may be broken)r   r   rN   r   r   r*   rc   r   ru   rv   r   r  r   r  r   r=  r  Zfail)r+   methrh  off42anotheragainr   r  r   r   r  Znow2r   r   r    test_tzinfo_now  s2   



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   rO   r  r  rQ   r  r   r  ra  i'   r   r   )r   r   r  rN   r   r   r*   rc   r   ru   rv   r   r  r   )r+   r   r  r  rh  r  r  r  r  Zutcdatetimerc   r   r  rk  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 )NrO   r  r   )r   r  rN   ru   rv   )r+   r  rh  r  r   r   r    test_tzinfo_utcnow  s
   
z!TestDateTimeTZ.test_tzinfo_utcnowc                 C   sP   dd l }| jj}|  }||}tdd}| t||| | jt|||d d S )Nr   rO   r  r   )r   r   r  rN   ru   rv   )r+   r   r  r  rh  r  r   r   r    test_tzinfo_utcfromtimestamp   s   
z+TestDateTimeTZ.test_tzinfo_utcfromtimestampc                 C   sh  G dd dt }| j}dD ]U\}}|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                   @   r   )z1TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DSTc                 S      t |tr
t|d}|| _d S rP   rS   rT   r   dstvaluer+   r  r   r   r    rZ   0     


z:TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.__init__c                 S   r`   r[   r  ra   r   r   r    rf   4  rd   z5TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.dstNr9   rL   rM   rZ   rf   r   r   r   r    DST/  s    r  ))r"   )r)  r"   )r   r   )Nr   r"   r#   r   r  r  r   r   r  r  r  r
  r  )r   r   r!  r*   r<  r=  r>  r?  r@  rA  rB  rC  rD  ru   rv   r   )r+   r  rg  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 ]f}|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 q&|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   r  rP   r  r  r   r   r    rZ   R  r  z6TestDateTimeTZ.test_utctimetuple.<locals>.DST.__init__c                 S   r`   r[   r  ra   r   r   r    rf   V  rd   z1TestDateTimeTZ.test_utctimetuple.<locals>.DST.dstN)r   r  r   r   r   r    r  Q  s    
r  r"   r   r   c                       s"   e Zd Zd fdd	Zdd ZdS )z.TestDateTimeTZ.test_utctimetuple.<locals>.UOFSNc                    s     | | t|d| _d S rP   )rZ   r   uofs)r+   r  Zdofsr  r   r    rZ   _  s   z7TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.__init__c                 S   r`   r[   )r  ra   r   r   r    rc   b  rd   z8TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.utcoffsetr[   r  r   r  r   r    UOFS^  s    r  )r  r)  r   NrE   rA   r#   r   r  r  irs   r  r   c                   @   rk   )z.TestDateTimeTZ.test_utctimetuple.<locals>.NOFSc                 S   r  r[   r   ra   r   r   r    rc   |  r   z8TestDateTimeTZ.test_utctimetuple.<locals>.NOFS.utcoffsetNrn   r   r   r   r    NOFS{  ro   r  c                   @   rk   )z.TestDateTimeTZ.test_utctimetuple.<locals>.BOFSc                 S   r   )Nr   r   ra   r   r   r    rc     r   z8TestDateTimeTZ.test_utctimetuple.<locals>.BOFS.utcoffsetNrn   r   r   r   r    BOFS  ro   r  r   r  rB  r  i+ r  r  r   r0  r   r   r   r  )#r   r   ru   rz   rc   Zutctimetupler*   r  r<  r  r=  rf  r>  r?  r@  r  rA  r  rB  r  r   rC  rD  r!  rv   r   r   r   ry   r   r=  r   rb  r   r   )r+   rg  r  r  r@  r   r  r  r   Zdtzre  Zhuger   r  r    test_utctimetupleP  s\     z TestDateTimeTZ.test_utctimetuplec                 C   s  t dd}t dd}t dd}t d d}| j}d}d ||||fD ]f}d	D ]a}|d
ddddd||d}	d|r7dp8d }
|d urB|	 pCd}|
| }|	 }| ||d |  | ||	d | |	d|d |  | |	d|d |  | t|	|d |  q$q d S )Nr   r     z+03:40iz-03:51r   z
0001-02-03)r   iy r"   rE   rA   rG   rB   r   r   z04:05:59z.987001rs  ku   ሴr  )rN   r   re   r  r*   r   )r+   r%  ZplusZminusunknownrg  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 ]&\}}|d d  }	||	|< ||	 }
|jdi ||i}| |
| |d7 }q4| | d |jd d}| |j | |  |j|d}| || | |j|j |ddd}| j	t
|jdd d S )Nr6  r  r  rQ   r  r"   rE   rA   rG   rB   rI   rD   r   ra  rb  rc  r1  r2  r3  r4  r   r   r  r  r  rd  r   r  r  r   r   r    rl    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Noner5  Z44rB   r   Zm300r  r   r   )rN   r   r   r   r   r   ru   r   r=  r*   r   r   rc   r   r  )r+   ZfnoneZf44mZfm5hrb   r  rk  r  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=  ra   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 )Nrm  rs   rG   rI   r  r   r0  z	-0500 ESTrB   z	-0400 EDT)r   r   r   r=  r*   r  )r+   rb   r   r   r   r    test_astimezone_default_eastern  s   z.TestDateTimeTZ.test_astimezone_default_easternc                 C   s8   t ddddtjd}| }| }| |j|j d S )NrM  rs   r"   rB   r   )r   r   r   r=  r*   r   )r+   r   r   r]  r   r   r    !test_astimezone_default_near_fold  s   z0TestDateTimeTZ.test_astimezone_default_near_foldc              
   C   s  | j }G dd dt}|ddddddd	| d
}|jdd}|jdd}|jdd}|||fD ]}|||fD ]}|| }	t|j|j d}
| |	|
 q6q/|ddddddd	}|jd| d}|jd| d}|jd| d}|||fD ]I}|||fD ]A}|| }	||u s||u r||u s||u rtd}
n ||  u r|u rn ntd}
n||u rtdd}
ntdd}
| |	|
 q{qtd S )Nc                   @   rk   )zBTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffsetc                 S   r  r  r  r  r   r   r    rc     r  zLTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffset.utcoffsetNrn   r   r   r   r    r    ro   r  r  r\  r#   rs   r   r  r  r   rA   r}  rQ   r  r   ir  )r   r   r   r   r  r*   )r+   rg  r  rh  r  r  r  r  r  rk  r  r   r   r    test_aware_subtract  s:   	 


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"   rE   rA   rG   rB   rI   rD   r   r   r   c                   @   r   )z1TestDateTimeTZ.test_mixed_compare.<locals>.Variesc                 S   r  r  r  r]   r   r   r    rZ   M  r~  z:TestDateTimeTZ.test_mixed_compare.<locals>.Varies.__init__c                 S   r  r  r  r  r   r   r    rc   O  r  z;TestDateTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetNr  r   r   r   r    r  L  r  r  r   rQ   r   )	r   r*   r   rN   r   r   rc   r   r}   r  r   r   r    r[  @  s$   z!TestDateTimeTZ.test_mixed_comparec                    s   G  fddd j }ddddddd	td
ddf} j | }||i ddi} |j|  |jd  |jd  | |   |d|j|j	 d  d S )Nc                       rq  )z2TestDateTimeTZ.test_subclass_datetimetz.<locals>.CrO   c                    rr  rs  rt  rv  r]   r   r    r   c  ry  z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.__new__c                 S   rz  r[   )r  r  r{  r   r   r    r}  j  r~  z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.newmethNr  r   r]   r   r    r  `  r  r  r  r   r0  rG   rB   rI   r  r   r   r"   r   rD   rO   rF   )
r   rN   r*   r8   r  r   rc   r}  r  r  r  r   r]   r    test_subclass_datetimetz^  s   
"z'TestDateTimeTZ.test_subclass_datetimetzN)r9   rL   rM   r   r   r  r  rE  rV  r  r  r0  r/  r  r  r  r  r  r  r  r   rl  r  r   rl  r  r  r  r  r[  r  r   r   r   r    r    s:    E%A%#
$P'



,r  c                 C   s    d|    }|r| t|7 } | S )NrI   )r  r   )rb   Z
days_to_gor   r   r    first_sunday_on_or_afterz  s   r  rQ   r   r   rG   rE   r$  c                   @   r  )
USTimeZonec                 C   "   t |d| _|| _|| _|| _d S Nr   r   	stdoffsetreprnamestdnamedstnamer+   r   r  r  r  r   r   r    rZ        
zUSTimeZone.__init__c                 C   r`   r[   r  r]   r   r   r    r^     rd   zUSTimeZone.__repr__c                 C      |  |r| jS | jS r[   rf   r  r  ra   r   r   r    re        
zUSTimeZone.tznamec                 C      | j | | S r[   r  rf   ra   r   r   r    rc     r~  zUSTimeZone.utcoffsetc                 C   sb   |d u s	|j d u rtS ttj|jd}ttj|jd}||jd d  kr,|k r/tS  tS tS Nrd  r   )r   r   r  DSTSTARTr   r  DSTENDr   r+   rb   r|  endr   r   r    rf     s   zUSTimeZone.dstNr9   rL   rM   rZ   r^   re   rc   rf   r   r   r   r    r	        r	  r   r   r   r6  rJ   CentralZCSTZCDTrF   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  rG   rD   rE   r#   rN  r"   c           
      C   s  |  | t |  ||| ||}||}| | krE|jdkrE|  |t | |  | t |  |||| n|  || |t }||}	| | kr|jdkr|  |	|jdd |t7 }||}	|  |	|jdd d S |  |	| t d S )NrE   r   r"   r|  )r*   rf   r   r=  r   r  r   r   )
r+   rb   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*   rf   r   r=  )r+   rb   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 ]8}| ||||| || || fD ]}| ||||| q1| ||| || || fD ]	}| ||| qLqd S )Nr   r  r   r"   rQ   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_easy  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 ]U}tt	fD ]N}| j
tdd }||d 8 }||d  }	|	j|d}
dD ]-}| j
j|d}dD ]}|j|d}|
j|d}	|	|}| |jd d| q}|
t7 }
qrqRqLd S )NrG   r   iz-0900r   r   rA   r|  rI   r  r   r"   rE   )r   r"   r"   rE   r   r  r   r}  )r$  r   rN   r   r=  r   r*   r,  r-  r"  r%  rc   r   )r+   ZfourbackZninewestr  rk  Zsixutcr   r   Zfirst_std_hourr&  Z	asutcbaseZtzhourZexpectedbaser  Zastzr   r   r    test_tricky4  s6   

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                   @   r   )z2TestTimezoneConversions.test_bogus_dst.<locals>.okc                 S      t S r[   r   ra   r   r   r    rc   i  r  z<TestTimezoneConversions.test_bogus_dst.<locals>.ok.utcoffsetc                 S   r2  r[   r3  ra   r   r   r    rf   j  r  z6TestTimezoneConversions.test_bogus_dst.<locals>.ok.dstNr8  r   r   r   r    okh  r:  r4  r   c                   @   rk   )z5TestTimezoneConversions.test_bogus_dst.<locals>.notokc                 S   r  r[   r   ra   r   r   r    rf   r  r  z9TestTimezoneConversions.test_bogus_dst.<locals>.notok.dstNr9   rL   rM   rf   r   r   r   r    notokq  ro   r6  c                   @   rk   )z<TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notokc                 S   s   |j dkrd S dt S )Nr  r#   )r  r   ra   r   r   r    rf   z  s   
z@TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notok.dstNr5  r   r   r   r    tricky_notoky  ro   r7  r  r"   )r   r   r   r   r,  r=  ru   r   )r+   r4  r   r6  r7  rb   r   r   r    test_bogus_dstg  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 ]E}|j|d}|dkrn|tdd8 }t|}	| 	||	 ||j }||}	| 	||	 |jtd|}	| 	||	 |t7 }|t7 }q[| jjdtd	}|j|d}dD ]:}|j|d}t|}	| 	||	 ||j }||}	| 	||	 |jtd|}	| 	||	 |t7 }|t7 }qd S )Nr   c                   @   rk   )z<TestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZonec                 S   s
   || j  S r[   )r  ra   r   r   r    r     r_   zDTestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZone.fromutcNr9   rL   rM   r   r   r   r   r    FauxUSTimeZone  ro   r:  r   FEasternZFESTZFEDTrG   r/  )r   r   r"   rA   rG   rB   r|  r   r"   r   )r   r"   r"   rE   rA   rG   )ru   rv   r   r   r   r  r   r,  r   r*   r   r   r  r	  r$  r   r  r=  r   r%  )
r+   r   Zenowr:  r;  r|  ZfstartZwallr  rk  r   r   r    r     sN   








z$TestTimezoneConversions.test_fromutcN)r9   rL   rM   r   r$  r%  r   r(  r)  r+  r.  r1  r8  r   r   r   r   r    r#    s    43r#  c                   @   r  )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                      rM  r[   r   r   Zas_dateZas_datetimer   r    r     r   z+Oddballs.test_bug_1028306.<locals>.<lambda>c                      rI  r[   r   r   r=  r   r    r     r   c                      rL  r[   r   r   r=  r   r    r     r   c                      rG  r[   r   r   r=  r   r    r     r   c                      rN  r[   r   r   r=  r   r    r     r   c                      rJ  r[   r   r   r=  r   r    r     r   c                      rO  r[   r   r   r=  r   r    r     r   c                      rK  r[   r   r   r=  r   r    r     r   Tr"   r   )rf  Fr   )r   r  r   r  r   r}   r   ru   rv   r*   __eq__rf  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 ]}| t	 d|_
W d    q1 s'w   Y  qd S rh  )r   r  r   r   r  r   r   r   ru   AttributeErrorr$   )r+   r  r   r   r    test_extra_attributes  s   zOddballs.test_extra_attributesc                 C   s  G dd d}G dd dt }d|dtdtd|d|dd	fD ]]}| tt|dddddd	 | ttd|ddddd	 | ttdd|dddd	 | ttddd|ddd	 | ttdddd|dd	 | ttddddd|d	 | ttdddddd|	 q$d S )
Nc                   @   r   )z-Oddballs.test_check_arg_types.<locals>.Numberc                 S   s
   || _ d S r[   value)r+   rC  r   r   r    rZ     r_   z6Oddballs.test_check_arg_types.<locals>.Number.__init__c                 S   r`   r[   rB  r]   r   r   r    __int__  rd   z5Oddballs.test_check_arg_types.<locals>.Number.__int__N)r9   rL   rM   rZ   rD  r   r   r   r    Number  r  rE  c                   @   r{  )z,Oddballs.test_check_arg_types.<locals>.FloatNr|  r   r   r   r    Float  r~  rF  g      $@g%@r#   z10.9Z10)r  decimalZDecimalru   rv   r   )r+   rE  rF  xxr   r   r    test_check_arg_types  s   zOddballs.test_check_arg_typesN)r9   rL   rM   r?  rA  rI  r   r   r   r    r<    s    %
r<  c                   @   rk   )tzinfo2c                 C   s   t |ts	td|j| urtd|jdd }|jdd }|du s0|du s0| du r2t||krD|| }| }||krD|S ||fD ] }|| }| |krX|  S |jdd}| |krh|  S qHtd)*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)rS   r   rv   r   r   r   rc   rf   )r+   rb   Zoff0Zoff1ldtZoffr   r   r    r     s,   

ztzinfo2.fromutcNr9  r   r   r   r    rJ    s    rJ  c                   @   r  )USTimeZone2c                 C   r
  r  r  r  r   r   r    rZ   3  r  zUSTimeZone2.__init__c                 C   r`   r[   r  r]   r   r   r    r^   9  rd   zUSTimeZone2.__repr__c                 C   r  r[   r  ra   r   r   r    re   <  r  zUSTimeZone2.tznamec                 C   r  r[   r  ra   r   r   r    rc   B  r~  zUSTimeZone2.utcoffsetc                 C   s   |d u s	|j d u rtS ttj|jd}ttj|jd}|jd d}|t |  kr0|k r1tS  ||  kr=|t k rFn n|jrDtS tS ||  krR|t k r\n tS |jrZtS tS tS r  )	r   r   r  r  r   r  r  r   r  r  r   r   r    rf   E  s   zUSTimeZone2.dstNr  r   r   r   r    rO  1  r  rO  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  rI   r   rr   r   r  r   r]   r   r   r    	_utc_foldv     zEurope_Vilnius_1941._utc_foldc                 C   s$   t dddd| dt dddd| dgS )NrU  rI   r   r   r   r   rV  r]   r   r   r    	_loc_foldz  rX  zEurope_Vilnius_1941._loc_foldc                 C   B   |   \}}||k rdt S ||k r|jrdt S dt S dt S )NrA   rE   rY  r   r  r+   rb   Z
fold_startZ	fold_stopr   r   r    rc   ~     zEurope_Vilnius_1941.utcoffsetc                 C   rZ  )Nr   r"   r[  r\  r   r   r    rf     r]  zEurope_Vilnius_1941.dstc                 C   s.   |   \}}||k rdS ||k rd|j S dS )NMSK)r^  CESTr_  )rY  r  r\  r   r   r    re     s   
zEurope_Vilnius_1941.tznamec                 C   sV   |j dkrt|  \}}||k r|dt  S ||k r%|dt  jddS |dt  S )NrU  rA   rE   r"   r  )r  rz   rW  r   r   r\  r   r   r    r     s   
zEurope_Vilnius_1941.fromutcN)	r9   rL   rM   rW  rY  rc   rf   re   r   r   r   r   r    rT  u  s    			rT  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 )NrU  rI   r   r   r   r   z%c %Z%zz!Mon Jun 23 23:59:59 1941 MSK+0300r   rr   z"Mon Jun 23 23:00:00 1941 CEST+0200r"   r  z"Tue Jun 24 00:00:00 1941 CEST+0200)rT  r   r   r   r=  r*   r  r  r   rf   r}   )r+   VilniusgdtrN  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 )NrU  rI   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)rT  r   r=  r   r   r*   r  )r+   ra  rN  rb  r   r   r    test_vilnius_1941_toutc  s*   z3TestLocalTimeDisambiguation.test_vilnius_1941_toutcc                 C   sz   t ddd}tddddd}| |jd | |jd | t t ddddd d W d    d S 1 s6w   Y  d S Nr   r"   r  )r   r   r*   r  ru   rv   r+   r   rb   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  r  )r+   rb   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 spw   Y  | t |jdd W d    n1 sw   Y  | t |dddd d W d    n1 sw   Y  | t |dddddddd d	 W d    d S 1 sw   Y  d S )Nr   r"   r  )r  r   r   rE   )	r   r   r*   r   r  r   ru   r   rv   rf  r   r   r    rl    s,   "z(TestLocalTimeDisambiguation.test_replacec                 C   s@   t d}tddd}| ||jdd | ||jdd d S re  )r   r   r*   r   rf  r   r   r    r     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 re  )r   r   r*   r>  r   rf  r   r   r    	test_hash  s    z%TestLocalTimeDisambiguation.test_hashr	  c                 C   s<   d}t |}t |d }| |jd | |jd d S )NiXUTr7  r   r"   )r   r  r*   r  )r+   r]  dt0rw   r   r   r    r  
  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+   tmr]  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_detection"  s   zATestLocalTimeDisambiguation.test_fromtimestamp_low_fold_detectionc                 C   s8   t ddddd}|jdd}| | d |  d S )Nrq   rs   rE   r"   r  r  r7  )r   r   r*   r  )r+   rj  rw   r   r   r    test_timestamp'  s
   z*TestLocalTimeDisambiguation.test_timestampc                 C   sh   t d}t d|dkr| d tddddd	}|jd
d }|jdd }| |d | d S )Nrk  rl  rm  rn  rM  rG   rB   r"   r-  r   r  ro  )r   r  r  r:   r   r   r  r*   )r+   rp  r   s0s1r   r   r    test_timestamp_lord_howe.  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 )
Nrq   rs   rE   r"   r  r  r6  r   r   )r   r   r=  r*   re   r   r  )r+   rj  rw   Zadt0Zadt1r   r   r    r@  8  s   z+TestLocalTimeDisambiguation.test_astimezonec           	      C   sz   t dd}tddddd}tD ]+\}}}||fD ]!}|||}||}| || | |dk r3dn|j|j qqd S )Nr"   r  rG   r   )r   r   r   r   r   r*   r  )	r+   r   rb   r   r   r   r  r]  r  r   r   r    test_pickle_foldG  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   rf  r   r   r    r   Q  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 qbd S )Nr  r#   rN  r"   r   rE   r  r0  rG   rD   )	r   rP  r   r_  r*   rf   r   r   r   )r+   	dt_summer	dt_winterr  rb   r   r   r    r   X  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#   rN  r"   r   rE   rH   r   r  )r   rP  r   r_  r*   rc   r   r   )r+   rx  ry  r   r   r    r   s  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#   rN  rI   r   rD   rG   rB   r   r  r"   )r   rr   )rN  r"   rE   )rI   rr   )
r   rP  r   r_  r   r*   r   r  rf  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   rI   )r   rP  r*   r=  r   r   r  r   r   r    test_mixed_compare_regular  s   z6TestLocalTimeDisambiguation.test_mixed_compare_regularc                 C   <   t dddddtd}|tj}| || | || d S )Nr  r#   rN  r"   r-  r   r   rP  r=  r   r   r   )r+   t_foldZ
t_fold_utcr   r   r    test_mixed_compare_fold     z3TestLocalTimeDisambiguation.test_mixed_compare_foldc                 C   r{  )Nr  rG   rD   rE   r-  r   r|  )r+   t_gapZ	t_gap_utcr   r   r    test_mixed_compare_gap  r  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#   rN  r-  rG   rD   rE   )r   rP  r*   r>  r   )r+   r   r}  r  r   r   r    test_hash_aware  s    z+TestLocalTimeDisambiguation.test_hash_awareN)r9   rL   rM   rc  rd  rg  rh  rl  r   ri  r   rl  r  rq  rr  rs  rv  r@  rw  r   r   r   r   rz  r~  r  r  r   r   r   r    r`    s8    



	


!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    rZ     s   	zZoneInfo.__init__c                 C   s   t d| t d| f}| rT|d d t }|d d  |7  < |d d  |7  < tdt| D ]$}|d |  ||d  d t 7  < |d |  || d t 7  < q/|S )Nr  r   r"   )r   SECr  r?  )r  r  r   rY   r  r   r   r    r    s   $"zZoneInfo.invertc              	   C   sF  | d dkrtd|d td}||d tjdkr%|  td}|||d  tjdkr:|  td	}|||d  g }t	|d
 D ]}|
td| d qN| |d }t|D ]\}\}}	}
||
|d|
  }td||	|f||< qhd gt| }t|D ]
\}}|| ||< q| ||}|S )NrG   ZTZifznot a zoneinfo filert   r  rA   r9  r   r+  r"   z>lbbrI   rE   )readdecoder   seekr   fromfiler7   	byteorderbyteswapr  r  structunpackr_  findr   r?  )rg  fileobjcountsr  Ztype_indicesZttisr  ZabbrsZgmtoffisdstZabbrindabbrr  idxr+   r   r   r    r    s2   



zZoneInfo.fromfilec                 C   sH   t j| j|}t|d}| |W  d    S 1 sw   Y  d S )Nrb)ospathjoinzonerootopenr  )rg  r5   r  r  r   r   r    fromname  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 r7| jd }d}n(t| j
|}| j|d | \}}|d |d  }|td|| j
|d   k}||d 7 }|rm|jdd	S |S )rK  rL  rM  r  r7  r  r"   r   rE   r  N)rS   r   rv   r   r   r  EPOCHORDINALr  r  r  r  r  bisectbisect_rightr   r   )r+   rb   r  Zttir  r  Ztti_prevshiftr   r   r    r     s,   


zZoneInfo.fromutcc                 C   s\   |  | j d |jd  |jd  |j }| j|j }t||}| j	t
d|d  | S )Nr  r7  r  r   r"   )r  r  r  r  r  r   r  r  r  r  ry   )r+   rb   r  r  r   r  r   r   r    _find_ti%  s   zZoneInfo._find_tic                 C      |  |dS r  r  ra   r   r   r    rc   /     zZoneInfo.utcoffsetc                 C   s   |  |d}|r
tS tS rh  )r  r   r   )r+   rb   r  r   r   r    rf   2  s   zZoneInfo.dstc                 C   r  )NrE   r  ra   r   r   r    re   :  r  zZoneInfo.tznameNc                 c   s    |d u r| j }tj|d}zt|}W n
 ty   Y d S w |  |D ]}| }|r9|ds9| d V  q%W d    d S 1 sEw   Y  d S )Nzzone.tab#rE   )	r  r  r  r  r  r  stripr3   r  )rg  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 ]v}|d7 }| |}| D ]f\}}||k rEq<|tkrp|d7 }||f||fkr[|}|}|}|tj| f|tj|
 fk ro|}|}|}
q<|tk r|d7 }| }||f|	|fkr|}	|}|}|tj| f|tj| fk r|}|}|}q<|d7 }q<q-|||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   ry   r   r   r   r  r  transitionsprintru  )rg  
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   rb   r  Ztrans_countsr   r   r    statsL  s`   





zZoneInfo.statsc                 c   sJ    t t| j| jD ]\\}}\}}|d |d  }t||fV  q
d S r  )r  r  r  r  r   r  r+   _Zprev_tir   r  r  r   r   r    r  }  s
   "zZoneInfo.transitionsc                 c   sp    t t| j| jD ]+\\}}\}}|d |d  }|tk r5|d |d kr5t|| |d |d fV  q
dS )zLFind all folds with the same value of isdst on both sides of the transition.r   r"   rE   N)r  r  r  r  r   r   r  r  r   r   r    nondst_folds  s   "zZoneInfo.nondst_foldsFc           
   
   C   sn   d}|   D ].}| |}| D ]"\}}}}	|j|k s"|r#||	kr#q|d7 }td||||||	f  qqd S )Nr   r"   z%3d) %-30s %s %10s %5s -> %s)r  r  r  r  r  )
rg  Z	same_abbrr  r  r  r   rb   r  Z	prev_abbrr  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   r  r   r   r    folds  s   zZoneInfo.foldsc                 c   s*    |   D ]\}}|tkr||fV  qd S r[   r  r  r   r   r    gaps  s   
zZoneInfo.gapsc                 c   s"    |   D ]	\}}|s|V  qd S r[   )r  r  r   r   r    zeros  s   zZoneInfo.zerosr[   )r"   )Fr"   )r9   rL   rM   r  rZ   rw  r  classmethodr  r  r   r  r  r   r  rc   rf   re   r  r  r  r  r  r  r  r  r   r   r   r    r    s4    

$

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 d S  ty; } z| d| j|f  W Y d }~d S d }~ww )Nvxworksz"Skipping zoneinfo tests on VxWorksr  z"Skipping zoneinfo tests on WindowszSkipping %s: %s)r7   rn  r:   r  r  r  r   FileNotFoundError)r+   errr   r   r    r     s   



"zZoneInfoTest.setUpc                 C   s<   |  |jd d|jt|jf|jd d|jt|jf d S )Nr   )r*   r   r  idr   )r+   r  r  r   r   r    assertEquivDatetimes  s   z!ZoneInfoTest.assertEquivDatetimesc           	      C   s   | j }| D ]u\}}d| d| |tj fD ]E}|| }||j|d}| |jd |jtj	d
|}| || | }| |jd d||  | |
tj	|jtj	d qtj |fD ]}|| }|j|d}||}| |jd qcqd S )Nr   r  r   r"   )r   r  r   r_  r   r   r*   r  r   r   r=  r  rc   	r+   r   rb   r  r  udtrN  Zadtrc   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|  qtj |fD ]}|| }||j|d}| |jd q|qd S )Nr   r  r   r"   r  zAt %s.)r   r  r   r_  r   r   r*   r  r   r   r=  r  rc   Z
assertLessr  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< zt  |	 D ]{\}}|j
dkr6 q|tddd t }|t }dd	d
d|d |d |d fD ]%}|| }t|}	t||jd d}
| |	|
 |	 }| || qS|dkrt||d  }| }|jdd }| |||d   | |||d   q+W |d u rtjd= n|tjd< t  d S |d u rtjd= n|tjd< t  w )NZRiyadh8zright/zSkipping %sTZi  r]  r"   iir   r   i@ i2 r   rE   r  )r  r3   r:   r   r  environgetr   tzsetr  r  r   r  r  r   r  r  r*   )r+   r   r  r  r  rt  r  r  r]  ZsdtZtzdtru  rb   Zts0Zts1r   r   r    test_system_transitions  sL   








z$ZoneInfoTest.test_system_transitionsN)	r9   rL   rM   r  r   r  r  r  r  r   r   r   r    r    s    
r  c                       s   e Zd Z fddZ  ZS )ZoneInfoCompleteTestc                    sh   g }t dr,t D ]!}td| tfi }||_t|D ]}|dr*||| qq
t	 
| d S )NZtzdatazZoneInfoTest[%s]Ztest_)r   r  r  r   r  r  r-   r3   r  superrZ   )r+   r  r5   ZTestmethodr8   r   r    rZ     s   
zZoneInfoCompleteTest.__init__)r9   rL   rM   rZ   __classcell__r   r   r  r    r    s    r  c                   @   r  )IranTestzAsia/TehranN)r9   rL   rM   r  r   r   r   r    r    r  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   "  s   
zCapiTest.setUpc              	   C   sR   dD ]$}t |}| j|d | |tj W d    q1 s!w   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_capi+  s   
zCapiTest.test_utc_capic              	   C   s   t  \}}}ttddd}ttdd}d||fd||fd||fg}|D ]U\}}}	| j|dB | ||	 tdd	d
|d}
tdd	d
|	d}| |
| | |
 |  tdd	d
dtjd}| |
	tj| W d    q&1 svw   Y  q&d S )Nr   r   r   est_capi	est_macroest_macro_nn)r5   r  rE   rG   r   rB   )
r  Zmake_timezones_capir   r   r   r*   r   re   r   r=  )r+   r  r  r  Z	exp_namedZexp_unnamedcasesr5   Ztz_actZtz_exprw   r  r>  r   r   r    test_timezones_capi2  s$   zCapiTest.test_timezones_capic              
   C      G dd dt }t |fD ]?}dD ]:}|| }| j||d% t|\}}}| ||j | ||j | ||j W d    q1 sEw   Y  qqd S )Nc                   @   r{  )z=CapiTest.test_PyDateTime_DELTA_GET.<locals>.TimeDeltaSubclassNr|  r   r   r   r    TimeDeltaSubclassM  r~  r  )r   7   韆 r  rg  r   )r   r   r  ZPyDateTime_DELTA_GETr*   r   r   r   )r+   r  klassr   r@  r   r   r   r   r   r    test_PyDateTime_DELTA_GETL     z"CapiTest.test_PyDateTime_DELTA_GETc              
   C   r  )Nc                   @   r{  )z2CapiTest.test_PyDateTime_GET.<locals>.DateSubclassNr|  r   r   r   r    r}  [  r~  r}  ))r  r"   rE   )rm  rE   r  r  )r   r   r  ZPyDateTime_GETr*   r  r  rf  )r+   r}  r  r   r@  r  r  rf  r   r   r    test_PyDateTime_GETZ  r  zCapiTest.test_PyDateTime_GETc           
   
   C   s   G dd dt }t |fD ]Z}ddddddd	d
tjffD ]J}|| }| j||d5 t|\}}}}}	| ||j | ||j | ||j	 | ||j
 | |	|j W d    q1 s`w   Y  qqd S )Nc                   @   r{  )z;CapiTest.test_PyDateTime_DATE_GET.<locals>.DateTimeSubclassNr|  r   r   r   r    r  i  r~  r  )  r  r   r  r   r  r  r  r  r   r  r   r  r  r  )r   r   r   r   r  ZPyDateTime_DATE_GETr*   r  r  r  r  r   r   )
r+   r  r  r   r@  r  r  r  r  r   r   r   r    test_PyDateTime_DATE_GETh  s&   z!CapiTest.test_PyDateTime_DATE_GETc           
   
   C   s   G dd dt }t |fD ]W}dddddtjffD ]J}|| }| j||d5 t|\}}}}}	| ||j | ||j | ||j	 | ||j
 | |	|j W d    q1 s]w   Y  qqd S )	Nc                   @   r{  )z7CapiTest.test_PyDateTime_TIME_GET.<locals>.TimeSubclassNr|  r   r   r   r    r~  |  r~  r~  )r   r  r   r#   r   r  r   r#   r  )r   r   r   r   r  ZPyDateTime_TIME_GETr*   r  r  r  r  r   r   )
r+   r~  r  r   r@  r  r  r  r  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w   Y  | jdd | |tj W d    n1 s<w   Y  | jdd> | |tj ttddd}| || t	dd	d
|d}t	dd	d
|d}| || | |
 |
  W d    d S 1 sw   Y  d S )Nutc0)Ztestnameutc1non_utcr   r   r   r  rE   rG   r   )r  Zget_timezones_offset_zeror   r   r   r   r   r   r*   r   re   )r+   r  r  r  Znon_utc_exprw   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 ]&}d	D ]!}| j||d
 | ||| W d    qa1 s}w   Y  qaq]d S )Nc                   @   r{  )z.CapiTest.test_check_date.<locals>.DateSubclassNr|  r   r   r   r    r}    r~  r}    r"   T
2011-01-01r   r   r  argexact)r   r   r  Zdatetime_check_dater}   r   r   r  r   r   r   r   r   )	r+   r}  r@  Zdsrb   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 ]&}d	D ]!}| j||d
 | ||| W d    qK1 sgw   Y  qKqGd S )Nc                   @   r{  )z.CapiTest.test_check_time.<locals>.TimeSubclassNr|  r   r   r   r    r~    r~  r~  r   r  Tr"   r  r  r  r  )r   r  Zdatetime_check_timer}   r   r   r  r   r   r   r   r   )r+   r~  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 ]&}d	D ]!}| j||d
 | ||| W d    qQ1 smw   Y  qQqMd S )Nc                   @   r{  )z6CapiTest.test_check_datetime.<locals>.DateTimeSubclassNr|  r   r   r   r    r    r~  r  r  r"   r   r  Tr  r  r  )r   r  Zdatetime_check_datetimer}   r   r   r  r   r   r   r   r   )r+   r  rb   rL  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 ]&}dD ]!}| j||d | ||| W d    qK1 sgw   Y  qKqGd S )	Nc                   @   r{  )z4CapiTest.test_check_delta.<locals>.TimeDeltaSubclassNr|  r   r   r   r    r    r~  r  r"   Tr  r  r  r  )r   r  Zdatetime_check_deltar}   r   r   r  r   r   r   r   r   )r+   r  r  ZtdsZis_timedeltar   r  r  r   r   r    test_check_delta  s$   zCapiTest.test_check_deltac           	   
   C   s  G dd dt }t  }| }ttdd}tj}| || | || | || | ||d | ||d | ||d t t ddt	dddt
dddg}|D ]&}d	D ]!}| j||d
 | ||| W d    q]1 syw   Y  q]qYd S )Nc                   @   r{  )z2CapiTest.test_check_tzinfo.<locals>.TZInfoSubclassNr|  r   r   r   r    TZInfoSubclass  r~  r  r   r   Tr"   r  r  r  r  )r   r   r   r  Zdatetime_check_tzinfor}   r   r   r  r   r   r   )	r+   r  r  Ztzisr   Z	is_tzinfor   r  r  r   r   r    test_check_tzinfo  s*   zCapiTest.test_check_tzinfoc              	   C   h   t ddd}dD ])}| j|d t||j|j|j}| || W d    q1 s,w   Y  qd S )Nr  r  r   FTmacro)r   r   r  Zget_date_fromdater  r  rf  r*   r+   exp_dater  
c_api_dater   r   r    test_date_from_date*     zCapiTest.test_date_from_datec                 C   s   t ddddddd}dD ]1}| j|d	! t||j|j|j|j|j|j	|j
}| || W d    q1 s8w   Y  qd S )
Nr  r  r   r  r   r  r  r  r  )r   r   r  Zget_datetime_fromdateandtimer  r  rf  r  r  r  r  r*   r  r   r   r    test_datetime_from_dateandtime7  s    
z'CapiTest.test_datetime_from_dateandtimec                 C   s   t ddddddd}dD ]A}d	D ]<}| j||d
+ t||j|j|j|j|j|j	|j
|j	}| || | |j|j W d    q1 sGw   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  rf  r  r  r  r  r  r*   )r+   r  r  r  r  r   r   r    %test_datetime_from_dateandtimeandfoldH  s(   z.CapiTest.test_datetime_from_dateandtimeandfoldc              	   C   sn   t dddd}dD ]+}| j|d t||j|j|j|j}| || W d    q	1 s/w   Y  q	d S )Nr  r   r  r  r  r  )	r   r   r  Zget_time_fromtimer  r  r  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 ];}dD ]6}| j||d% t||j|j|j|j|j}| 	|| | 	|j|j W d    q1 s>w   Y  qq	d S )Nr  r   r  r  r  r  r  )
r   r   r  Zget_time_fromtimeandfoldr  r  r  r  r  r*   )r+   r  r  r  r  r   r   r    test_time_from_timeandfoldj  s"   z#CapiTest.test_time_from_timeandfoldc              	   C   r  )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{  r   zCapiTest.test_delta_from_dsuc              	   C   sn   t ddd }dD ]*}| j|d tt||}| |tddd W d    q
1 s/w   Y  q
d S )N  rG   r   r  r  )r   r  r   r  Zget_date_fromtimestamprT   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 ]=}d
D ]8}| j||d' |\}}}t|d|i}t| }	||	|||}
| ||
 W d    q!1 sTw   Y  q!qd S )N)r
  rG   r   NF)r  NTr  r"   r   T)r
  rG   r   r  r  NF)r  NTr  r  )caser  r   )	r   r   r  Zget_datetime_fromtimestampr   r   rT   r  r*   )r+   r  r  r  r  Zdtupr   ZusetzZdt_origr  r  r   r   r    test_datetime_from_timestamp  s&   	
z%CapiTest.test_datetime_from_timestampN)r9   rL   rM   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  !  s,    		r  c                 C   s   | t  |S r[   )ZaddTestr  )loaderZstandard_testspatternr   r   r    
load_tests  s   r  __main__)lr   r  r  r  r   rG  r7   r  r   rm   rh  r  rm  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   _loadsrS  r  r  r   rP  r  ri  r-  ZTestCaser'   rN   rh   rl   rp   r   r   r   r  r  r  r  r  ro  rq  rr  r  r  r  r  r   r   r   r*  r  r  r	  r   r   r!  r"  r,  r-  r#  r<  rJ  rO  rP  rQ  rR  rS  rT  r`  r  r  r  r  Z	TestSuiter  r  r  r  r9   mainr   r   r   r    <module>   s    ,8_ A3    =!      c        ]    "        <


*  M"32  
 gk   

