Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/datetimetester.cpython-310.opt-1.pyc

o

0�i���@s�dZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
m
Z
ddlmZmZmZmZmZmZmZmZmZddlmZddlmZmZmZmZddlZ ddlm!Z!m"Z"ddlm#Z#dd	lm$Z$dd
lm%Z%ddlm&Z&ddlm'Z'mZddl%Z(ddl)Z)ddl*Z*ej+ej,hZ-d
d�e.ej/d�D�Z0dddigdfZ1e2d�Z3e2d�Z4Gdd�dej5�Z6Gdd�de$�Z7Gdd�de7�Z8Gdd�de$�Z9Gdd�dej5�Z:Gd d!�d!ej5�Z;Gd"d#�d#�Z<Gd$d%�d%e<ej5�Z=Gd&d'�d'ej5�Z>Gd(d)�d)e'�Z?Gd*d+�d+e<ej5�Z@Gd,d-�d-e�ZAGd.d/�d/e@�ZBGd0d1�d1eB�ZCGd2d3�d3e%�ZDGd4d5�d5e<ej5�ZEGd6d7�d7�ZFGd8d9�d9eEeFej5�ZGGd:d;�d;eBeFej5�ZHd<d=�ZIe#d�ZJe#dd>�ZKe#dd?�ZLe#dd@�ZMeddAddB�ZNedddCd�ZOGdDdE�dEe$�ZPePdFdGdHdI�ZQePdJdKdLdM�ZRePdNdOdPdQ�ZSePdRdSdTdU�ZTe7ddVd�ZUe7dWdXd�ZVGdYdZ�dZej5�ZWGd[d\�d\ej5�ZXGd]d^�d^e$�ZYGd_d`�d`eY�ZZeZdFdadHdI�Z[eZdJdbdLdM�Z\eZdNdcdPdQ�Z]eZdRdddTdU�Z^Gdedf�dfe$�Z_Gdgdh�dhej5�Z`e#dd�Zadidj�ZbGdkdl�dle$�ZcGdmdn�dnej5�ZdGdodp�dpeje�ZfGdqdr�dred�ZgGdsdt�dtej5�Zhdudv�Ziejdwk�rGe�k�dSdS)xzUTest date/time type.

See https://www.zope.dev/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�datetimecCsg|]}tt|f�qS�)�pickle)�.0�protorr�:/opt/alt/python310/lib64/python3.10/test/datetimetester.py�
<listcomp>*s�r!��
g@A@�abcr�inf�nanc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
TestModulecCs$t}|�|jd�|�|jd�dS)Nr"�')�datetime_module�assertEqualrr)�selfrrrr �test_constants=szTestModule.test_constantscCs$tt�}tjD]}|�||�qdS)z2Test that __all__ only points to valid attributes.N)�dirr)�__all__�assertIn)r+Z	all_attrs�attrrrr �test_allBs
�zTestModule.test_allcCsTd|jjvr|�d�t}tdd�t|�D��}tgd��}|�||tg��dS)NZ_Purez"Only run for Fast C implementationcss(�|]}|�d�s|�d�s|VqdS)�__N)�
startswith�endswith)r�namerrr �	<genexpr>Ms���z/TestModule.test_name_cleanup.<locals>.<genexpr>)
rrrrZ
datetime_CAPIrrrr�sys)�	__class__�__name__�skipTestr)�setr-r*)r+r�namesZallowedrrr �test_name_cleanupHs
zTestModule.test_name_cleanupcCsd|jjvr|�d�tj}|�|dd�d�|�|dd�d�|�|dd�d	�|�|d
d�d�|�|dd�d�|�|d
d�d	�|�|dd�d	�|�|dd�d�|�|dd
�d�|�|dd
�d	�|�|dd�d	�|�|dd�d�|�|dd
�d�|�|dd
�d	�dS)N�_Fastz'Only run for Pure Python implementation����������������r#��������)r8r9r:r)Z_divide_and_roundr*)r+Zdarrrr �test_divide_and_roundTs"
z TestModule.test_divide_and_roundN)r9�
__module__�__qualname__r,r1r=rKrrrr r';s
r'c@s6eZdZd
dd�Zdd�Zdd�Zdd	�Zd
d�ZdS)�FixedOffset�*cCs>t|t�r
t|d�}t|t�rt|d�}||_||_||_dS�N��minutes)�
isinstance�intr�_FixedOffset__offset�_FixedOffset__name�_FixedOffset__dstoffset�r+�offsetr5Z	dstoffsetrrr �__init__us




zFixedOffset.__init__cCs
|j��S�N)rV�lower�r+rrr �__repr__}�
zFixedOffset.__repr__cC�|jSr[)rU�r+�dtrrr �	utcoffset�zFixedOffset.utcoffsetcCr`r[)rVrarrr �tzname�rdzFixedOffset.tznamecCr`r[)rWrarrr �dst�rdzFixedOffset.dstN�rO)r9rLrMrZr^rcrerfrrrr rNss
rNc@seZdZddd�Zdd�ZdS)�PicklableFixedOffsetNcCst�||||�dSr[)rNrZrXrrr rZ�szPicklableFixedOffset.__init__cCr`r[)�__dict__r]rrr �__getstate__�rdz!PicklableFixedOffset.__getstate__)NNN)r9rLrMrZrjrrrr rh�s
rhc@�eZdZdd�ZdS)�_TZInfocCst��Sr[)�random)r+r)rrr rc�sz_TZInfo.utcoffsetN�r9rLrMrcrrrr rl��rlc@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�
TestTZInfoc	CsTt�}tddddddd|�}|�t��
|��Wd�dS1s#wYdS)N��rD��� rAr)rlr�assertRaises�	TypeErrorrc)r+Ztz1�dt1rrr �test_refcnt_crash_bug_22044�s

"�z&TestTZInfo.test_refcnt_crash_bug_22044cCs@t�}tj}|�t|j|�|�t|j|�|�t|j|�dSr[)rr�maxru�NotImplementedErrorrercrf)r+Zuselessrbrrr �test_non_abstractness�s
z TestTZInfo.test_non_abstractnesscCsrGdd�dt�}|�t|t��|dd�}|�|t�t��}|�t|j|�|�t|j	|�|�t|j
|�dS)Nc@rk)z9TestTZInfo.test_subclass_must_override.<locals>.NotEnoughcSs||_||_dSr[)Z_NotEnough__offsetZ_NotEnough__name)r+rYr5rrr rZ�s
zBTestTZInfo.test_subclass_must_override.<locals>.NotEnough.__init__N)r9rLrMrZrrrr �	NotEnough�ror|rAZNotByALongShot)r�
assertTrue�
issubclass�assertIsInstancer�nowrurzrercrf)r+r|rrbrrr �test_subclass_must_override�s
z&TestTZInfo.test_subclass_must_overridecCsntdd�}|�|t�t��dfD]#}|�|�|�tdd��|�|�|�d�|�|�	|�tdd��qdS)NrAZThreerQrO)
rNrrrr�r*rcrrerf)r+Zforbrrr �test_normal�s
�zTestTZInfo.test_normalcCsTt�t�}|�t|�t�tD]\}}}|�||�}|�|�}|�t|�t�qdSr[)r�__new__�assertIs�type�pickle_choices�dumps�loads)r+�orig�pickler�	unpicklerr�green�derivedrrr �test_pickling_base�s

�zTestTZInfo.test_pickling_basecCs�tdd�}t|dfft|fft|dfffD]`\}}||�}|�d�}|�|t�|�t|�|�|�|�	d�|�|�|�d�|�t
D]0\}}}|�||�}	|�|	�}
|�|
t�|�t|
�|�|�|
�	d�|�|�|
�d�|�qDqdS)N����rQ�cookie�EST)
rrhrrerrr�r�r*rcr�r�r�)r+rYZotype�argsr�Zonamer�r�rr�r�rrr �test_pickling_subclass�s(


�

��z!TestTZInfo.test_pickling_subclasscs`tdd���G��fdd�dt�}|�}tddddd|d	�}|�|�}|�||��|�dS)
Nr"��hourscs0eZdZdZ�fdd�Z�fdd�Zdd�ZdS)	z0TestTZInfo.test_issue23600.<locals>.UKSummerTimez~Simple time zone which pretends to always be in summer time, since
                that's what shows the failure.
            c��Sr[rra)�	DSTOFFSETrr rc��z:TestTZInfo.test_issue23600.<locals>.UKSummerTime.utcoffsetcr�r[rra)�DSTDIFFrr rf�r�z4TestTZInfo.test_issue23600.<locals>.UKSummerTime.dstcS�dS)N�UKSummerTimerrarrr re�r�z7TestTZInfo.test_issue23600.<locals>.UKSummerTime.tznameN)r9rLrM�__doc__rcrfrer�r�r�rr r��s
r�rqrG��r)rrr�fromutcr*rc)r+r��tz�u�trr�r �test_issue23600�s
zTestTZInfo.test_issue23600N)
r9rLrMrxr{r�r�r�r�r�rrrr rp�s
rpc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�TestTimeZonecCs8ttdd�d�|_ttdd�d�|_tddd�|_dS)N�#@r��ACDTrBr���r")rrr�r�r�DTr]rrr �setUp�szTestTimeZone.setUpcCs8|j|jtjtjtjfD]
}|�t|�|�d��qdSr[)	r�r�r�utc�minryr*�strre�r+r�rrr �test_str�s
��zTestTimeZone.test_strcCs>t}|j|jtjtjtjfD]}t|�}|�|t	|��qdSr[)
r)r�r�rr�r�ry�reprr*�eval)r+rr�Ztzreprrr �	test_repr�s��zTestTimeZone.test_reprcCsNtddd�}|�tj�d�t�|�tj�d�|�|�tj�d�|�dS)N��;�r�rR)rr*rr�rc�ZEROr�ry)r+�limitrrr �test_class_membersszTestTimeZone.test_class_memberscCs�|�tjttd���|�tjttd�d��|�tjttd�d��tdd�tdd�fD]}t|�}|�|�d�tdd�d�q-tdd�td�fD]}|�t	t|�|�t	t|�qK|�t
��td�Wd�n1sqwY|�t
��td�Wd�n1s�wY|�t
��
ttd�Wd�n1s�wY|�t
��
ttd�Wd�n1s�wY|�t
��ttdd	�Wd�dS1s�wYdS)
Nr�UTCr"��microseconds��secondsrQrO�ABC�extra)r�rr�r�assertIsNotr*�assertNotEqualrcru�
ValueErrorrvr�)r+Z	subminuter�Zinvalidrrr �test_constructors2244<zTestTimeZone.test_constructorcCs |�tjt�|�|jt�dSr[)rrr�rr�r]rrr �test_inheritanceszTestTimeZone.test_inheritancecCs�|j}dD]}|t}|�|t|��|��|�|t|��|��q|�t��|j�d�Wd�n1s:wY|�t��|j�d�Wd�dS1sVwYdS)N)rg�?r��rB)r��HOURr*rrcrurvr�)r+�dummy�hrYrrr �test_utcoffset!s6<zTestTimeZone.test_utcoffsetcCs�|�tj�|j��|�t��|j�d�Wd�n1s wY|�t��|j�d�Wd�dS1s<wYdS)Nr�rB)�assertIsNonerr�rfr�rurvr�r]rrr �test_dst,s6<zTestTimeZone.test_dstcCs�|�dtj�d��|�dtt��d��|�dtdt��d��|�dtdt��d��|�dttdd���d��|�d	tdtd	��d��|�d
ttd
��d��|�dttdd
���d��|�dttdd
���d��|�dttdd
d���d��|�dttdd
d���d��|�t��|j	�d�Wd�n1s�wY|�t��|j	�d�Wd�dS1s�wYdS)Nr�z	UTC-05:00���z	UTC+09:30r�z	UTC-00:01���rQZXYZ��zUTC+01:06:40r�zUTC-01:06:40zUTC+01:06:40.000001r"zUTC-01:06:40.000001r�rB)
r*rr�rer�r�rrurvr�r]rrr �test_tzname2s&���6<zTestTimeZone.test_tznamecCs�|�t��tj�|j�Wd�n1swY|�t��tj�d�Wd�n1s2wY|j|jt	fD]%}|jj
|d�}|�|�}|�|||�|��|�||jj
tjd��q>dS)Nznot datetimer)
rur�rr�r�r�rvr�r��Eastern�replacer*rc)r+r�Zutctime�localrrr �test_fromutcHs��
��zTestTimeZone.test_fromutccCsR|�tt�tt��|�tt�tt��|�tdt�tdtd��|�t��tt�tt�kWd�n1s;wY|�tt�tt�h�|�tt�dk�|�	tt�dk�tt�}|�|t
k�|�	|t
k�|�|tk�|�	|tk�|�|tk�|�	|tk�|�	|tk�|�|tk�|�	|tk�|�|tk�dS)Nr�r�)
r�rr�r�r*rurvr/r}�assertFalserrrr�rrr �test_comparisonTs$:zTestTimeZone.test_comparisoncCs�tddd�}tjtjtjfD]/}|�|�|�|j|d����|�|�|�|j|d����|�|�	|�|j|d��	��qdS)Nr"r)
rrr�ryr�r*rer�rcrf�r+r�r�rrr �test_aware_datetimeis����z TestTimeZone.test_aware_datetimecCs�|j|jtjtjfD]}tD]\}}}|�|�||��}|�||�qq
tj	}tD]\}}}|�|�||��}|�
||�q)dSr[)r�r�rr�ryr�r�r�r*r�r�)r+r�r�r�r�tz_copyrrr �test_picklets��zTestTimeZone.test_picklecCsP|j|jtjtjfD]
}t�|�}|�||�q
tj}t�|�}|�||�dSr[)	r�r�rr�ry�copyr*r�r��r+r�r�rrr �	test_copy~�

zTestTimeZone.test_copycCsP|j|jtjtjfD]
}t�|�}|�||�q
tj}t�|�}|�	||�dSr[)
r�r�rr�ryr�Zdeepcopyr*r�r�r�rrr �
test_deepcopy�r�zTestTimeZone.test_deepcopyc
Cstddd�tdddd�tddddd�g}|�dd�|D��|D]}|jd	|d
��t|�Wd�n1s8wYq tdd�tdd
d�g}|�dd�|D��|D]2}|jd|d
��!|�t��t|�Wd�n1sswYWd�n1s�wYqUdS)Nr�r�r��r�rRr��?B�r�rRr�r�cS�g|]}|�qSrr�r�deltarrr r!��z7TestTimeZone.test_offset_boundaries.<locals>.<listcomp>Zgood)Z	test_typer��r�r")r�r�cSr�rrr�rrr r!�r�Zbad)r�extend�subTestrrur�)r+Ztime_deltasr�Zbad_time_deltasrrr �test_offset_boundaries�s.
�
��
�
�����z#TestTimeZone.test_offset_boundariescCs,|�tjt��|�ttdd��t��dS)Nr"r�)r�rr�rrr]rrr �test_comparison_with_tzinfo�sz(TestTimeZone.test_comparison_with_tzinfoN)r9rLrMr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr r��s$
r�c@�eZdZdd�Zdd�ZdS)�HarmlessMixedComparisoncCs�|�ddd�}|�|dk�|�|dk�|�d|k�|�d|k�|�|ddg|g�|�g|ddgg�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�|�|tk�dS)Nr"r�)�theclassr�r}r/rrr)r+�merrr �test_harmless_mixed_comparison�s"z6HarmlessMixedComparison.test_harmless_mixed_comparisoncs�|�ddd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fdd��|�t�fd	d��|�t�fd
d��dS)Nr"c��dkS�Nrrr�r�rr �<lambda>��zGHarmlessMixedComparison.test_harmful_mixed_comparison.<locals>.<lambda>cs�dkSr�rrr�rr r��r�cs�dkSr�rrr�rr r��r�cs�dkSr�rrr�rr r��r�c�d�kSr�rrr�rr r��r�csd�kSr�rrr�rr r��r�csd�kSr�rrr�rr r��r�csd�kSr�rrr�rr r��r�)r�rurvr]rr�r �test_harmful_mixed_comparison�sz5HarmlessMixedComparison.test_harmful_mixed_comparisonN)r9rLrMr�r�rrrr r��sr�c@s�eZdZeZdd�Zdd�Zdd�Zej	dd��Z
d	d
�Zdd�Zd
d�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd�Zej	dd ��Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Z d5d6�Z!d7S)8�
TestTimeDeltacCsv|j}t}||�|dddddddd��||d�|dd��||dd�|dd��||ddd�|dd��||dd�|dd��||dd�|d	d
��||dd
�|dd��||dd�|dd��||dd�|d
d��||dd�|d
d��||dd�|dd��||dd�|dd
��||dd
�|dd��||dd�|dd��||dd�|dd��||dd�|dd��dS)Nr)�weeks�daysr�rRr��millisecondsr�r"�r�r�r��r�rDr�r��<rQ���r�g�$I�$I�?gUUUUUU�?g�?g����MbP?)r*r)r+r�tdrrr r��s(�zTestTimeDelta.test_constructorcCsb|j}t}|d�}|dd�}|ddd�}|||||ddd��||||dd��||�|�|dd��|||d��||
|d��|||dd��|||dd	d
��|t|�|�|t|�|�||dd�|�||ddd�|�||d
|d��||d
d
|�||d
d
|�||d
|dd��|d
||dd��||d
|dd��||d
|ddd��|d
||ddd��||d
|ddd��||d|�||d||�||d||�||d|dd�||dd|d�||d|dd��|d||dd��||d|d��||d
|dd��||d|ddd��||d
|dd��||d|ddd��||d|d��||d|dd��||d|d��||d
|dd��||d|ddd��||d
|dd��||d|ddd��|dd�}|d|dd|�|d|dd|�|dd|d|�|dd|d|�|d|dd|�|d |dd|�||dd!�d"|d#d��||dd!�d$|d%d��|d|dd|�|d|dd|�|d|d&d|�|d |d&d|�|d|dd|�|d|dd|�|d|d'd|�|d|d'd|�td(d
�D]}|||d|t|d���qQtd(d
�D]}|||d|t|d���qi||dd!�d)|d%d��||d*d	d+�|d*d	d,�|ddd��||d*dd�|d*dd�|ddd��dS)-NrDrr�rrIiDQrFr��Q�X>�Qi��r#�FiX�'rC�r�r"i@�i��6i@���?��xr�rArErBr@r�r�翶~�Ϛ�?�@�g�6+1��?i�S	g@g�r?g`""K?-�?�ɚ;r��>B)r*r�__rsub__�abs�range�round)r+rr�a�b�c�us�irrr �test_computationss�

""
�
�zTestTimeDelta.test_computationscs�td��dD].�|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��qd�|�t��fd	d��|�t��fd
d��|�t��fdd��|�t�fdd��|�t�fd
d��dS)NrO�r"��?c���Sr[rr�rrrr r�Yr�z<TestTimeDelta.test_disallowed_computations.<locals>.<lambda>c���Sr[rrrrr r�Zr�c���Sr[rrrrr r�[r�c���Sr[rrrrr r�\r�rc���Sr[rr�r�zerorr r�ar�c���Sr[rrr"rr r�br�cs��Sr[rrr"rr r�cr�c��dS)N�rr�rrr r�dr�cr%)Nr�rrr'rr r�er�)rrurv�ZeroDivisionErrorr]r)rrr#r �test_disallowed_computationsTsz*TestTimeDelta.test_disallowed_computationscCs,td�}|�t|jt�|�t|jt�dS)NrO)rrur��__mul__�NAN�__truediv__)r+rrrr �test_disallowed_specialgsz%TestTimeDelta.test_disallowed_specialcCsDd\}}}t|||�}|�|j|�|�|j|�|�|j|�dS)N)r"rD��rr*r�r�r�)r+r�r�rrrrr �test_basic_attributesms

z#TestTimeDelta.test_basic_attributescCsptdd�}|�|��d�dD]}t|d�}|�|��|�qdD]}t|d�}|�|��|tdd��q!dS)	N�mr�g8~A)g˟$�@g˟$��rrg��.Ar�)r�rCi����r�r")rr*�
total_seconds)r+rr2Zmsrrr �test_total_secondsts


�z TestTimeDelta.test_total_secondscCs.tddddddd�}tdd	�}|�||�dS)
N�drF�8���r@r�g��A�r�r�r�rRr�r�r"r�)rr*�r+�t1�t2rrr �test_carries�s�
zTestTimeDelta.test_carriescCs�tddddddd�}t�}|�t|�t|��|tdd	�7}|td
d�7}|�||�|�t|�t|��|di}d
||<|�t|�d�|�||d
�dS)Nr4rFr5r@r�iz
r6rDr��1r�r"rE)rr*�hash�len)r+r8r9�drrr �test_hash_equality�s"�z TestTimeDelta.test_hash_equalitycCsBd}t|�}tD]\}}}|�||�}|�|�}|�||�qdS)N)r��"�8)rr�r�r�r*�r+r�r�r�r�rr�r�rrr �
test_pickling�s
�zTestTimeDelta.test_picklingcs"tddd��tddd�}|��|�|��|k�|��|k�|��|k�|��|k�|��|k�dD]Z}t|�}|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�q7tD]z�|���kd�|���kd�|���kd�|���kd�|�t��fdd��|�t��fd	d��|�t��fd
d��|�t��fdd��|�t��fdd��|�t��fd
d��|�t��fdd��|�t��fdd��q�dS)NrErArG�)rArArA)rErGrG)rErArBFTc���kSr[rr�Zbadargr8rr r��r�z,TestTimeDelta.test_compare.<locals>.<lambda>c���kSr[rrrFrr r��r�c���kSr[rrrFrr r��r�c���kSr[rrrFrr r��r�c���kSr[rrrFrr r��r�c���kSr[rrrFrr r��r�c���kSr[rrrFrr r��r�c���kSr[rrrFrr r��r�)rr*r}r��
OTHERSTUFFrurv�r+r9r�rrFr �test_compare�sH�zTestTimeDelta.test_comparec	Cs�t}|j}|t|d��d�|t|d��d�|t|d��d�|t|d��d�|t|d	d
dd��d
�|t|dddd��d�|t|ddd	dd��d�|t|dd��d�|t|dd��d�|t|dddddd��d�dS)Nr"z1 day, 0:00:00r�z-1 day, 0:00:00rEz2 days, 0:00:00rCz-2 days, 0:00:00r��:r�r�z12:58:59rArGz2:03:04i��r�r@)r�r�rRr�z-210 days, 23:12:34rz0:00:00.001000r�z0:00:00.000003rr��r�r�rRr�r�z999999999 days, 23:59:59.999999)rr*r�)r+rrrrr r��s$���zTestTimeDelta.test_strcCs�d|jj}|�t|�d��d|�|�t|�dd��d|�|�t|�ddd��d	|�|�t|jd
d��d|�|�t|���d
|�|�t|jdd��d|�|�t|jddd��d|�|�t|jddd��d|�dS)N�	datetime.r"z
%s(days=1)r#rEz%s(days=10, seconds=2)r?�z,%s(days=-10, seconds=2, microseconds=400000)r�r�z%s(seconds=60)z%s(0)r4r�z%s(microseconds=100))r�r�z%s(days=1, microseconds=100))r�r�z%s(seconds=1, microseconds=100)�r�r9r*r��r+r5rrr r��s2��������zTestTimeDelta.test_reprcCs�tdddddd�tdd�tddd	�tdd
dd�fD]-}t|�}|�|�d
��|dd�}t|�}|�||�t|j|j|j�}|�||�qdS)Nrr�r�r�rR�6e�r�r"�r�r�rErA�r�r�r�rS�	)	rr�r}r3r�r*r�r�r�)r+r�sZtd2rrr �test_roundtrip�s�
��zTestTimeDelta.test_roundtripcCs~|�tjt�|�tjt�|�tjt�|�tjtjk�|�tjtd��|�tjtddd��|�tjtddd��dS)NrWrrg~�.Arr")rrr�ry�
resolutionr}r*r]rrr �test_resolution_infosz"TestTimeDelta.test_resolution_infocCs�tj}tj|}||8}|�t|j|�|�t|j|�tj|}||7}|�t|j|�|�t|j|�|�tdd��td�}|�t|jd�|�t|jd�|�t|j	d�|�t|j	d�|�t|j	d�dS)	NcSstjSr[)rryrrrr r�r�z-TestTimeDelta.test_overflow.<locals>.<lambda>r"�ʚ;ge��Ag#B����;g�����|�=gr��{�>)
rr]r�ru�
OverflowError�__sub__�__add__ryr*r,)r+�tinyr�dayrrr �
test_overflows 

zTestTimeDelta.test_overflowcCs.td�}|�t|jt�|�t|jt�dS�Nr")rrur`r*�INF)r+rdrrr �_test_overflow_special'sz$TestTimeDelta._test_overflow_specialcCs�t}|j}||dd�|d��||dd�|d��||dd�|dd��||dd�|dd��||dd�|d	d��||d
d�|dd��||dd�|d
d��||dd�|dd��||dd�|dd��||dd�|dd��||dd�|dd��||dd�|dd��d}|d}||d|d�|d��||d|d�|d��||d|d|d�|d	d��||d|d�|d��||d|d�|d��||d|d|d�|dd��||d d�d |d!d��||d d�|jd |j|j�dS)"Ng-C��6:?rrg-C��6:�g����Mb@?r�g����Mb@�ga2U0*�C?r"ga2U0*�C�r�g�~j�t�X?rEg�~j�t�X�rCg���Ơ>r�g���Ơ���?����i|���t��Ar�g�������?r�g�������?r��r�r�g������ٿg������ɿr	r)rr*r])r+rrZus_per_hourZ
us_per_dayrrr �test_microsecond_rounding-s0  &z'TestTimeDelta.test_microsecond_roundingcCs&tdd�}|�|j|j|jfd�dS)Nr�r�)r�rr�r/)r+rrrr �test_massive_normalizationNs
�z(TestTimeDelta.test_massive_normalizationcCsR|�td��|�tdd��|�tddd��|�tdd��|�td��dS)Nr"rr�)r}rr�r]rrr �	test_boolSs
zTestTimeDelta.test_boolcs�G�fdd�dt���dd�}|�t|���|�|��d��ddd�}|�t|���|�|��d	�||}|�t|�t���|�}|�t|���|�|j|j�|�|j|j�|�|j|j�|�t	|�t	|��|�|��d�dS)
Ncs$eZdZe�fdd��Zdd�ZdS)z0TestTimeDelta.test_subclass_timedelta.<locals>.Tcs�|j|j|j�Sr[rY)r��Trr �from_td]sz8TestTimeDelta.test_subclass_timedelta.<locals>.T.from_tdcSs&|jd|jd|jd}t|�S)Nr�g �@rl)r�r�r�r)r+�sumrrr �as_hoursas��z9TestTimeDelta.test_subclass_timedelta.<locals>.T.as_hoursN)r9rLrM�staticmethodrsrurrqrr rr\srrr"r�r�r�i��rXi��)
rr�r�r*rursr�r�r�r�)r+r8r9�t3�t4rrqr �test_subclass_timedeltaZs 

z%TestTimeDelta.test_subclass_timedeltac		Cs�Gdd�dt�}|ddd�}tdd�}ddd	�|ddd
�fddd	�|ddd
�fd
dd	�|ddd�fg}|D]+\}}}|�|��|||�}|�||�|�||�Wd�n1s[wYq5dS)Nc@�eZdZdS)z6TestTimeDelta.test_subclass_date.<locals>.DateSubclassN�r9rLrMrrrr �DateSubclassz�r|��r"rBr��addcS�||Sr[r�r>r�rrr r��r�z2TestTimeDelta.test_subclass_date.<locals>.<lambda>rI�raddcS�||Sr[rr�rrr r��r��subcS�||Sr[rr�rrr r��r�rG)rrr�r*r)	r+r|�d1r�testsr5�func�expected�actrrr �test_subclass_dateys
�
���z TestTimeDelta.test_subclass_datec		Cs�Gdd�dt�}|ddddd�}tddd�}d	d
d�|dddd
�fddd�|dddd
�fddd�|dddd�fg}|D]+\}}}|�|��|||�}|�||�|�||�Wd�n1sawYq;dS)Nc@rz)z>TestTimeDelta.test_subclass_datetime.<locals>.DateTimeSubclassNr{rrrr �DateTimeSubclass�r}r�r~r"rBr��)r�rRrcSr�r[rr�rrr r��r�z6TestTimeDelta.test_subclass_datetime.<locals>.<lambda>rI�
r�cSr�r[rr�rrr r��r�r�cSr�r[rr�rrr r��r�rG)rrr�r*r)	r+r�r�rr�r5r�r�r�rrr �test_subclass_datetime�s�
���z$TestTimeDelta.test_subclass_datetimecCs�tdddd�}tdd�}|�||d�|�||d�tdd	d
�}tdd�}|�||d�|�||d�td
�}|�tt||�|�tt||�dS)Nr"r��r�r�gó@i�rEr��rRr�rQg@r)rr*rur(r	r
)r+r��second�minute�zerotdrrr �
test_division�s

zTestTimeDelta.test_divisioncCs�tddd�}tdd�}||}|�|tdd��tddd�}||}|�|tdd��td�}|�tt||�|�tt|d	�dS�
NrEr�r�r"rQr�rCrr#)rr*rur(rrv)r+r�r��rr�rrr �test_remainder�s
zTestTimeDelta.test_remaindercCs�tddd�}tdd�}t||�\}}|�|d�|�|tdd��tddd�}t||�\}}|�|d�|�|tdd��td�}|�tt||�|�tt|d	�dSr�)r�divmodr*rur(rv)r+r�r��qr�r�rrr �test_divmod�s
zTestTimeDelta.test_divmodc	Cs�dd�}|�t��t�|dd>�Wd�n1swY|�t��t�|dd>�Wd�n1s;wYdD]:}|�t��t�||�Wd�n1s[wY|�t��t�||�Wd�n1swwYqBdS)NcsG�fdd�dt�}|�S)Nc�eZdZ�fdd�ZdS)zFTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloatcr�r[rr]��	bad_ratiorr �as_integer_ratio�r�zWTestTimeDelta.test_issue31293.<locals>.get_bad_float.<locals>.BadFloat.as_integer_ratioN)r9rLrMr�rr�rr �BadFloat��r�)�float)r�r�rr�r �
get_bad_float�sz4TestTimeDelta.test_issue31293.<locals>.get_bad_floatr"r)rrg�r"rErA)rurvrr�)r+r�r�rrr �test_issue31293�s ������zTestTimeDelta.test_issue31293csfG�fdd�dt�}G�fdd�d��G�fdd�dt��dD]��|j�d���z	t|d	�d
�Wn	ty:Ynwz	t|d	�d�Wn	tyMYnwz	t|d	�d�WnttfybYnwz
td	�|d	�WnttfyxYnwz
|d	�td	�Wn	ty�Ynwz
td	�|d	�Wn	ty�YnwWd�n1s�wYqdS)
Ncs<eZdZ�fdd�Z�fdd�Z�fdd�Z�fdd�Zd	S)
z-TestTimeDelta.test_issue31752.<locals>.BadIntc���Sr[r�r+�other��Prodrr r*�rdz5TestTimeDelta.test_issue31752.<locals>.BadInt.__mul__cr�r[rr�r�rr �__rmul__�rdz6TestTimeDelta.test_issue31752.<locals>.BadInt.__rmul__cr�r[rr�r�rr �__floordiv__�rdz:TestTimeDelta.test_issue31752.<locals>.BadInt.__floordiv__cr�r[rr�r�rr �
__rfloordiv__�rdz;TestTimeDelta.test_issue31752.<locals>.BadInt.__rfloordiv__N)r9rLrMr*r�r�r�rr�rr �BadInt�s
r�cs$eZdZ�fdd�Z�fdd�ZdS)z+TestTimeDelta.test_issue31752.<locals>.Prodcr�r[rr���Sumrr rb�rdz3TestTimeDelta.test_issue31752.<locals>.Prod.__add__cr�r[rr�r�rr �__radd__�rdz4TestTimeDelta.test_issue31752.<locals>.Prod.__radd__N)r9rLrMrbr�rr�rr r��sr�cr�)z*TestTimeDelta.test_issue31752.<locals>.Sumcr�r[rr���divmodresultrr �
__divmod__�r�z5TestTimeDelta.test_issue31752.<locals>.Sum.__divmod__N)r9rLrMr�rr�rr r��r�r�)Nr)rr"rE)rr�r�r"r�r�r�)rTr�rrvr�)r+r�r)r�r�r�r �test_issue31752�sN
����������zTestTimeDelta.test_issue31752N)"r9rLrMrr�r�rr)rZrequires_IEEE_754r-r0r3r:r?rCrPr�r�r\r^rerhrnrorpryr�r�r�r�r�r�r�rrrr r��s>S

(	
!r�c@rk)�TestDateOnlycCs�tddd�}tdddddd�}t|j�}|�|td��||}|�|||�||}|�|||�||}|�|||�|}t|j�}|�|td��||}|�|||�||}|�|||�||}|�|||�dS)	N��r"rErArGrBrRrC)rrr�r*)r+rbr�r��dt2rrr �test_delta_non_days_ignored!s*
�

z(TestDateOnly.test_delta_non_days_ignoredN)r9rLrMr�rrrr r�sr�c@�eZdZdZdS)�SubclassDater"N�r9rLrMZsub_varrrrr r�>�r�c@s`eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�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�TestDatecCs<|�ddd�}|�|jd�|�|jd�|�|jd�dS)N��rAr")r�r*�year�monthrdrarrr r0GszTestDate.test_basic_attributescCsz|�ddd�|j��fD].}t|�}|�|�d��|dd�}t|�}|�||�|�|j|j|j	�}|�||�qdS)Nr"rErArSrZ)
r��todayr�r}r3r�r*r�r�rd�r+rbr[r�rrr r\Ms��zTestDate.test_roundtripc
	Cs�dD]B\}}}}|�|||�}|�||���|j�|�}|�||�t|d�rD|�|jd�|�|jd�|�|jd�|�|jd�qt	t
tdd�D]>}|�|dd�}|��}|j�|�}|�||�|dkr�|j�|d�}|�|ddd�}|�||�|�|��|d�qMgd�}d	D]K\}}	|�|dd���}tt	dd
�|�D]5\}
}|
dkr�|	r�|d7}t	d|d�D]}|�||
|�}|�|��|�|�||j�|��|d7}q�q�q�dS)N))r"r"r"r")r"r�r.r1)rEr"r"�n)i�rsr�i��
�hourrr"rDr�r.)r.�r.r�r.r�r.r.r�r.r�r.))r�T)r�Fr�rE)
r�r*�	toordinal�fromordinal�hasattrr�r�r��microsecondrrr�zip)
r+�y�mr>�nZfromordr��d2ZdimZisleapr�Zmaxdayrdrrr �test_ordinal_conversions[sH
��
���z!TestDate.test_ordinal_conversionscs|jj�|��j�j�j����������}|��|�|�t	��fdd���t
dd�}|�|���d�|�||j��d��|jj�|��j�j�j����������}|��|�|�t	��fdd���t
dd�}|�|���d�|�||j��d��dS)Ncs���d�Srf�r�r�rZaordrr r���z0TestDate.test_extreme_ordinals.<locals>.<lambda>r"r�cs���d�Srfr�rr�rr r��r�)r�r�r�r�rdr�r�r*rur�rry)r+rrr�r �test_extreme_ordinals�s$

zTestDate.test_extreme_ordinalscCs6|�tdd�|�tdd�|�t|jtddd�|�t|jtddd�|�ddd�|�ddd�|�t|jddd�|�t|jddd�|�ddd�|�ddd�|�d	dd�|�t|jddd
�|�t|jddd�|�t|jddd�|�t|jd
dd�|�t|jddd�|�t|jddd�dS)Nr"r�r�rr�rE����`	r����4�lrt)r�rrrur�r]rrr �test_bad_constructor_arguments�s"z'TestDate.test_bad_constructor_argumentscCs�|�ddd�}|�ddd�}|�||�|�t|�t|��|di}d||<|�t|�d�|�||d�|�||d�|�ddd�}|�ddd�}|�||�|�t|�t|��|di}d||<|�t|�d�|�||d�|�||d�dS)Nr�r�r.r"rEr��r�r*r<r=�r+r>�eZdicrrr r?�s$zTestDate.test_hash_equalityc	s2|�ddd��|�ddd�}|�ddd�}�|}|�|jdttddd���|�|jd	�|�|jd	�td��td
�}|�ddd��|���|�ddd��|���|�ddd��|���|�ddd��|���|�ddd��|��||�ddd��|��||�ddd
��|��d||�ddd��|��d||�ddd��|��|�|�|������|��|�|�|������|���||�|������|���||�|������|�||���dD]/�|�t	��fdd��|�t	��fdd��|�t	��fdd��|�t	��fdd���q|�t	��fdd��|�t	��fdd��|�t	��fdd��|�t	��fdd��|�t	��fdd��|�t	�fdd��|�t	�fdd��|�t	�fdd��dS)Nr�r"r.�r�rE�ArGrrDrArZr��4��rcrr[rrrrr r��r�z,TestDate.test_computations.<locals>.<lambda>crr[rrrrr r��r�crr[rrrrr r��r�cr r[rrrrr r��r�cr r[rr�rrdrr r��r�c���Sr[rrr�rr r��r�c���Sr[rrr�rr r��r�cr!r[rrr�rr r��r�cr$r[rrr�rr r��r�c���Sr[rrr'rr r��r�c���Sr[rrr'rr r�r�c���Sr[rrr'rr r�r��
r�r*r�r=rr�r�rrurv)r+rr�diff�weekr�rrdrr r�sPzTestDate.test_computationscCs�|jj}|td�td�fD]8}|jj|}||8}|�t|j|�|�t|j|�|jj|}||7}|�t|j|�|�t|j|�q
dS)Nr"rE)	r�r]rr�rur`rarbry)r+rcr�rbrrr res�zTestDate.test_overflowcCshddl}d\}}}|�|||ddddddf	�}|j�|�}|�|j|�|�|j|�|�|j|�dS)Nr)i�rZr�r�)r�mktimer��
fromtimestampr*r�r�rd)r+rr�r�rd�tsr>rrr �test_fromtimestamps
zTestDate.test_fromtimestampcC� dD]}|�t|jj|�qdS�N)gZb���t�gZb���ti�rur`r�r��r+Zinsanerrr �test_insane_fromtimestamp�
��z"TestDate.test_insane_fromtimestampcCspddl}td�D]}|j��}|��}|j�|�}||krn|�d�q||kr6|j||tdd�d�dSdS)NrrAg�������?r	r�)r�)rrr�r�r��sleepZassertAlmostEqualr)r+rr�r�r�Z
todayagainrrr �
test_today&s

��zTestDate.test_todayc	Cs�td�D]B}|�|�ddd|���|�|�|�ddd|���|d�|�|�ddd|���|�|�|�ddd|���|d�qdS)NrDr�rArGr"r�rE)rr*r��weekdayZ
isoweekday)r+rrrr �test_weekdayCs"$�zTestDate.test_weekdayc	Csgd�}g}|D]*\}}|j|�}td�D]}|t|�}|dd�|d|f}|�||f�qq|D]J\}	}
|j|	dd��|�|	��|
�Wd�n1sSwY|j|	dd��|	��}|�|j|j|j	f|
�Wd�n1szwYq5dS)N)))r�r��)r�r�r"))r�r�r��r�r"r"))r�r"rB)r�rEr"))��r�rr)r�r�r"))r�r�r�)r��5r"))r�r"rG)r�r"r"rDrrE�tuple)r>Z
comparisonZfields)
r�rr�appendr�r*�isocalendarr�r�r�)r+Zweek_mondays�
test_casesZcal_dateZiso_dateZ	base_daterZnew_dateZnew_isor>Zexp_isor�rrr �test_isocalendarLs&	
�����zTestDate.test_isocalendarcCsF|�ddd�}t�|���}t�|�}|�t|�t�|�|d�dS)z�Test that the result of datetime.isocalendar() can be pickled.

        The result of a round trip should be a plain tuple.
        ��r")rr"rEN)r�rr�rr�r*r�r�)r+r>�p�resrrr �test_isocalendar_picklingjs

z"TestDate.test_isocalendar_picklingcCs�d}ttt|����}g}td�D]3}|�d|dd�}|�d|dd�}|�|��dd�|��dd��|��ddkrD|�|�q|�||�dS)	NaK
              4   32   60   88
              9   37   65   93
             15   43   71   99
             20   48   76
             26   54   82

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

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

            303  331  359  387
            308  336  364  392
            314  342  370  398
            320  348  376
            325  353  381
        �r�r�r.i@r"r�)	�sorted�maprT�splitrr�r*rr)r+ZISO_LONG_YEARS_TABLEZiso_long_years�Lrr>r�rrr �test_iso_long_yearsus$
�zTestDate.test_iso_long_yearscCs"|�ddd�}|�|��d�dS)NrErAz
0002-03-02)r�r*�	isoformat�r+r�rrr �test_isoformat��zTestDate.test_isoformatcCs"|�ddd�}|�|��d�dS)Nr�rArEzSat Mar  2 00:00:00 2002)r�r*�ctimerrrr �
test_ctime�rzTestDate.test_ctimec	Cs�|�ddd�}|�|�d�d�|�|�d�d�|�|�d�d�|�t|j�|�t|jdd	�|�t|jd
�|�|�d�d�|�|�d
�d�dD]}z|�|�WqNty`YqNwz|�d�Wn	tyqYnw|�d�dS)N��rArE�m:%m d:%d y:%yzm:03 d:02 y:05r�A�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx�oneZtworO�%mZ03�	'%z' '%Z'�'' '')z%e�%z%#u%y�%mz%f)r�r*�strftimerurvr��UnicodeEncodeError)r+r��frrr �
test_strftime�s*
��zTestDate.test_strftimecCsz|�ddd�}zt�d�Wnty|�d�Ynw|�|�d�t�d|����|�|�d�t�d|����dS)NrrArErz'time module does not support trailing %zm:%m d:%d y:%y %zm:03 d:02 y:05 %)r��_timerr�r:r*�	timetuplerrrr �test_strftime_trailing_percent�s��z'TestDate.test_strftime_trailing_percentcCs|�ddd�}|�|�d�t|��|�td��
|�d�Wd�n1s(wYGdd�d|j�}|ddd�}|�|�d�d�Gd	d
�d
|j�}|ddd�}|�|�d�t|��dD]#}|�|�|�|�|��|�|�|�|�|��|�|�|�d
�qadS)N��rZr#r��must be str, not int�{c@rk)zTestDate.test_format.<locals>.AcSr��N�Arr]rrr �__str__�r�z'TestDate.test_format.<locals>.A.__str__N�r9rLrMr'rrrr r&�ror&c@rk)zTestDate.test_format.<locals>.BcSr��N�Br�r+�format_specrrr r�r�z(TestDate.test_format.<locals>.B.strftimeN�r9rLrMrrrrr r*�ror*�rzm:%m d:%d y:%y H:%H M:%M S:%S�%z %Z�r�r*�
__format__r��assertRaisesRegexrvr�r+rbr&rr*r�fmtrrr �test_format�s ��zTestDate.test_formatcCs`t|jt�r	t}nt}|�|jj|�|�|jj|�|�|jjt�|�	|jj|jjk�dSr[)
r~r�rrrr�ryr]rr})r+Zexpected_classrrr r^�szTestDate.test_resolution_infocCsz|jj|jj}|jdd|jd|j}tdd|�}|�||�|�|jj||jj�|�|jj||jj�dS)Nr���@Br)r�ryr�r�r�r�rr*)r+�bigr�Z	justasbigrrr �test_extreme_timedeltaszTestDate.test_extreme_timedeltac
Csptd�D]�}|�ddd|�}|��}|�|ddd|ddd|d|df	�|�ddd|�}|��}|�|ddd|dddd|dd|df	�|�ddd|�}|��}|�|ddd|dddd|dd	|df	�|�|jd�|�|jd�|�|jd|�|�|jd�|�|jd�|�|j	d�|�|j
d|d�|�|jd	|�|�|jd�qdS)
NrDr�r"rErr�rtrA�=)
rr�r r*�tm_year�tm_mon�tm_mday�tm_hour�tm_min�tm_sec�tm_wday�tm_yday�tm_isdst)r+rr>r�rrr �test_timetuples(&..�zTestDate.test_timetuplecC�Zd}|j|�}tD]\}}}|�||�}|�|�}|�||�q	|�|��|�d��dS)N�rIrDr�rE�r�r�r�r�r*�
__reduce__�
__reduce_ex__rBrrr rC%�

zTestDate.test_picklingcC�Fgd�}d}|j|�}|D]}tD]}||dd�}|�||�qq
dS)N)s'cdatetime
date
(S'\x07\xdf\x0b\x1b'
tR.scdatetime
date
(U�tR.s�cdatetime
date
U��R.)��rs��latin1��encoding�r��pickle_loadsr*�r+r�r�r��datar�r�rrr �test_compat_unpickle.s
��zTestDate.test_compat_unpicklecs|�ddd��|�ddd�}|��|�|��|k�|��|k�|��|k�|��|k�|��|k�dD][}|j|�}|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�q9tD]o�|���kd�|���kd�|���kd�|���kd�|�t��fdd��|�t��fd	d��|�t��fd
d��|�t��fdd��|�t��fdd��|�t��fd
d��|�t��fdd��q�dS)NrErArGrDFTcrGr[rrrFrr r�Zr�z'TestDate.test_compare.<locals>.<lambda>crHr[rrrFrr r�[r�crIr[rrrFrr r�\r�crJr[rrrFrr r�]r�crKr[rrrFrr r�^r�crLr[rrrFrr r�_r�crMr[rrrFrr r�`r�)r�r*r}r�rNrurvrOrrFr rP;sF
�zTestDate.test_comparecs�|�ddd��|��dkd�|�d�kd�|��dkd�|�d�kd�|�t�fdd��|�t�fd	d��Gd
d�d�}|��|���kd�|���kd�|���kd�|���kd�|�t��fdd��|�t��fd
d��dS)Nr�rGrBr"FTcr�rfrr��ourrr r�lr�z-TestDate.test_mixed_compare.<locals>.<lambda>cr�rfrrrVrr r�mr�c@rz)z.TestDate.test_mixed_compare.<locals>.SomeClassNr{rrrr �	SomeClassqr}rXcrKr[rr�rWZtheirrr r�yr�crGr[rrrYrr r�zr�)r�r*rurv)r+rXrrYr �test_mixed_comparebszTestDate.test_mixed_comparecCs |�|jj�|�|jj�dSr[)r}r�r�ryr]rrr rp|szTestDate.test_boolcCsZdD](}|�|dd�}|�d�d|kr*|�|�d�d|�|�|�d�d|�qdS)N)r"r;r�cr4i�r�r"z%Yz%04d�%dz%4Y)r�rr*)r+r�r>rrr �test_strftime_y2k�s��zTestDate.test_strftime_y2kc
C�|j}gd�}||�}|�||���d}dD]&\}}|dd�}|||<||�}|jd
i||i��}	|�||	�|d7}q|ddd�}|jt|jdd	�dS)Nr�r)�r�rE�r�rA�rdrGr"r�rEr�r��r�r�r�r*r�rur��
r+�clsr��baserr5�newval�newargsr��gotrrr �test_replace�s
zTestDate.test_replacecCs:Gdd�d|j�}|ddd�}|�t|jdd��|�dS)Nc@rz)z4TestDate.test_subclass_replace.<locals>.DateSubclassNr{rrrr r|�r}r|��r"i�rc�r�r�r�r�)r+r|rbrrr �test_subclass_replace�szTestDate.test_subclass_replacec�G�fdd�d�j�}d}�j|�}||iddi��}��|j|���|jd���|jd���|��|�����|�d�|j|jd�dS)Nc�$eZdZdZ�fdd�Zdd�ZdS)z&TestDate.test_subclass_date.<locals>.CrOc�6|��}|�d�}�jj|g|�Ri|��}||_|S�Nr��r��popr�r�r��rfr�ZkwsZtempr��resultr]rr r���

z.TestDate.test_subclass_date.<locals>.C.__new__cS�||j|jSr[)r�r��r+�startrrr �newmeth��z.TestDate.test_subclass_date.<locals>.C.newmethN�r9rLrM�	theAnswerr�r{rr]rr �C��r�r�rGr
r�rDrOrF)	r�r*r8r~r�r�r{r�r��r+rr�rwr�rr]r r���
"zTestDate.test_subclass_datec

s�G�fdd�d�j�}d}d}d}||�}��||���|jd�t�|td����}d|ffd	|ffd
|ffg}|D]@\}}	||fD]7}
�jt	|
�|d��$t
|
|�}||	�}��||���||���|jd�Wd�n1svwYqDq<dS)Ncr�)zCTestDate.test_subclass_alternate_constructors.<locals>.DateSubclassc�$�jj|g|�Ri|��}d|_|S�NrD�r�r�r��rfr��kwargsrvr]rr r���zKTestDate.test_subclass_alternate_constructors.<locals>.DateSubclass.__new__N�r9rLrMr�rr]rr r|�r�r|r�i�(z
2003-04-14rDrr�r��
fromisoformat�Z
base_obj_type�constr_name)r�rr*r�r�combiner�	timestampr�r��getattr)
r+r|r�Zd_ord�d_isoformat�base_dr�rr��constr_args�base_obj�constrrbrr]r �$test_subclass_alternate_constructors�s4�
�
����z-TestDate.test_subclass_alternate_constructorscC�Rd}t|�}tD]\}}}|�||�}|�|�}|�||�|�t|t��qdS)NrF)r�r�r�r�r*r}rSrBrrr �test_pickling_subclass_date�s
�z$TestDate.test_pickling_subclass_datec	Cs�d}t|jt�s|dd�}dD]}|�t|j|dd�||dd��qt|jt�rP|�td��|�tdgt|��d�Wd�n1sKwYtdd	�D]}|�|dd�t|g�|dd��qUdS)
Ns
1995-03-25rG)�9��
��rErA�^bad tzinfo state arg$r"r�r�)	r~r�rrurvr2�bytesr=r)r+rgZ
month_byteZord_byterrr �test_backdoor_resistance�s	
��*�z!TestDate.test_backdoor_resistancec	Cspgd�}|D]/}|j|�}|��}|j|d��|j�|���}|�||�Wd�n1s0wYqdS)N)�r"r"r")rrEr
�r�r"r")r�rEr��r�rsr�)r�rGrA�i�rBr�)�dt_str�r�rr�r�r*)r+�
base_dates�dt_tuplerbr��dt_rtrrr �test_fromisoformats

���zTestDate.test_fromisoformatcCs<Gdd�d|j�}|ddd�}|�|���}|�||�dS)Nc@rz)z:TestDate.test_fromisoformat_subclass.<locals>.DateSubclassNr{rrrr r|)r}r|rqr�r
)r�r�rr)r+r|rbr�rrr �test_fromisoformat_subclass(sz$TestDate.test_fromisoformat_subclassc	CsLgd�}|D]}|�t��|j�|�Wd�n1swYqdS)N)r�r�z	009-03-04Z	123456789z
200a-12-04z
2009-1a-04z
2009-12-0az
2009-01-32z
2009-02-29Z20090228u2009�02�28)rur�r�r��r+Zbad_strs�bad_strrrr �test_fromisoformat_fails2s���z!TestDate.test_fromisoformat_failsc	C�Tddt�d�g}|D]}|�t��|j�|�Wd�n1s"wYq
dS)Ns
2009-03-01z
2009-03-01��io�StringIOrurvr�r��r+Z	bad_typesZbad_typerrr �"test_fromisoformat_fails_typeerrorFs���z+TestDate.test_fromisoformat_fails_typeerrorcCs�ddddddddd	d
ddd
tddftddfg}|D]-}|j|d��|j|�}|��}|jj|�}|�||�Wd�n1sAwYqdS)N)��rGrA)rr"rE)i�r�r�)r�r"rE)r�r�r.r�)r�r�r.)r�r"r")r�r�r.r�)r�r�r.r�)r(r�r.r"r�r.)�	datecomps)rrr�r�r�fromisocalendarr*)r+Zdatesr�Zdobj�isocalZd_roundtriprrr �test_fromisocalendarMs2�
���zTestDate.test_fromisocalendarc
Csxgd�}|D]3}|j|d��#|�t��|jj|�Wd�n1s%wYWd�n1s4wYqdS)N)
)rrr")rr�r")r�6r")rr"r)rr"r�)rr"�)rr�r")rr"r")rr"r")i��r"r")�r"r")rr�r")rr"r��r�)r�rur�r�r�)r+�isocalsr�rrr �!test_fromisocalendar_value_errorsks�����z*TestDate.test_fromisocalendar_value_errorsc
Cs�ttdd�g}g}d}td�D]}|D]}t|�}|||�||<|�t|��qq|D]3}|j|d��#|�t��|j	j
|�Wd�n1sKwYWd�n1sZwYq,dS)NcS�dSr[r)�xrrr r���z;TestDate.test_fromisocalendar_type_errors.<locals>.<lambda>)rr"r"rAr�)r�r�r�listrr�r�rurvr�r�)r+Z
err_txformersr�rgrZtxformerZerr_valr�rrr � test_fromisocalendar_type_errors�s*�	������z)TestDate.test_fromisocalendar_type_errorsN)/r9rLrMrr�r0r\r�r�r�r?rrer�r�r�r�rrr
rrrr!r5r^r9rDrCrUrPrZrpr^rkrnr�r�r�r�r�r�r�r�r�r�r�rrrr r�AsX/2		&'
	
'
,

r�c@r�)�SubclassDatetimer"Nr�rrrr r��r�r�c@s�eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Ze�d)�d*d+��Zd,d-�Ze�d.�d/d0��Zd1d2�Zd3d4�Zd5d6�Z d7d8�Z!d9d:�Z"e#�$e%j&d;kd<�d=d>��Z'e#�$e%j&d;kd<�d?d@��Z(dAdB�Z)dCdD�Z*dEdF�Z+dGdH�Z,dIdJ�Z-dKdL�Z.dMdN�Z/dOdP�Z0e�dQ�dRdS��Z1dTdU�Z2dVdW�Z3dXdY�Z4dZd[�Z5d\d]�Z6d^d_�Z7d`da�Z8dbdc�Z9ddde�Z:dfdg�Z;dhdi�Z<djdk�Z=dlS)m�TestDateTimecCsx|�ddddd�}|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�dS)Nr�rAr"r�r�	r�r*r�r�rdr�r�r�r�rarrr r0�sz"TestDateTime.test_basic_attributesc	Cs||�ddddddd�}|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�dS)Nr�rAr"r�r��@r�rarrr �test_basic_attributes_nonzero�sz*TestDateTime.test_basic_attributes_nonzeroc
Cs�|�ddddddd�|j��fD]6}t|�}|�|�d��|d	d�}t|�}|�||�|�|j|j|j	|j
|j|j|j
�}|�||�qdS)
Nr"rErArGrBrIrDrSrZ)r�r�r�r}r3r�r*r�r�rdr�r�r�r�r�rrr r\�s���zTestDateTime.test_roundtripc
Csb|�ddddddd�}|�|��d�|�|�d�d�|�|�d	�d
�|�|�d�d�|�|�d
�d�|�|jdd�d�|�|jdd�d�|�|jdd�d�|�|jdd�d�|�|jdd�d�|�|jdd�d�|�|jd	dd�d�|jt|jdd�|jt|jd
d�|�t|�d
�|jdddddddtjd�}|�|jdd�d�|�ddddddd�}|�|jdd�d �|�dddddd�}|�|jdd�d�|�|jdd�d�|�|jdd�d!�|�ddd�}|�|��d"�|�|�d�d"�|�|�d	�d#�|�t|�d#�tt	d$d%�d&�}|jddd|d�}|�|��d'�dS)(Nr"rErArGrBr$z0001-02-03T04:05:01.000123rr� z0001-02-03 04:05:01.000123�z0001-02-0304:05:01.000123r�u0001-02-03�04:05:01.000123r���timespecz
0001-02-03T04rRz0001-02-03T04:05r�z0001-02-03T04:05:01r�z0001-02-03T04:05:01.000r��auto)�sepr�z0001-02-03 04:05�foo�L@rz0001-02-03T04:05:01.999+00:00z0001-02-03T04:05:01.999z0001-02-03T04:05:01.000000z0002-03-02T00:00:00z0002-03-02 00:00:00�r�ZXXXz0002-03-02T00:00:00+00:00:16)
r�r*rrur�r�rr�rNrr�rrr r�sD�zTestDateTime.test_isoformatc	Cs�dtdd�fdtdd�fdtddd	�fd
tddd
d�fdtddddd�fg}ddtjfdttd��fg}|dd�|D�7}|�dddddd�}d}|D]$\}}|j|d�}||}|j|d��Wd�n1sjwYqKdS)N�05:00rBr��02:00rE�06:27rIrMr��12:32:30r�rtr�r��02:04:09.123456rGrZr
r��r�N�+00:00rcS�2g|]\}}dD]\}}||t||�f�qqS�))�-r�)�+r"r�rr�r�prefix�signrrr r!����z8TestDateTime.test_isoformat_timezone.<locals>.<listcomp>r�r"�%z2016-04-01T12:37:09r��tzi�rrr�r�r�r�)	r+�	tzoffsets�tzinfosZdt_base�exp_base�exp_tzr�rb�exprrr �test_isoformat_timezone�s*�	��,��z$TestDateTime.test_isoformat_timezonec	Cs&|�ddddddd�}|�|�d�t|��|�td	��
|�d�Wd�n1s,wYGd
d�d|j�}|ddddddd�}|�|�d�d�Gdd
�d
|j�}|ddddddd�}|�|�d�t|��dD]#}|�|�|�|�|��|�|�|�|�|��|�|�|�d
�qmdS)Nr"rZr#rGrBr"r$r�r#c@rk)z#TestDateTime.test_format.<locals>.AcSr�r%rr]rrr r'r�z+TestDateTime.test_format.<locals>.A.__str__Nr(rrrr r&ror&c@rk)z#TestDateTime.test_format.<locals>.BcSr�r)rr+rrr r#r�z,TestDateTime.test_format.<locals>.B.strftimeNr-rrrr r*"ror*r.r0r3rrr r5s ��zTestDateTime.test_formatc	Cshddl}|�ddddddd�}|�|��d�|�ddd	dddd�}|�|��|�|�|�����dS)
Nrr�rArE�rBr$zSat Mar  2 18:03:05 2002r�)rr�r*rr�r )r+rr�rrr �test_more_ctime0s
$zTestDateTime.test_more_ctimec	Cs�|�dddddd�}|�dddddd�}|�dddddd�}|�||�|�||k�|�tddd	d
d
d�}tdd�}||}|�|||�|�||k�dS)
Nr�rAr"rZrr#r�r.r�r�rr�)r�r*r}rr)r+rwr��dt3rrrr �test_tz_independent_comparing@s
z*TestDateTime.test_tz_independent_comparingcCsBGdd�dt�}|�ddddddd|dd��}|�t|jd�dS)	Nc@rk)zDTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfocSsGdd�dt�}|d�S)Nc@rk)zZTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStrcWr�r[r)r+r�rrr r�Wr�zbTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tzname.<locals>.MyStr.replaceN)r9rLrMr�rrrr �MyStrVror�r5)r�)r+rbr�rrr reUszKTestDateTime.test_strftime_with_bad_tzname_replace.<locals>.MyTzInfo.tznameN)r9rLrMrerrrr �MyTzInfoTror�rrArErr5�%Z)rNr�rurvr)r+r�r�rrr �%test_strftime_with_bad_tzname_replaceRsz2TestDateTime.test_strftime_with_bad_tzname_replacec
Cs�|�tdd�|�tdd�|�t|jtddd�|�t|jtddd�|�ddd�|�ddd�|�t|jddd�|�t|jddd�|�ddd�|�ddd�|�d	dd�|�t|jddd
�|�t|jddd�|�t|jddd�|�t|jd
dd�|�t|jddd�|�t|jddd�|�dddd�|�dddd�|�t|jdddd�|�t|jdddd�|�ddddd�|�ddddd�|�t|jddddd�|�t|jddddd�|�dddddd�|�dddddd�|�t|jdddddd�|�t|jdddddd�|�ddddddd�|�ddddddd�|�t|jddddddd�	|�t|jddddddd�	|jt|jddddd�|jt|jddddd�|�t|jddddddddd�dS)Nr"r�r�rr�rEr�r�r�r�r�r�r�rtr.r�r�r�r�r�r�r7��fold)r�rrrur�rvr]rrr r�]s^
�
�
�
�
�z+TestDateTime.test_bad_constructor_argumentscCs|�dddddd�}|�dddddd�}|�||�|�t|�t|��|di}d||<|�t|�d�|�||d�|�||d�|�d	ddd
dd�}|�d	ddd
dd�}|�||�|�t|�t|��|di}d||<|�t|�d�|�||d�|�||d�dS)Nr�r�r.r�r��r"rEr�rrBr�r�rrr r?�s$zTestDateTime.test_hash_equalitycs<|�ddd��|�ddd�}�|}|�|jdttddd���|�|jd�|�|jd�|�ddd	d
d��tddd�}tdd
�}td��td�}|��||�ddd	dd��|�|�|�ddd	dd��|��d||�ddddd��|��||�ddd	dd��|�|�|�ddd	dd��|��|�|�|��d||�ddddd��|���|�dddd
d��|���|�dddd
d��|��||�dddd
d��|��||�dd	dd
d��|��d||�dddd
d��|��d||�dddd
d��|��|�|�|������|��|�|�|��|�|�|��|�|�|������|��|�|�|��|�|�|���||�|������|���||�|���||�|���||�|������|���||�|���||�|��|�|||�ddddddd��|��|�||�|�||�|��|�|||�dd	ddddd��|��|�||�|�||�dD]/�|�t	��fdd��|�t	��fd d��|�t	��fd!d��|�t	��fd"d���q|�t	��fd#d��|�t	��fd$d��|�t	��fd%d��|�t	��fd&d��|�t	��fd'd��|�t	�fd(d��|�t	�fd)d��|�t	�fd*d��dS)+Nr�r"r.r�r�rGrrArEr�rIrr6rDr�r#r�r�rrrZr�r�r�r�r�rBr�rrcrr[rrrrr r��r�z0TestDateTime.test_computations.<locals>.<lambda>crr[rrrrr r��r�crr[rrrrr r��r�cr r[rrrrr r��r�cr r[rrr�rr r��r�cr�r[rrr�rr r��r�cr�r[rrr�rr r��r�cr!r[rrr�rr r��r�cr$r[rrr�rr r��r�cr�r[rrr'rr r��r�cr�r[rrr'rr r��r�cr�r[rrr'rr r��r�r�)r+rr�Zmillisecr�r�rr�r r�s�
" """����zTestDateTime.test_computationscCrE)N�rIrDr�r�r�r"�rErGrBrrr rC�rJzTestDateTime.test_picklingc	Csn|�ddddddd�}ttjd�D]"}t�||�}t�|�}|�|jd�|�|jd�|�|j	d�qdS)	Nr�rErDr��0r�i��r")
r�rr�HIGHEST_PROTOCOLr�r�r*r�r�rd)r+rrr[rrrr �test_more_pickling�s
�zTestDateTime.test_more_picklingcCr�)Nr�)r�r�r�r�r*r}rSrBrrr �test_pickling_subclass_datetime��
�z,TestDateTime.test_pickling_subclass_datetimecCrK)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.)rLrsrMr�r�r"r�rNrOrQrSrrr rU	s

��z!TestDateTime.test_compat_unpicklecCsRgd�}|j|�}|j|�}|�||�|�||k�|�||k�|�||k�|�||k�|�||k�tt|��D]i}|dd�}||d||<|j|�}|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�q=dS)N)r�rsr�r�rQr�rr")r�r*r}r�rr=)r+r�r8r9rrirrr �test_more_compare	s4


�zTestDateTime.test_more_comparecCsd|�|j|j�|�|j|j�|�|j|j�|�|j|j�|�|j	|j
�|�|j|j�dSr[)
r*r;r�r<r�r=rdr>r�r?r�r@r�)r+r�rjrrr �verify_field_equality;	sz"TestDateTime.verify_field_equalitycC�6ddl}|��}|�|�}|j�|�}|�||�dS�Nr)r�	localtimer�r�r��r+rr�r�rjrrr r�C	�

zTestDateTime.test_fromtimestampcCr�r)r�gmtimer��utcfromtimestampr�rrrr �test_utcfromtimestampK	rz"TestDateTime.test_utcfromtimestamp�EST+05EDT,M3.2.0,M11.1.0c	Cs*|�ddd�}|�|��d�|�ddddddd�}|�|��d�|�ddd	dd
�}|jdd�}|�|j�|���|tdd��|�|j�|���|tdd��|�dd	ddd
�}|�|j�|���|�|�ddd�|�d
dd�fD]}z|��}Wn	ty�Yqvw|�|j�|�|�qvdS)Nr\r"g��@rErArG���6�@rlrsr�r�r�i'r�)r�r*r�r�r�rr`)r+r��t0r8r[rrr �test_timestamp_naiveU	s0
��� ��z!TestDateTime.test_timestamp_naivecCs�|jdddtjd�}|�|��d�|jdddddddtjd�}|�|��d�|jdddddddttd	d
�d�d�}|�|��d�dS)
Nr\r"rr&rErArGg�7��@r�r�r�r)r�rr�r*r�rrrrr �test_timestamp_awareq	s
��
�z!TestDateTime.test_timestamp_awarezMSK-03c	Csv|jj|jjfD]�}|d�}|�|jd�|�|jd�|d�}z|d�}Wn	ty/Yn?w|�|jd�|�|jd�|d�}|�||�|d�}|�||�|d�}|�||�|d	�}|�|jd�|�|jd
�|d�}|�||�|d�}|�||�|d
�}|�|jd�|�|jd�|d�}|�|jd�|�|jd�|d�}|�|jd�|�|jd�qdS)Nrg���ư>g���ư�r�r�g:�0�yE�g1E��2��gH�����z�rki�#gH�����z>g1E��2�>g<"2��?g�P���?r"rirj)r�r�rr*r�r��OSError)r+Zftsr#rZ	minus_oner�rrr rn|	sJ���z&TestDateTime.test_microsecond_roundingcCs�|�d��|jjjtjd�}|��}|�|d�Wd�n1s#wY|�d��|jjjtjdd�}|��}|�|d�Wd�dS1sMwYdS)Nzminimum UTCrl����w#o9zmaximum UTCr�rr�g�� �MB)	r�r�r�r�rr�r�r*ry)r+�min_dt�min_ts�max_dt�max_tsrrr �test_timestamp_limits�	s��"�z"TestDateTime.test_timestamp_limitsc

Cs�z|j�d�Wnttfy|�d�Ynw|jjtdd�}|��}|jjj	dd�}|jjtdd���td	d
d
d��
�}d||fd
||ffD])\}}}|j|||d��|j�|�}|�||�Wd�n1spwYqLd|tddd��
�fd|tdd��
�fd|tdd��
�fd|tdd��
�fg}	|	D]8\}}|j||d��%|�
ttf��|j�|�Wd�n1s�wYWd�n1s�wYq�dS)N����Test not valid on this platformr"r�r�r�r�r�r�r�r��minimum�maximum�r�r��Too small by a littler�rm�Too small by a lotr�Too big by a little�Too big by a lot�r�)r�r�rr`r:r�rr�ryr�r2r�r*rur�)
r+rrrr�	test_namer�r��actualrrrr �test_fromtimestamp_limits�	sB�����������z&TestDateTime.test_fromtimestamp_limitscCs�z|j�d�Wnttfy|�d�Ynw|jjjtjd�}|�	�}|jj
jdtjd�}|�	�}d||jdd�fd||jdd�ffD]G\}}}|j|||d��2z|j�|�}Wnttfyw}	z
|�t|	��WYd}	~	nd}	~	ww|�
||�Wd�n1s�wYqFd	|d
fd|tdd
���fd|d
fd|tdd
���fg}
|
D]8\}}|j||d��%|�ttf��|j�|�Wd�n1s�wYWd�n1s�wYq�dS)Nrrrr�r�rrrrrr"rrr�rrr)r�rrr`r:r�r�rr�r�ryr�r�r*rr2rur�)r+rrrrrr�r�r�excrrrr �test_utcfromtimestamp_limits�	sH������


������z)TestDateTime.test_utcfromtimestamp_limitscCr�r�r�r�rrr r�
r�z&TestDateTime.test_insane_fromtimestampcCr�r�)rur`r�rr�rrr �test_insane_utcfromtimestamp
r�z)TestDateTime.test_insane_utcfromtimestamp�win32z*Windows doesn't accept negative timestampscCs|j�d�dS)N��������)r�r�r]rrr �!test_negative_float_fromtimestamp
sz.TestDateTime.test_negative_float_fromtimestampcCs.|j�d�}|�||�ddddddd��dS)	Nr&i�r�r.r�r�rQi�~)r�rr*)r+r>rrr �$test_negative_float_utcfromtimestamp
s"z1TestDateTime.test_negative_float_utcfromtimestampcCsfddl}tdd�}td�D]}|j��}|j�|���}t||�|kr&nq
|�t||�|�dS)Nrr"r�rA)rrrr��utcnowrrZassertLessEqual)r+rZ	tolerancer�Zfrom_now�from_timestamprrr �test_utcnow#
s

�zTestDateTime.test_utcnowc	Cs�d}d}t�|j||�}|j�||�}|�||�|�t|�|j�|�t|�|j�gd�}|D]0\}}|j||d��t�|j||�}|j�||�}|�||�Wd�n1s\wYq1|jj}|�|dd���dt	�|�|dd���d	t	�|�|d
d���t
dddd
��ddtjtj
dffD];\}}|dkr�d}	|}
nd}	|}
t|
dd�\}}d�|	|||�}
||
d�}|�|��t
|d��|�|�
�|�q�d\}
}||
|�}|�|��dtdt	�|�|�
�d�|�|�|�|
�|�|dd�jd�|�t��
|dd�Wd�n	1�s!wY|�t��
|dd�Wd�n	1�s<wY|�t��|dd�Wd�dS1�sXwYdS)Nz2004-12-01 13:02:47.197z%Y-%m-%d %H:%M:%S.%f))u2004-12-01�13:02:47.197u%Y-%m-%d�%H:%M:%S.%f)u2004�12-01 13:02:47.197u%Y�%m-%d %H:%M:%S.%f)u2004-12-01 13:02�47.197u%Y-%m-%d %H:%M�%S.%f)�string�formatz+0002�%zrEz-0002rCz-00:02:01.000003r"rA)rRr�r�)rr�)rZGMTrr�r�r�z{}{:02d}{:02d} {}r/r�)z	+1234 UTCr/r�r@r�r�z-2400z-000�z)�	_strptimeZ_strptime_datetimer��strptimer*r�r�r�rc�MINUTErrrrer�r-r�rrrur�)r+r,r-r�rj�inputsr1Z	tzsecondsrer�r�r�rR�dtstrrbr4rrr �
test_strptime1
s\
�����

66<zTestDateTime.test_strptimec
Cs^|jj}|�t��
|dd�}Wd�n1swY|�dddddd�}|�dddddd�}|�dddd	d	d	�}|�ddd
d	d	d	�}ddd|fd
dd|fddd|fddd|fddd|fddd|fddd|fddd|fddd|fd dd!|fg
}|D]0\}}	}
}d"|}|j||	|
|d#��||	|
�}|j|||d$�Wd�n1s�wYq|dS)%Nz01/02/3 04:05:06z%d/%m/%y %H:%M:%Sr�rEr"rGrBrIr�r]z
1/02/03 4:5:6rz
01/2/03 4:5:6z%Hz01/02/03 4:05:06z%Mz01/02/03 04:5:06z%Sz01/02/03 04:05:6z%jz2/03 04am:05:06z%j/%y %I%p:%M:%Sz%Iz02/03 4am:05:06z%wz6/04/03z%w/%U/%yz%Wz6/4/2003z%u/%W/%Yz%Vz%u/%V/%Gztest single digit )�reasonr,r-�target)�msg)r�r1rur�r�r*)r+r1Znewdaterwr�r�Zdt4r3r7r,r-r8rrr �test_strptime_single_digitl
s>�









�
�
���z'TestDateTime.test_strptime_single_digitcCs$|�dddddd�}|�|��d�|�|��|j|j|j|j|j|j|�	�|�
�t|jdd��
�dd	f	�|��}|�|j|j�|�|j
|j�|�|j|j�|�|j|j�|�|j|j�|�|j|j�|�|j|�	��|�|j|�
�t|jdd��
�d�|�|jd	�dS)
Nr�r�r.rIr��!)	r�r�r.rIr�r;rGr�r�r"r�)r�r*r r�r�rdr�r�r�r�r�rr;r<r=r>r?r@rArBrC)r+r�Zttrrr �test_more_timetuple�
s0
����z TestDateTime.test_more_timetuplec	Cs�|�ddddddd�}|�|�d�d	�d
D]!\\}}}ttd||d��}|j|d
�}|�|�d�d|�qz|�d�WdStyJYdSw)Nr�r�r.rIr�r;�/z%m %d %y %f %S %M %H %jz12 31 04 000047 33 22 06 366)))r;r$z	33.000123))r;rZ33rE)r�r�r�rr.z-0200u%y�%m %H�%M)r�r*rrrr�r)r+r�r[rr/r�rrr �test_more_strftime�
s��zTestDateTime.test_more_strftimec	CsL|�ddddddd�}|�|��tddd��|�|��tdddd��dS)Nr�rArGr��-��)r�r*rrrarrr �test_extract�
szTestDateTime.test_extractc	Cs�tddd�}tdddd�}|�ddddddd�}|jj}|||�}|�||�|||d�}|�||�|�||���|�||���|�|||��|����|�t|�|�t||�|�t|||�|�t|||d�|�t|||dd	�|�t|d
d�|�t||d�|�t|d
|�|||tj�}|�	|j
tj�|||tjd�}|�	|j
tj�t�}|||�}|�|��|�|�|��|�dS)
Nr�rArGr�r?r@)rrr"rErrr)rrr�r�r*rurvrr�r�r)r+r>r�r�r�rbrrr �test_combine�
s6

zTestDateTime.test_combinec
Cr_)N)r"rErArGrBrIrDr)r`rarb�r�rB�r�rI�r�rD�r�r�r"r�rEr�r�rcrrdrerrr rk�
s
zTestDateTime.test_replaceZEDT4cCs\|j��}tdd�}|jttdd�d�d�}|�|��|�|�t	|j||�|�t	|j|�|j|d�tddd�}|�|�|�|�|�|j|d	�|�Gd
d�dt
�}|�}|�t|j|�|�|j|d��|�|�Gdd
�d
t
�}|�}|�t|j|�Gdd�dt
�}	|	�}
|j|
d�}|�t	��
|��Wd�dS1s�wYdS)N�,Z0044rHr��EDTrrGr��r�c@r�)z+TestDateTime.test_astimezone.<locals>.BoguscSr�r[rrarrr rcr�z5TestDateTime.test_astimezone.<locals>.Bogus.utcoffsetcS�td�Srrrarrr rfr�z/TestDateTime.test_astimezone.<locals>.Bogus.dstN�r9rLrMrcrfrrrr �Bogus�rLc@r�)z/TestDateTime.test_astimezone.<locals>.AlsoBoguscSrJrrrarrr rcr�z9TestDateTime.test_astimezone.<locals>.AlsoBogus.utcoffsetcSr�r[rrarrr rf	r�z3TestDateTime.test_astimezone.<locals>.AlsoBogus.dstNrKrrrr �	AlsoBogusrMrNc@r�)z,TestDateTime.test_astimezone.<locals>.BrokencSr�rfrrarrr rcr�z6TestDateTime.test_astimezone.<locals>.Broken.utcoffsetcSr�rfrrarrr rfr�z0TestDateTime.test_astimezone.<locals>.Broken.dstNrKrrrr �Broken
rMrO)r�r�rNr�rrr*�
astimezonerurvrr�)r+rbr�dt_utcZdt_frLZbogrNZalsobogrOZbrokenZ	dt_brokenrrr �test_astimezone�
s,


"�zTestDateTime.test_astimezonecs�G�fdd�d�j�}d}�j|�}||iddi��}��|j|���|jd���|jd���|��|�����|�d�|j|j|j	d�dS)Ncrp)z.TestDateTime.test_subclass_datetime.<locals>.CrOcrqrrrsrur]rr r�rwz6TestDateTime.test_subclass_datetime.<locals>.C.__new__cSs||j|j|jSr[)r�r�r�ryrrr r{!sz6TestDateTime.test_subclass_datetime.<locals>.C.newmethNr}rr]rr rr�r)r�rGr
r�r��)r�rDrOrF)
r�r*r8r~r�r�r{r�r�r�r�rr]r r�s
�
�z#TestDateTime.test_subclass_datetimecs@G�fdd�d�j�}d}d}d}||�}��||���|jd�|��}d|f|fd|tjf|�tj�fd|f|fd	|f|fd
|df|fdt|d
d��t	|dd��f|fg}|D]A\}}	}
||fD]7}�j
t|�|d��$t||�}||	�}
��|
|���|
|
���|
jd�Wd�n1s�wYqeq\dS)Ncr�)zTTestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclasscr�r�r�r�r]rr r�3r�z\TestDateTime.test_subclass_alternate_constructors_datetime.<locals>.DateTimeSubclass.__new__Nr�rr]rr r�2r�r�)r�rGr
r�r��r
z2003-04-14T12:30:15.123456gh͏�TM�ArDr�rr�r1z%Y-%m-%dT%H:%M:%S.%fr�rrAr�)
r�rr*r�r�rr�rPrrr�r�r�)r+r�r�r�Zutc_tsr�r�rr�r�r�r��constructorrbrr]r �-test_subclass_alternate_constructors_datetime0s>


�

$�
�
����z:TestDateTime.test_subclass_alternate_constructors_datetimec
s�G�fdd�d�j�}ddifddifdddtjifdddttdd	�d
�ifg}|D]3\}}}��|��!t||�}|di|��}��||���|jd�Wd�n1sXwYq*dS)
Ncr�)z8TestDateTime.test_subclass_now.<locals>.DateTimeSubclasscr�r�r�r�r]rr r�dr�z@TestDateTime.test_subclass_now.<locals>.DateTimeSubclass.__new__Nr�rr]rr r�cr�r�r�r)Znow_utcr�Z	now_fixedr�r�r�rDr)	r�rr�rr�r�rr*r�)r+r�rr5Z	meth_namer�r�rbrr]r �test_subclass_nowas�
���zTestDateTime.test_subclass_nowc
s�gd�}gd��ddg}dtjttdd��ttdd��g����fdd	�|D�}|D]/}|D]*}|j|d
�}�j|d���j�|�}��||�Wd�n1sSwYq.q*dS)N)r�r�r�r�)�rrrr)rrrih�)rrr�G�)r�r�r?rYr�rrr�r�rEcs:g|]}�D]}�D]}�jg|�|�Rd|i��q
qqSr)r�)rZ
date_tupleZ
time_tupler��Z
base_timesr+r�rr r!�s��"�z<TestDateTime.test_fromisoformat_datetime.<locals>.<listcomp>�r��r4)rr�rrr�r�r�r*)r+r��
separators�dtsrbr�r4r�rrZr �test_fromisoformat_datetimeys(������z(TestDateTime.test_fromisoformat_datetimec
Cs�|�ddddddd�}tdd�tdd�td	d
d�tdddd
�tddddd�g}|dd�|D�7}dtjttdd��g}|dd�|D�7}|D](}|j|d�}|��}|j|d��|j�|�}Wd�n1siwYqFdS)Nrqr�r�r?�pQrBr�rErIrMr�rtr�rGrZr
r�cS�g|]}d|�qS�r�r�rrrrr r!��z<TestDateTime.test_fromisoformat_timezone.<locals>.<listcomp>rcS�g|]}t|��qSrrrcrrr r!�rdr��tstr�r�rrr�r�rr�r�)r+Zbase_dtr�r�r�rbr4r�rrr �test_fromisoformat_timezone�s&
�����z(TestDateTime.test_fromisoformat_timezonec
Cs|gd�}|D]5}|�ddddddd�}|j|d	�}|j|d
��|j�|�}|�||�Wd�n1s6wYqdS)N)	r�rr��€uʁuᛇu時u🐍r�r~r"r.r�r�r=iu�r[r\r��r+r]r�rbr4r�rrr �test_fromisoformat_separators�s���z*TestDateTime.test_fromisoformat_separatorsc	Csxddg}|D]3}|�ddddd�}|j|d�}|j|d	��|j�|�}|�||�Wd�n1s4wYqdS)
Nr�r�r~r"r.r�rTr[r\r�rlrrr �test_fromisoformat_ambiguous�s���z)TestDateTime.test_fromisoformat_ambiguouscCsddg}dtjttdd��ttdd��ttddd��g}gd	�}t|�D]Y\}}|D]R}|D]M}|d
krEd|dd}|dd�|f}|j|dd
|�d|i�}	|	j|d�}
|j|
d��|j�|
�}|�|	|�Wd�n1svwYq.q*q$dS)N)r�r�rGr�r�r?r
)r�r�rGr�r�r?rr�r�rErIrMr��r�rRr�r�r�r�rrrGrr�r\�	rr�r�	enumerater�rr�r�r*)r+Zdatetime_basesr��	timespecs�ipr�r�r��new_microsecondsrbr4r�rrr �test_fromisoformat_timespecs�s2�������z)TestDateTime.test_fromisoformat_timespecsc
C�xgd�}|D]3}|j|d��#|�t��|j�|�Wd�n1s%wYWd�n1s4wYqdS)N)r�r�z
2009.04-19T03z
2009-04.19T03z
2009-04-19T0az2009-04-19T03:1a:45z2009-04-19T03:15:4az2009-04-19T03;15:45z2009-04-19T03:15;45z2009-04-19T03:15:4500:00z2009-04-19T03:15:45.2345z2009-04-19T03:15:45.1234567z 2009-04-19T03:15:45.123456+24:30z 2009-04-19T03:15:45.123456-24:30u2009-04-10ᛇᛇᛇᛇᛇ12:15u2009-04�10T12:15u2009-04-10T12�15z2009-04-19T1z2009-04-19T12:3z2009-04-19T12:30:4z2009-04-19T12:z2009-04-19T12:30:z2009-04-19T12:30:45.z2009-04-19T12:30:45.123456+z2009-04-19T12:30:45.123456-z!2009-04-19T12:30:45.123456-05:00az2009-04-19T12:30:45.123-05:00az2009-04-19T12:30:45-05:00a�r��r�rur�r�r�r�rrr �!test_fromisoformat_fails_datetime�s�����z.TestDateTime.test_fromisoformat_fails_datetimecCsLd}|�tt�t|����|j�|�Wd�dS1swYdS)Nu2018-01-03�01:0113)r2r��re�escaper�r�r�)r+r4rrr �"test_fromisoformat_fails_surrogates"�z/TestDateTime.test_fromisoformat_fails_surrogatecCs$d}|j�|�}|�|jtj�dS)Nz2014-04-19T13:21:13+00:00)r�r�r�rrr�)r+r�rbrrr �test_fromisoformat_utcsz#TestDateTime.test_fromisoformat_utcc
Cs`Gdd�d|j�}|ddddddd	ttd
dd��d�}|�|���}|�||�|�||�dS)
Nc@rz)zBTestDateTime.test_fromisoformat_subclass.<locals>.DateTimeSubclassNr{rrrr r� r}r�rqr�r
rZr�r?i��r#r�r)r�rrr�rr*r)r+r�rbr�rrr r�s�z(TestDateTime.test_fromisoformat_subclassN)>r9rLrMrr�r0r�r\rr�r5r�r�r�r�r?rrCr�r�rUr�r�r�rr�run_with_tzr
rrnrr r#r�r$�unittestZskipIfr7�platformr'r(r+r5r:r<r>rArBrkrRr�rVrWr_rirmrnruryr|r}r�rrrr r��st
,5D			!


(''		

;""
 1#&r�c@s"eZdZeZe�d�dd��ZdS)�TestSubclassDateTimeznot appropriate for subclassescCr�r[rr]rrr r\/sz#TestSubclassDateTime.test_roundtripN)r9rLrMr�r�r�skipr\rrrr r�,sr�c@r�)�SubclassTimer"Nr�rrrr r�3r�r�c@s�eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-S).�TestTimecCsH|�dd�}|�|jd�|�|jd�|�|jd�|�|jd�dS)Nr�r�r�r*r�r�r�r�rrrr r0:s
zTestTime.test_basic_attributescCsL|�dddd�}|�|jd�|�|jd�|�|jd�|�|jd�dS)Nr�r�r�r�rrrr r�As
z&TestTime.test_basic_attributes_nonzerocCsp|�dddd�}t|�}|�|�d��|dd�}t|�}|�||�|�|j|j|j|j	�}|�||�dS)Nr"rErArGrSrZ)
r�r�r}r3r�r*r�r�r�r�)r+r�r[r9rrr r\Js�zTestTime.test_roundtripcsLgd�}|j|��|j|�}|��|�|��|k�|��|k�|��|k�|��|k�|��|k�tt|��D]i}|dd�}||d||<|j|�}|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�|��|k�|�|�k�q=tD]z�|���kd�|���kd�|���kd�|���kd�|�t��fdd��|�t��fdd��|�t��fdd��|�t��fd	d��|�t��fd
d��|�t��fdd��|�t��fdd��|�t��fd
d��q�dS)N�r"rErArGr"FTcrEr[rrrFrr r�{r�z)TestTime.test_comparing.<locals>.<lambda>crGr[rrrFrr r�|r�crHr[rrrFrr r�}r�crIr[rrrFrr r�~r�crJr[rrrFrr r�r�crKr[rrrFrr r��r�crLr[rrrFrr r��r�crMr[rrrFrr r��r�)	r�r*r}r�rr=rNrurv)r+r�r9rrirrFr �test_comparingYsN


�zTestTime.test_comparingcCs|�dd�|�dd�|�t|jdd�|�t|jdd�|�dd�|�dd�|�t|jdd�|�t|jdd�|�ddd�|�ddd�|�t|jddd�|�t|jddd�|�dddd�|�dddd�|�t|jdddd�|�t|jdddd�dS)	Nrr�r�r�r�r�r�r7)r�rur�r]rrr r��s z'TestTime.test_bad_constructor_argumentscCs�|�ddd�}|�ddd�}|�||�|�t|�t|��|di}d||<|�t|�d�|�||d�|�||d�|�ddd�}|�ddd�}|�||�|�t|�t|��|di}d||<|�t|�d�|�||d�|�||d�dS)Nr�r�r�r"rErrBr�r�rrr r?�s$zTestTime.test_hash_equalitycCs�|�dddd�}|�|��d�|�|��t|��|��}|�|��d�|�|��t|��|jdd�}|�|��d�|�|��t|��|jd	d�}|�|��d
�|�|��t|��|jdd�}|�|��d�|�|��t|��|jd
d�}|�|��d�|�|��t|��|jdd�}|�|��d�|�|��t|��|jdd�}|�|��d�|�|��t|��|jddddd�}|�|jdd�d�|�|jdd�d�|�|jdd�d�|�|jdd�d �|�|jd!d�d"�|�|jd#d�d"�|jt|jd$d�|jt|jd%d�|jdddd&d�}|�|jdd�d'�|jdddd(d�}|�|jdd�d)�|�|jd!d�d*�|�|jd#d�d�dS)+NrGrBr"r$z04:05:01.000123z00:00:00rz00:00:00.000001r#z00:00:00.000010r4z00:00:00.000100rz00:00:00.001000rz00:00:00.010000i��z00:00:00.100000r�r@rAr
)r�r�r�r�r�r�Z12rRz12:34r�z12:34:56r�z12:34:56.123r�z12:34:56.123456r�Zmonkeyr�r�z12:34:56.999rz12:34:56.000z12:34:56.000000)r�r*rr�rur�rrrr r�sNzTestTime.test_isoformatc	Cs�dtdd�fdtdd�fdtddd	�fd
tddd
d�fdtddddd�fg}ddtjfdttd��fg}|dd�|D�7}|�ddd�}d}|D]$\}}|j|d�}||}|j|d��Wd�n1sgwYqHdS)Nr�rBr�r�rEr�rIrMr�r�r�rtr�r�r�rGrZr
r�r�r�rcSr�r�rr�rrr r!�r�z4TestTime.test_isoformat_timezone.<locals>.<listcomp>r�z12:37:09rr�r�)	r+r�r�Zt_baser�r�r�r�r�rrr r��s*�	��,��z TestTime.test_isoformat_timezonecCs"|jdd�}|jt|jdd�dS)Nr"�r�rA)r�)r�rurvrrrrr �test_1653736
szTestTime.test_1653736cCsZ|�dddd�}|�|�d�d�|�|�d�d�z|�d	�WdSty,YdSw)
Nr"rErArGz%H %M %S %fz01 02 03 000004rru%H�%M)r�r*rrrrrr r
s�zTestTime.test_strftimecCs|�dddd�}|�|�d�t|��|�td��
|�d�Wd�n1s)wYGdd	�d	|j�}|dddd�}|�|�d�d	�Gd
d�d|j�}|dddd�}|�|�d�t|��dD]#}|�|�|�|�|��|�|�|�|�|��|�|�|�d�qddS)
Nr"rErArGr�r#r$c@rk)zTestTime.test_format.<locals>.AcSr�r%rr]rrr r'
r�z'TestTime.test_format.<locals>.A.__str__Nr(rrrr r&
ror&c@rk)zTestTime.test_format.<locals>.BcSr�r)rr+rrr r$
r�z(TestTime.test_format.<locals>.B.strftimeNr-rrrr r*#
ror*)z%H %M %Sr0)r+r�r&rr*rr4rrr r5
s ��zTestTime.test_formatc	Cs�|�t|�dddd��d�|�t|�dddd��d�|�t|�d	ddd
��d�|�t|�dddd	��d
�|�t|�ddd	d	��d�dS)Nr"rErArGz01:02:03.000004r#r�z10:02:03.004000rrTz00:02:03.400000r�z12:02:03r�rTz23:15:00)r*r�r�r]rrr r�/
s
 zTestTime.test_strc	Cs�d|jj}|�t|�dddd��d|�|�t|�dddd��d	|�|�t|�d
ddd��d|�|�t|�d
ddd
��d|�|�t|�ddd
d
��d|�dS)NrSr"rErArGz%s(1, 2, 3, 4)r#r�z%s(10, 2, 3, 4000)rrTz%s(0, 2, 3, 400000)r�z%s(12, 2, 3)r�rTz
%s(23, 15)rUrVrrr r�6
s �����zTestTime.test_reprcCsN|�|jj|j�|�|jj|j�|�|jjt�|�|jj|jjk�dSr[)rr�r�ryr]rr}r]rrr r^C
szTestTime.test_resolution_infocCrE)N�r�r�r�r�rErGrBrrr rCI
rJzTestTime.test_picklingcCr�)Nr�)r�r�r�r�r*r}rSrBrrr �test_pickling_subclass_timeR
r�z$TestTime.test_pickling_subclass_timec	Cszgd�}t|�D]2\}\}}|j|d��|j|�}tD]}||dd�}|�||�qWd�n1s5wYqdS)N))s,cdatetime
time
(S'\x14;\x10\x00\x10\x00'
tR.r�)scdatetime
time
(U;tR.r�)s�cdatetime
time
U;�R.r�)s,cdatetime
time
(S'\x14;\x19\x00\x10\x00'
tR.�r�r�r6r�)scdatetime
time
(U;tR.r�)s�cdatetime
time
U;�R.r�)rrNrO)rqr�r�rRr*)r+r�rrTr�r�r�r�rrr rU[
s
����zTestTime.test_compat_unpicklecCsh|j}|�|d��|�|dd��|�|ddd��|�|dddd��|�|d��|�|��dS)Nr"r)r�r})r+rfrrr rpq
szTestTime.test_boolc
Cs�|j}gd�}||�}|�||���d}dD]&\}}|dd�}|||<||�}|jd
i||i��}	|�||	�|d7}q|d�}|jt|jdd�|jt|jdd�|jt|jd	d
�|jt|jdd�dS)Nr�r)rCrDrErFr"r��r�r��r�r4r�r7rrrdrerrr rk{
s"
zTestTime.test_replacecCs8Gdd�d|j�}|dd�}|�t|jdd��|�dS)Nc@rz)z4TestTime.test_subclass_replace.<locals>.TimeSubclassNr{rrrr �TimeSubclass�
r}r�r�r�r#r�rm)r+r�rrrr rn�
s
zTestTime.test_subclass_replacecro)Ncrp)z&TestTime.test_subclass_time.<locals>.CrOcrqrrrsrur]rr r��
rwz.TestTime.test_subclass_time.<locals>.C.__new__cSrxr[�r�r�ryrrr r{�
r|z.TestTime.test_subclass_time.<locals>.C.newmethNr}rr]rr r�
r�r)rGrBrIr�rDrOrF)	r�r*r8r~r�rr{r�r�r�rr]r �test_subclass_time�
r�zTestTime.test_subclass_timec	Cs�d}ddtd�dfD]}|�t|j||dd��q
|�td��|�tdgt|��d�Wd�dS1s:wYdS)	Nz2:59.0r��9r��ÿr"r�r�)�chrrurvr�r2r�r=)r+rgZ	hour_byterrr r��
s
�"�z!TestTime.test_backdoor_resistanceN)r9rLrMrr�r0r�r\r�r�r?rr�r�rr5r�r�r^rCr�rUrprkrnr�r�rrrr r�6s0	+4
		
r�c@�4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
TZInfoBasecCs�|j}Gdd�dt�}|ddd|�d�}|turdpd}|�|��|�t|tur+d	p,d
d�}|�|��|�|�|��|�dS)Nc@s eZdZdd�Zdd�ZeZdS)z7TZInfoBase.test_argument_passing.<locals>.introspectivecSs|rdpdS)N�real�nonerrarrr re�
sz>TZInfoBase.test_argument_passing.<locals>.introspective.tznamecSst|rdpdd�S)NrO����rQrrarrr rc�
szATZInfoBase.test_argument_passing.<locals>.introspective.utcoffsetN)r9rLrMrercrfrrrr �
introspective�
sr�r"rErArr�r�r�rOrQ)r�rrr*rerrcrf)r+rfr��objr�rrr �test_argument_passing�
sz TZInfoBase.test_argument_passingcCsz|j}|jt|ddddd�Gdd�dt�}|jt|ddd|d�Gdd�dt�}|�}|ddd|d�}|�|j|�dS)Nr"r�rc@r�)z3TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTrycSr�r[rr]rrr rZ�
r�z<TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.__init__cSr�r[rrarrr rc�
r�z=TZInfoBase.test_bad_tzinfo_classes.<locals>.NiceTry.utcoffsetN�r9rLrMrZrcrrrr �NiceTry�
rMr�c@r�)z5TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTrycSr�r[rr]rrr rZ�
r�z>TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.__init__cSr�r[rrarrr rc�
r�z?TZInfoBase.test_bad_tzinfo_classes.<locals>.BetterTry.utcoffsetNr�rrrr �	BetterTry�
rMr�)r�rurv�objectrr�)r+rfr�r�rr�rrr �test_bad_tzinfo_classes�
sz"TZInfoBase.test_bad_tzinfo_classesc

Cs�Gdd�dt�}|j}dD]Y\}}|tur |ddd||�d�}n|tur1|dddddd||�d�}|r_t|�}t|d	�\}}d
|dkrEdpFd
||f}	t|t�rT|��}|�t	|�d|	�q
|�
tt	|�q
dS)Nc@r�)z6TZInfoBase.test_utc_offset_out_of_bounds.<locals>.EdgycSst|d�|_dSrP�rrY)r+rYrrr rZ�
r|z?TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.__init__cSr`r[)rYrarrr rc�
rdz@TZInfoBase.test_utc_offset_out_of_bounds.<locals>.Edgy.utcoffsetNr�rrrr �Edgy�
�r�))�`���F)�a���T)�T)rFr"rErArrIr�z%c%02d:%02drr�r�z01:02:03)rr�rrrr�rS�timetzr*r�rur�)
r+r�rfrYZlegitr�Zaofsr�r��tagrrr �test_utc_offset_out_of_bounds�
s 
�z(TZInfoBase.test_utc_offset_out_of_boundscCs�|j}Gdd�dt�}|ddd�|ddddd�|ddd|�d�fD]}|�|���|�|���|�|���q!Gdd�dt�}|ddd|�d�}|�|��tdd��|�|��td	d��|�|��d
�Gdd�dt�}|ddd|�d�}|�t	|j�|�t	|j�|�t	|j�Gd
d�dt�}|ddd|�d�}|�t
|j�|�t
|j�Gdd�dt�}|ddd|�d�}|�|��tdd��|�|��tdd��dS)Nc@�$eZdZdd�Zdd�Zdd�ZdS)z*TZInfoBase.test_tzinfo_classes.<locals>.C1cSr�r[rrarrr rcr�z4TZInfoBase.test_tzinfo_classes.<locals>.C1.utcoffsetcSr�r[rrarrr rfr�z.TZInfoBase.test_tzinfo_classes.<locals>.C1.dstcSr�r[rrarrr rer�z1TZInfoBase.test_tzinfo_classes.<locals>.C1.tznameN�r9rLrMrcrfrerrrr �C1�r�r"rc@r�)z*TZInfoBase.test_tzinfo_classes.<locals>.C3cS�
tdd�S)Nr�rQrrarrr rc�
z4TZInfoBase.test_tzinfo_classes.<locals>.C3.utcoffsetcSr�)Nr�rQrrarrr rfr�z.TZInfoBase.test_tzinfo_classes.<locals>.C3.dstcSr��N�anamerrarrr rer�z1TZInfoBase.test_tzinfo_classes.<locals>.C3.tznameNr�rrrr �C3r�r�r�rQr�r�c@r�)z*TZInfoBase.test_tzinfo_classes.<locals>.C4cSr�r�rrarrr rcr�z4TZInfoBase.test_tzinfo_classes.<locals>.C4.utcoffsetcSr�r�rrarrr rfr�z.TZInfoBase.test_tzinfo_classes.<locals>.C4.dstcSr�rrrarrr rer�z1TZInfoBase.test_tzinfo_classes.<locals>.C4.tznameNr�rrrr �C4r�r�c@r�)z*TZInfoBase.test_tzinfo_classes.<locals>.C6cSr�)Ni��r�rrarrr rc$r�z4TZInfoBase.test_tzinfo_classes.<locals>.C6.utcoffsetcSr�)Nr�r�rrarrr rf%r�z.TZInfoBase.test_tzinfo_classes.<locals>.C6.dstNrKrrrr �C6#rMr�c@r�)z*TZInfoBase.test_tzinfo_classes.<locals>.C7cSr�)Nr:r�rrarrr rc,r�z4TZInfoBase.test_tzinfo_classes.<locals>.C7.utcoffsetcSr�)N���r�rrarrr rf-r�z.TZInfoBase.test_tzinfo_classes.<locals>.C7.dstNrKrrrr �C7+rMr�r:r�r�)r�rr�rcrfrer*rrurvr�)r+rfr�r�r�r�r�r�rrr �test_tzinfo_classess6
�zTZInfoBase.test_tzinfo_classescCsx|j}Gdd�dt�}|ddd|�d�}|jdd�}|jdd�}|jd	d�}|||fD]'}|||fD]}ttttttfD]}	|	||�}
|	|j	|j	�}|�
|
|�q<q2q+|tur�|jd|�d
�}|jd|�d
�}|jd	|�d
�}|||fD]E}|||fD];}||k||k}
||us�||ur�||us�||ur�d}n||ur�|ur�nnd}n	||ur�d}nd
}|�
|
|�q{qtdSdS)Nc@rk)z=TZInfoBase.test_aware_compare.<locals>.OperandDependentOffsetcS� |jdkrt|jd�Stdd�S�Nr#rQr��r�rrrrr rc8�

zGTZInfoBase.test_aware_compare.<locals>.OperandDependentOffset.utcoffsetNrnrrrr �OperandDependentOffset7ror�r�rZr#rrAr�rs�r�rrr�r")r�rr�rrrrrrr�r*r)r+rfr�rg�d0r�r�r�r��oprjr�rrr �test_aware_compare2s@	
��
 ��zTZInfoBase.test_aware_compareN)r9rLrMr�r�r�r�r�rrrr r��
s0r�c@s�eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�ZdS) �
TestTimeTZcCsP|��}|�|jd�|�|jd�|�|jd�|�|jd�|�|j�dSr)r�r*r�r�r�r�r�rrrrr �
test_emptyfszTestTimeTZ.test_emptycs&tddd�}tddd�}tddd	�}td
d|d�}td
d|d�}tdd|d�}tdd��td|d��|�|j|�|�|j|�|�|j|�|��j�|��j|�|�|��tdd��|�|��tdd��|�|��tdd��|�����|�t|jd�|�|�	�d�|�|�	�d�|�|�	�d�|���	��|�t|j	d�|�|�
�tdd��|�|�
�tdd��|�|�
�td	d��|���
��|�t|j
d�|�t|�t|��|�t|�t|��|�t|�t|��|�||�|�||�|�||�|����|�t��fdd��|�t��fdd��|�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&�td'd(�}td)d*|d�}|�|�d+�d,�Gd-d.�d.t�}	td/d	d0|	�d�}
|�|
�d1�d2�|�t|
jd3�d4|jjv�rd5|	_|�t|
jd3�dSdS)6Nr�r�r"rr�rCr��METrArDr=rr�r��(rr!rQzno argscrKr[rr�rxZt5rr r��r�z'TestTimeTZ.test_zones.<locals>.<lambda>crGr[rrr�rr r��r�z07:47:00-05:00z12:47:00+00:00z13:47:00+01:00z00:00:00.000040z00: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=%zz07:47:00 %Z=EST %z=-0500z%H:%M:%S %Z %zz12:47:00 UTC +0000z13: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@seZdZdZdd�ZdS)z(TestTimeTZ.test_zones.<locals>.BadtznamerOcSr`r[rIrarrr re�sz/TestTimeTZ.test_zones.<locals>.Badtzname.tznameN)r9rLrMr�rerrrr �	Badtzname�sr�rErGz%H:%M:%Sz02:03:04r�r>r�)rNrr*rr�rcrrurvrerfr<r�r�rr�rr8r9r�r�)r+�estr��metr8r9rwr>Zyuckr�r�rr�r �
test_zonesns�
�
��zTestTimeTZ.test_zonescCs�|jddddtdd�d�}|jddddtdd�d�}|�t|�t|��|jd	d
ddtd
d�d�}|jd	dddtdd�d�}|�t|�t|��dS)Nrr"rErAr�r�ri�r�rQrIr4i���r�i���)r�rNr*r<r7rrr �test_hash_edge_cases�szTestTimeTZ.test_hash_edge_casesc	Cs�d}|j|�}tD]\}}}|�||�}|�|�}|�||�q	|�|��|�d��tdd�}|jddd|d�}tD]0\}}}|�||�}|�|�}|�||�|�|j	t�|�|�
�tdd	��|�|��d�q;|�|��|�d��dS)
Nr�rEr�r�rBrIrDrrQ)
r�r�r�r�r*rHrIrhrrrcrre�	r+r�r�r�r�rr�r��tinforrr rC�s"



zTestTimeTZ.test_picklingcCs�gd�}tdd�}|jdddd|d�}|D]0}tD]+}||d	d
�}|�||t|��|�|jt�|�|��tdd��|�|�	�d�qqdS)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
(J����J0KtRU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieubtR.s��cdatetime
time
U�@ctest.datetimetester
PicklableFixedOffset
)R}(U_FixedOffset__offsetcdatetime
timedelta
J����J0K�RU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieub�R.r�r�rBrIrDr
rrNrOrQ)
rhr�rRr*r�rrrcrre)r+r�r�r�rTr�r�rrr rU�s
��zTestTimeTZ.test_compat_unpicklecCs||j}|dtdd�d�}|�|�|dtdd�d�}|�|�|dtdd�d�}|�|�|ddtd	d�d�}|�|�dS)
Nrr�r�rrBi,r�r�r�)r�rNr})r+rfr�rrr �test_more_bools


zTestTimeTZ.test_more_boolcCs\|j}tdd�}ttdd�d�}dddd	|g}||�}|�||���d
}ddd
dd|ffD]&\}}|dd�}	||	|<||	�}
|jdi||i��}|�|
|�|d7}q.|�|��d�|jdd�}|�|j�|�|���|j|d�}
|�||
�|�|j|
j�|d�}|j	t
|jdd�|j	t
|jdd�|j	t
|jdd�|j	t
|jdd�dS)Nr4�+100�8���rQ�-200r"rErArGrrCrDrErFrrr�r�r�r�r�r7rr�r�rNrr*r�rer�rr�rur��r+rfZz100Zzm200r�rgrr5rhrir�rjZbase2Zbase3rrr rks>
�
zTestTimeTZ.test_replacecCs|�ddd�}|�ddd�}|�||�|jdd�}|�||�|jtdd�d�}|�||�|jtdd�d�}|�||�Gdd�dt�}|�}|j|d�}|j|d�}|�|��td	d
��|�|��tdd
��|�||�|j|�d�}|�||k�dS)Nr"rErArr�rc@r�)z-TestTimeTZ.test_mixed_compare.<locals>.VariescS�tdd�|_dS�Nr�rQr�r]rrr rZKr|z6TestTimeTZ.test_mixed_compare.<locals>.Varies.__init__cS�|jtdd�7_|jS�Nr"rQ�rYrrrrr rcM�z7TestTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetNr�rrrr �VariesJr�r�r�rQr�)	r�r*r�rNr�rrcrr}�r+r8r9r��vrrr rZ>s$zTestTimeTZ.test_mixed_comparec
Cs�ddg}d}d}d}d}|tt�||||��7}dtjttdd��ttd	d
d��g}|D]5}|D]0}|j|d|i�}	|	��}
|j|
d
��|j�	|
�}|�
|	|�Wd�n1s[wYq0q,dS)NrX)r�r�r�r�)rZr�r�)rBr�)rGr?)ri�i�[
rEr�rIrMr�rrf)r��	itertools�productrr�rr�rr�r�r*)r+Z
time_examplesZhhZmm�ssZusecr�Zttupr�r�rg�t_rtrrr r�\s.������zTestTimeTZ.test_fromisoformatc
Cs�|�dddd�}tdd�tdd�tdd	d
�tdddd�tdd
ddd�g}|dd�|D�7}dtjttdd��g}|dd�|D�7}|D](}|j|d�}|��}|j|d��|j�|�}Wd�n1sfwYqCdS)Nr�r�r?r`rBr�rErIrMr�rtr�rGrZr
r�cSrarbrrcrrr r!�rdz:TestTimeTZ.test_fromisoformat_timezone.<locals>.<listcomp>rcSrerrrcrrr r!�rdrrfrh)r+Z	base_timer�r�r�r�rgr�rrr rivs&
�����z&TestTimeTZ.test_fromisoformat_timezonecCsddg}dtjttdd��ttdd��ttddd��g}gd	�}t|�D]Y\}}|D]R}|D]M}|d
krEd|dd}|d
d�|f}|j|d
d|�d|i�}	|	j|d�}
|j|
d��|j�|
�}|�|	|�Wd�n1svwYq.q*q$dS)N)r�r�r?r
)r�r�r?rr�r�rErIrMr�ror�rr�rr"rr�rfrp)r+Z
time_basesr�rrrsr�r�Zt_tuplertr�rgr�rrr ru�s2�������z'TestTimeTZ.test_fromisoformat_timespecsc
Crv)N)r�u12�00z12:z12:30:z	12:30:15.�1z12:3z12:30:1z1a:30:45.334034z12:a0:45.334034z12:30:a5.334034z
12:30:45.1234z12:30:45.1234567z12:30:45.123456+24:30z12:30:45.123456-24:30u12:30:45u12:30:45․123456z	12:30:45az
12:30:45.123az12:30:45.123456az12:30:45.123456+12:00:30arwrxr�rrr r��s�����z#TestTimeTZ.test_fromisoformat_failsc	Cr�)Ns12:30:45z12:30:45r�r�rrr r��s���z-TestTimeTZ.test_fromisoformat_fails_typeerrorcCsPGdd�d|j�}|ddddtjd�}|�|���}|�||�|�||�dS)Nc@rz)z<TestTimeTZ.test_fromisoformat_subclass.<locals>.TimeSubclassNr{rrrr r��r}r�r�r
r?i�r)r�rr�r�rr*r)r+r�ZtscZtsc_rtrrr r��s
z&TestTimeTZ.test_fromisoformat_subclasscs�G�fdd�d�j�}ddddtddd	�f}�j|�}||id
di��}��|j|���|jd���|jd���|��|�����|�d
�|j|j	d�dS)Ncrp)z*TestTimeTZ.test_subclass_timetz.<locals>.CrOcrqrrrsrur]rr r��rwz2TestTimeTZ.test_subclass_timetz.<locals>.C.__new__cSrxr[r�ryrrr r{�r|z2TestTimeTZ.test_subclass_timetz.<locals>.C.newmethNr}rr]rr r�r�rrGrBrI��r�r�r"r�rDrOrF)
r�rNr*r8r~r�rcr{r�r�r�rr]r �test_subclass_timetz�s
"zTestTimeTZ.test_subclass_timetzN)r9rLrMrr�r�r�r�rCrUr�rkrZr�rirur�r�r�r�rrrr r�cs"W
"'
r�c@s�eZdZeZdd�Zdd�Zdd�Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Ze�d%�d&d'��Ze�d(�d)d*��Ze�d(�d+d,��Zd-d.�Zd/d0�Zd1d2�Zd3S)4�TestDateTimeTZc	Cs�|�ddddddd�}|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|j	d�dS)Nr"rErArGrBrIrD)
r�r*r�r�rdr�r�r�r�rrarrr �test_trivial�szTestDateTimeTZ.test_trivialcsh|jdddtdd�d��|jtdddddd	td
d�d��|���k�|���k�|���k�|����|����|jdddddtdd�d��|jddddd
tdd�d��|����|jdddddtdd�d��|���k�|jdddddtdd�d��|���k�|jdddddtdd�dd��|���k�|jdddddtdd�dd��|���k�|jj�|����|����|�t����kWd�n1s�wYGdd�dt	�}|jddd|�d��|����|����|�ddd��|����Gdd�dt	�}|jddd|�d��|jdddtdd�d��|�t
��fdd��dS)Nr"r�r�rr�r.r�r�r�r�rErAr���r)rr�r
c@rk)z4TestDateTimeTZ.test_even_more_compare.<locals>.NaivecSr�r[rrarrr rc8r�z>TestDateTimeTZ.test_even_more_compare.<locals>.Naive.utcoffsetNrnrrrr �Naive7ror�rBrIrDc@rk)z4TestDateTimeTZ.test_even_more_compare.<locals>.BoguscSr�)NrrQrrarrr rcDr_z>TestDateTimeTZ.test_even_more_compare.<locals>.Bogus.utcoffsetNrnrrrr rLCrorLcs��kSr[rr�r8r9rr r�Hr�z7TestDateTimeTZ.test_even_more_compare.<locals>.<lambda>)r�rNrr}r*r�r�rurvrr�)r+r�rLrr�r �test_even_more_comparesP���
�z%TestDateTimeTZ.test_even_more_comparec	Csd}|j|�}tD]\}}}|�||�}|�|�}|�||�q	|�|��|�d��tdd�}|j|id|i��}|jdddtddd�d	�}tD]0\}}}|�||�}|�|�}|�||�|�	|j
t�|�|��tdd
��|�|�
�d�qI|�|��|�d��dS)Nr�rEr�r�rr"rr�rrQ)r�r�r�r�r*rHrIrhrNrrrcrrer�rrr rCJs$



zTestDateTimeTZ.test_picklingcCs�gd�}d}tdd�}|j|id|i��}|D]-}tD](}||dd�}|�||�|�|jt�|�|��tdd��|�|��d�qqdS)	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
(J����J0KtRU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieubtR.s��cdatetime
datetime
U
�;�@ctest.datetimetester
PicklableFixedOffset
)R}(U_FixedOffset__offsetcdatetime
timedelta
J����J0K�RU_FixedOffset__dstoffsetNU_FixedOffset__nameUcookieub�R.)rLrsrMr�r�r"r
r�r�rrNrOrQ)	rhr�rRr*rrrcrre)r+r�r�r�r�rTr�r�rrr rUas
��z#TestDateTimeTZ.test_compat_unpicklecCsr|jdddtdd�d�}t|�|jtdddddd	td
d�d�}t|�|jdddtdd�d�}|�tt|�dS)
Nr"r�r�rr�r.r�r�r�r�rBr�)r�rNr<rrur�rrrr �test_extreme_hashes�s�z"TestDateTimeTZ.test_extreme_hashescCs�tdd�}tdd�}tdd�}tddd	d
d|d�}tddd	d
d|d�}tddd	dd|d�}|�|j|�|�|j|�|�|j|�|�|��tdd��|�|��tdd��|�|��tdd��|�|��d�|�|��d�|�|��d�|�t|�t|��|�t|�t|��|�t|�t|��|�||�|�||�|�||�|�t|�d�|�t|�d�|�t|�d�d}|�t	|�|d�|�t	|�|d�|�t	|�|d�dS)Nr�r�rr�r�r�r�rAr�rDr=rr�r�rQz2002-03-19 07:47:00-05:00z2002-03-19 12:47:00+00:00z2002-03-19 13:47:00+01:00zdatetime.datetime(2002, 3, 19, z7, 47, tzinfo=est)z12, 47, tzinfo=utc)z13, 47, tzinfo=met))
rNrr*rrcrrer<r�r�)r+r�r�r�r8r9rwr>rrr r��s8


zTestDateTimeTZ.test_zonesc
CsXtdd�}tddd�}tdddd|d	�}t�||�}|�|tddddddd|d	��dS�
Nr�r�r�rArGr�r?r@r)rNrrrr�r*)r+r�r>r�rbrrr rB�s
�zTestDateTimeTZ.test_combinec
Csxtdd�}|jddddddd|d	�}|�|��tddd��|�|��tdddd��|�|��tdddd|d	��dSr�)rNr�r*rrr�)r+r�rbrrr rA�s

"zTestDateTimeTZ.test_extractc
st|j���tdd�}���j|d�}|j����|��|��j|�|�	��
�|�|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��|�t�fd	d��|�	��t
d
��|�	��t
d
��t
ddd
d�����|��j|���}|�|j|�|�	�|���}|�|j|�|�	�|�|�t��fdd��|�	����tt�dd�d�}�j|d��|��j|���}�������}|�	||�|jdddtdd�d�}|jtddddddtdd�d�}	|	|}
|�	|
|jj|jjt
dd��ttd�}ttd�}|j|d�|	j|d��|�	�|jj|jj�dS)Ni����z	west 5:30rcrr[rr�r��nowawarerr r��r�z9TestDateTimeTZ.test_tz_aware_arithmetic.<locals>.<lambda>cr r[rrr�rr r��r�crr[rrr�rr r��r�crr[rrr�rr r��r�cr�r[rr)r�rr r��r�rr"r�i.)r�rRr�crr[rr)r��nowawareplusrr r��r�r�rZrandomtimezoner�r�r.r�r�r�ryi>rQr&r*)r�r�rNrr�r�rr�rr*r�rurvrrmZ	randrangercrryr�rr�)
r+Ztz55Z	timeawareZ
nowawareplus2r�Ztzrrjr�r�ryZmaxdiffZtzaZtzbr)r�r�r�r�r �test_tz_aware_arithmetic�sT

��

z'TestDateTimeTZ.test_tz_aware_arithmeticcCs.|jj}|�}tdd�}||�}||d�}|�|j|j�|�|��tdd��|�t	|d�|jt	|dd�|jt	||d�|�t	|||�tdd	d�}ttd
dd�d
d�t
td
dd�d
�fD]4}td�D](}t�|�}	|�|	j|�t�
�j|d�}
|
�|�}t|	|�tdd�kr�nqf|�d�q`dS)NrO�42rIrQr�r�r�rr�rTrQr��weirdtzrAr�r�z0utcnow(), now(tz), or astimezone() may be broken)r�r�rNr�rr*rcrrurvrrrr)r�rPrZfail)r+�methrg�off42�another�againr�r�r�r�r)Znow2rrr �test_tzinfo_nows4

�

�
��zTestDateTimeTZ.test_tzinfo_nowcCs
ddl}|jj}|��}||�}tdd�}|||�}|||d�}|�|j|j�|�|��tdd��|�	t
||d�|j	t
||dd�|j	t
|||d�|�	t
||||�|�	t
|�d	}t�|�}	td
dd�}
t|
d
d�}|	|
}t�||�}
|�||
j
dd��dS)NrrOr�rIrQr�rr�r_i��'r�r�)rr�r�rNr�rr*rcrrurvrrr�)r+rr�r�rgr�r�r�r�Zutcdatetimercr�r�rjrrr �test_tzinfo_fromtimestamp's*


z(TestDateTimeTZ.test_tzinfo_fromtimestampcCs:|jj}|�}tdd�}|�t||�|jt||d�dS)NrOr�r)r�r)rNrurv)r+r�rgr�rrr �test_tzinfo_utcnowJs

z!TestDateTimeTZ.test_tzinfo_utcnowcCsPddl}|jj}|��}||�}tdd�}|�t|||�|jt|||d�dS)NrrOr�r)rr�rrNrurv)r+rr�r�rgr�rrr �test_tzinfo_utcfromtimestampTs
z+TestDateTimeTZ.test_tzinfo_utcfromtimestampcCshGdd�dt�}|j}dD]U\}}|ddddddd||�d	�}|��}|�d|j�|�d|j�|�d|j�|�d|j�|�d|j�|�d|j	�|�d
|j
�|�d|j�|�||j�q
|�
t|ddd|d�d	�j�|�|ddd|d�d	���jd�|�|ddd|d
�d	���jd�|�
t|ddd|d�d	�j�|�
t|ddd|d�d	�j�dS)Nc@r�)z1TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DSTcS�t|t�r
t|d�}||_dSrP�rSrTr�dstvalue�r+r�rrr rZd�


z:TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.__init__cSr`r[�r�rarrr rfhrdz5TestDateTimeTZ.test_tzinfo_timetuple.<locals>.DST.dstN�r9rLrMrZrfrrrr �DSTcsr))����r")r;r")rr)Nr�r"r#r�r�r�rrr�r�r�rr�)rr�r r*r;r<r=r>r?r@rArBrCrurvr�)r+rrfr��flagr>r�rrr �test_tzinfo_timetuple`s&"""z$TestDateTimeTZ.test_tzinfo_timetuplecs�Gdd�dt��|j}|�t|ddd�d�d�j�G�fdd�d��}dD]f}|dd	d
ddd
d|d|�d�}|��}|�|j|j�|�|j	|j
�|�|j|j�|�d|j
�|�d|j�|�|j|j�|�|��|j�|�|��tddd���d|j�|�d|j�q&|dd	d
ddd
d�}|��}|�|dd�|��dd��|�d|j�Gdd�d��}|dd	d
ddd
d|�d�}|��}|�|dd�|��dd��|�d|j�Gdd�d��}|dd	d
ddd
d|�d�}|�t|j�|ddddddd�}tjtjtjfD]}|j|d�}	|�|	��dd�|	�tj���dd���q|tddddd|d�d�}
|�t |
j�|t!ddd d!dd"|d#�d�}|�t |j�|jjtt"�d�}
|�t |
j�|jjtt"�d�}|�t |j�dS)$Nc@seZdZddd�Zdd�ZdS)z-TestDateTimeTZ.test_utctimetuple.<locals>.DSTrcSr�rPr�r�rrr rZ�rz6TestDateTimeTZ.test_utctimetuple.<locals>.DST.__init__cSr`r[rrarrr rf�rdz1TestDateTimeTZ.test_utctimetuple.<locals>.DST.dstN)rrrrrr r�s
rr"rrcs"eZdZd�fdd�	Zdd�ZdS)z.TestDateTimeTZ.test_utctimetuple.<locals>.UOFSNcs��||�t|d�|_dSrP)rZr�uofs)r+rZdofs�rrr rZ�sz7TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.__init__cSr`r[)rrarrr rc�rdz8TestDateTimeTZ.test_utctimetuple.<locals>.UOFS.utcoffsetr[r�rrrr �UOFS�sr	)rr;rNrErAr#r�r�r�i���rsr�r�c@rk)z.TestDateTimeTZ.test_utctimetuple.<locals>.NOFScSr�r[rrarrr rc�r�z8TestDateTimeTZ.test_utctimetuple.<locals>.NOFS.utcoffsetNrnrrrr �NOFS�ror
c@rk)z.TestDateTimeTZ.test_utctimetuple.<locals>.BOFScSr�)Nr�rrarrr rc�r�z8TestDateTimeTZ.test_utctimetuple.<locals>.BOFS.utcoffsetNrnrrrr �BOFS�rorr�r
rTr�i+�r�r�r�r.r�r�r�r�)#rr�rurzrcZutctimetupler*r�r;r�r<rdr=r>r?r�r@r�rAr�rrBrCr rvrr�r�ryr�rPrr`rr2)r+rfr	r�r>r�r
rr�ZdtzrcZhugerrr �test_utctimetuple�s\��  �z TestDateTimeTZ.test_utctimetuplecCstdd�}tdd�}tdd�}tdd�}|j}d}d||||fD]f}d	D]a}|d
ddd
dd||d�}	d|r7dp8d}
|durB|	��pCd}|
|}|	��}
|�|
|d|�|�|
|	�d��|�|	�d�|d|�|�|	�d�|d|�|�t|	�|d|�q$q dS)Nrr���z+03:40i���z-03:51r�z
0001-02-03)riyr"rErArGrBr�rz04:05:59z.987001rr�kuሴr�)rNr�rerr*r�)r+r#ZplusZminus�unknownrfZdatestrZofsrr>ZtimestrZofsstrZtailstrZisorrr �test_tzinfo_isoformat�s(



��z$TestDateTimeTZ.test_tzinfo_isoformatc	Cs6|j}tdd�}ttdd�d�}dddd	d
dd|g}||�}|�||���d
}dddddddd|ffD]&\}}|dd�}	||	|<||	�}
|jdi||i��}|�|
|�|d7}q4|�|��d�|jdd�}|�|j�|�|���|j|d�}
|�||
�|�|j|
j�|ddd�}|j	t
|jdd�dS)Nr4r�r�rQr�r"rErArGrBrIrDrr`rarbrCrDrErFrrr�r�r�rcrr�r�rrr rk�s>
�
zTestDateTimeTZ.test_replacecCsDtdd�}tdd�}ttdd�d�}|jj|d�}|�|j|�|�t|j|�|�|j�}|�|j|�|�	|�
�|�
��|�	|��|���|�|�}|�|j|�|�	|��tdd��||��}||�|�7}|j
|d	�}|�	|�
�|�
��|�	|��|���|�	|��|���|�|j|j�|�	||�dS)
N�NonerGZ44rBr�Zm300rIr�r)rNrr�r�r�rrur�rPr*rrrcr�r�)r+ZfnoneZf44mZfm5hrbr�rjr�rrr �test_more_astimezones*


z#TestDateTimeTZ.test_more_astimezoner�cCs4|j�tj�}|�|�d�|�|�|��|�dSr[)r�r�rr�r*rPrarrr �test_astimezone_default_utc-sz*TestDateTimeTZ.test_astimezone_default_utcrcCs�|jdddddtjd�}|��}|�||�|�|�d�d�|jdddd	dtjd�}|��}|�||�|�|�d�d
�dS)NrlrsrGrIr�rr/z	-0500 ESTrBz	-0400 EDT)r�rr�rPr*r)r+rbr�rrr �test_astimezone_default_eastern5sz.TestDateTimeTZ.test_astimezone_default_easterncCs8tddddtjd�}|��}|��}|�|j|j�dS)NrLrsr"rBr)rrr�rPr*r)r+r�r�r[rrr �!test_astimezone_default_near_fold@sz0TestDateTimeTZ.test_astimezone_default_near_foldc
Cs�|j}Gdd�dt�}|ddddddd	|�d
�}|jdd�}|jdd�}|jdd�}|||fD]}|||fD]}||}	t|j|jd
�}
|�|	|
�q6q/|ddddddd	�}|jd|�d�}|jd|�d�}|jd|�d�}|||fD]I}|||fD]A}||}	||us�||ur�||us�||ur�td�}
n ||ur�|ur�nntd�}
n||ur�tdd
�}
ntdd
�}
|�|	|
�q{qtdS)Nc@rk)zBTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffsetcSr�r�r�rrrr rcNr�zLTestDateTimeTZ.test_aware_subtract.<locals>.OperandDependentOffset.utcoffsetNrnrrrr r�Mror�r�rZr#rsr�r�r
rrAr�rQr�ri���r�)r�rr�rr�r*)r+rfr�rgr�r�r�r�r�rjr�rrr �test_aware_subtractHs:	� 


��z"TestDateTimeTZ.test_aware_subtractcCstddddddd�}tddddddd�}|�||�|jdd�}|�||�|jtdd	�d�}|�||�|jtd
d	�d�}|�||�Gdd�dt�}|�}|j|d�}|j|d�}|�|��td
d��|�|��tdd��|�||�|j|�d�}|�||k�dS)Nr"rErArGrBrIrDrr�rc@r�)z1TestDateTimeTZ.test_mixed_compare.<locals>.VariescSr�r�r�r]rrr rZ�r|z:TestDateTimeTZ.test_mixed_compare.<locals>.Varies.__init__cSr�r�r�rrrr rc�r�z;TestDateTimeTZ.test_mixed_compare.<locals>.Varies.utcoffsetNr�rrrr r��r�r�r�rQr�)	rr*r�rNr�rrcrr}r�rrr rZts$z!TestDateTimeTZ.test_mixed_comparecs�G�fdd�d�j�}ddddddd	td
dd�f}�j|�}||id
di��}��|j|���|jd���|jd���|��|�����|�d�|j|j	d�dS)Ncrp)z2TestDateTimeTZ.test_subclass_datetimetz.<locals>.CrOcrqrrrsrur]rr r��rwz:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.__new__cSrxr[)r�r�ryrrr r{�r|z:TestDateTimeTZ.test_subclass_datetimetz.<locals>.C.newmethNr}rr]rr r�r�rr�r�r.rGrBrIr�r�r�r"r�rDrOrF)
r�rNr*r8r~r�rcr{r�r�r�rr]r �test_subclass_datetimetz�s
"z'TestDateTimeTZ.test_subclass_datetimetzN)r9rLrMrr�r�r�rCrUr�r�rBrAr�r�r�r�r�rrrrkrrr~rrrrrZrrrrr r��s:E%A%#
$P'



,r�cCs d|��}|r|t|�7}|S)NrI)r�r)rbZ
days_to_gorrr �first_sunday_on_or_after�srrQr�r�rGrEr6c@r�)�
USTimeZonecC�"t|d�|_||_||_||_dS�Nr��r�	stdoffset�reprname�stdname�dstname�r+r�rrr rrr rZ��
zUSTimeZone.__init__cCr`r[�rr]rrr r^�rdzUSTimeZone.__repr__cC�|�|�r|jS|jSr[�rfr rrarrr re��
zUSTimeZone.tznamecC�|j|�|�Sr[�rrfrarrr rc�r|zUSTimeZone.utcoffsetcCsb|dus	|jdurtSttj|jd��}ttj|jd��}||jdd�kr,|kr/tStStS�Nrcr)rr�r�DSTSTARTr�r��DSTENDr��r+rbrz�endrrr rf�s�zUSTimeZone.dstN�r9rLrMrZr^rercrfrrrr r��rr�r�r�rHrJ�CentralZCSTZCDTrF�MountainZMSTZMDTi�����PacificZPSTZPDTr�i0���ZUTCfakec@sdeZdZedddd�Zedddd�ZeZdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�TestTimezoneConversionsr�rGrDrEr#rMr"c
Cs|�|��t�|�|�|�|�|�|�}|�|�}|��|��krE|jdkrE|�|t|�|�|��t�|�|�|�|�|��n|�||�|t}|�|�}	|��|��kr�|jdkr�|�|	|jdd��|t7}|�|�}	|�|	|jdd��dS|�|	|t�dS)NrErr"r�)r*rfr�rPrr�r�r�)
r+rbr�r��dston�dstoff�asutc�there_and_backZnexthour_utcZnexthour_tzrrr �checkinside�s&


�


z#TestTimezoneConversions.checkinsidecCsF|�|��t�|�|�|�|�|�|�}|�|�}|�||�dSr[)r*rfr�rP)r+rbr�r�r6r7rrr �checkoutside/s


z$TestTimezoneConversions.checkoutsidec	Cs�|jj|d�}|jj|d�}tdd�tttdd�tdd�fD]8}|�|||||�||||fD]}|�|||||�q1|�|||�||||fD]	}|�|||�qLqdS)Nrr�r�r"rQr�)r4r�r5r�DAYr�r8r9)r+r�r�r4r5r�ZduringZoutsiderrr �convert_between_tz_and_utc:s ���z2TestTimezoneConversions.convert_between_tz_and_utccCsL|�tt�|�tt�|�tt�|�tt�|�tt�|�tt�dSr[)r;r��utc_realr2�utc_faker]rrr �	test_easyPsz!TestTimezoneConversions.test_easyc	CsH|jtdd�}tddd�}|j|d�}|jjdd�}|�t�jdd�}|�||�|jjd	td
�}|jjdd�}|�t�jdd�}|�||�ttfD]U}tt	fD]N}|j
tdd�}||�d�8}||�d�}	|	j|d�}
d
D]-}|j
j|d�}dD]}
|j|
d�}|
j|
d�}	|	�|�}|�|jdd�|�q}|
t7}
qrqRqLdS)NrGr�i��z-0900rrrAr�rI�r�rr"rE)rr"r"rE�rr�r�r�)
r4rrNr�rPr�r*r<r=r2r5rcr�)r+ZfourbackZninewestr�rjZsixutcr�r�Zfirst_std_hourr6Z	asutcbaseZtzhourZexpectedbaser�Zastzrrr �test_trickyhs6

���z#TestTimezoneConversions.test_trickycCs�Gdd�dt�}|j��jtd�}|�|��Gdd�d|�}|�t|j|��Gdd�d|�}|�dd	d	�jtd�}|�t|j|��dS)
Nc@r�)z2TestTimezoneConversions.test_bogus_dst.<locals>.okcS�tSr[�r�rarrr rc�r�z<TestTimezoneConversions.test_bogus_dst.<locals>.ok.utcoffsetcSrBr[rCrarrr rf�r�z6TestTimezoneConversions.test_bogus_dst.<locals>.ok.dstNrKrrrr �ok�rMrDrc@rk)z5TestTimezoneConversions.test_bogus_dst.<locals>.notokcSr�r[rrarrr rf�r�z9TestTimezoneConversions.test_bogus_dst.<locals>.notok.dstN�r9rLrMrfrrrr �notok�rorFc@rk)z<TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notokcSs|jdkrdSdtS)Nr�r#)r�r�rarrr rf�s
z@TestTimezoneConversions.test_bogus_dst.<locals>.tricky_notok.dstNrErrrr �tricky_notok�rorGr�r")rr�r�r�r<rPrur�)r+rDr�rFrGrbrrr �test_bogus_dst�sz&TestTimezoneConversions.test_bogus_dstc
Cs�|�ttj�t��jtd�}|�ttj|�|jtd�}t�|�}|�	|j
t�|�ttj||�|�ttjt���Gdd�dt
�}|dddd�}|jjdtd	�}|j|d�}d
D]E}|j|d�}|dkrn|td
d�8}t�|�}	|�	||	�||j}|�|�}	|�	||	�|jtd��|�}	|�	||	�|t7}|t7}q[|jjdtd	�}|j|d�}dD]:}|j|d�}t�|�}	|�	||	�||j}|�|�}	|�	||	�|jtd��|�}	|�	||	�|t7}|t7}q�dS)Nrc@rk)z<TestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZonecSs
||jSr[)rrarrr r��r_zDTestTimezoneConversions.test_fromutc.<locals>.FauxUSTimeZone.fromutcN�r9rLrMr�rrrr �FauxUSTimeZone�rorJr��FEasternZFESTZFEDTrGr?)r�rr"rArGrBr�r�r"r�)rr"r"rErArG)rurvr�r�rr)r�r<r�r*rrr�rr4rrrPr�r5)
r+r�ZenowrJrKrzZfstartZwallr�rjrrr r��sN








�z$TestTimezoneConversions.test_fromutcN)r9rLrMrr4r5r�r8r9r;r>rArHr�rrrr r3�s43r3c@r�)�Oddballscs�t���t��t���|���k�|���k�|���k�|���k�|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��|�t��fdd��|�t��fd	d��|�	��
��d
��jddd}�j|d
�}|�	��
|�d�t
�j�j�j�}|�	�|�|�	|��t�j�j�jddd�}|�	�|�|�	|��dS)NcrKr[rr�Zas_dateZas_datetimerr r�r�z+Oddballs.test_bug_1028306.<locals>.<lambda>crGr[rrrMrr r�r�crJr[rrrMrr r�r�crEr[rrrMrr r�r�crLr[rrrMrr r�r�crHr[rrrMrr r�r�crMr[rrrMrr r�r�crIr[rrrMrr r�r�Tr"r�)rdFr)rr�rr�rr}r�rurvr*�__eq__rdr�r�r�r�r�)r+Z
different_dayZas_differentZdate_scZdatetime_scrrMr �test_bug_1028306�s4

�zOddballs.test_bug_1028306c	Cs^t��t�t��t�t�tt��fD]}|�t	��d|_
Wd�n1s'wYqdSrf)rr�rrr)rrrru�AttributeErrorr$)r+r�rrr �test_extra_attributess����zOddballs.test_extra_attributescCsGdd�d�}Gdd�dt�}d|d�t�d�t�d�|d�|d�d	fD]]}|�tt|dddddd�	|�ttd|ddddd�	|�ttdd|dddd�	|�ttddd|ddd�	|�ttdddd|dd�	|�ttddddd|d�	|�ttdddddd|�	q$dS)
Nc@r�)z-Oddballs.test_check_arg_types.<locals>.NumbercSs
||_dSr[��value)r+rSrrr rZ)r_z6Oddballs.test_check_arg_types.<locals>.Number.__init__cSr`r[rRr]rrr �__int__+rdz5Oddballs.test_check_arg_types.<locals>.Number.__int__N)r9rLrMrZrTrrrr �Number(r�rUc@rz)z,Oddballs.test_check_arg_types.<locals>.FloatNr{rrrr �Float.r}rVg$@g������%@r#z10.9Z10)r��decimalZDecimalrurvr)r+rUrVZxxrrr �test_check_arg_types's��zOddballs.test_check_arg_typesN)r9rLrMrOrQrXrrrr rL�s%
rLc@rk)�tzinfo2cCs�t|t�s	td��|j|urtd��|jdd���}|jdd���}|dus0|dus0|��dur2t�||krD||}|��}||krD|S||fD] }||}|��|krX|S|jdd�}|��|krh|SqHtd��)�*datetime in UTC -> datetime in local time.�&fromutc() requires a datetime argument�dt.tzinfo is not selfrr�r"NzNo suitable local time found)rSrrvrr�r�rcrf)r+rbZoff0Zoff1�ldtZoffrrr r�Es,

�ztzinfo2.fromutcNrIrrrr rYCsrYc@r�)�USTimeZone2cCrrrr!rrr rZgr"zUSTimeZone2.__init__cCr`r[r#r]rrr r^mrdzUSTimeZone2.__repr__cCr$r[r%rarrr repr&zUSTimeZone2.tznamecCr'r[r(rarrr rcvr|zUSTimeZone2.utcoffsetcCs�|dus	|jdurtSttj|jd��}ttj|jd��}|jdd�}|t|kr0|kr1tS||kr=|tkrFnn|jrDtStS||krR|tkr\ntS|jrZtStStSr))	rr�rr*r�r�r+r�r�r,rrr rfys��zUSTimeZone2.dstNr.rrrr r^er/r^�Eastern2�Central2�	Mountain2�Pacific2c@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�Europe_Vilnius_1941cCs$tdddd|d�tdddd|d�gS)N�rIr�rrrr��rr]rrr �	_utc_fold���zEurope_Vilnius_1941._utc_foldcCs$tdddd|d�tdddd|d�gS)NrdrIr�rr�rrer]rrr �	_loc_fold�rgzEurope_Vilnius_1941._loc_foldcC�B|��\}}||krdtS||kr|jrdtSdtSdtS)NrArE�rhr�r��r+rbZ
fold_startZ	fold_stoprrr rc��zEurope_Vilnius_1941.utcoffsetcCri)Nrr"rjrkrrr rf�rlzEurope_Vilnius_1941.dstcCs.|��\}}||krdS||krd|jSdS)N�MSK)rm�CESTrn)rhr�rkrrr re�s
zEurope_Vilnius_1941.tznamecCsV|jdkrt�|��\}}||kr|dtS||kr%|dtjdd�S|dtS)NrdrArEr"r�)r�rzrfr�r�rkrrr r��s
zEurope_Vilnius_1941.fromutcN)	r9rLrMrfrhrcrfrer�rrrr rc�s			rcc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
�d�dd��Ze
�d�dd��Z
dd�Ze
�d�dd��Ze
�d�dd��Ze
�d�dd��Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/S)0�TestLocalTimeDisambiguationc	Cs�t�}tddddddtjd�}|�|�}|�|�d�d�|�|jd	�|�|�	��tdddd
tjd�}|�|�}|�|�d�d�|�|jd�|�
|�	��tdddd
tjd�}|�|�}|�|�d�d�|�|jd	�|�
|�	��dS)NrdrIr�r�r�rz%c %Z%zz!Mon Jun 23 23:59:59 1941 MSK+0300rrrz"Mon Jun 23 23:00:00 1941 CEST+0200r"r�z"Tue Jun 24 00:00:00 1941 CEST+0200)rcrrr�rPr*rr�r�rfr})r+�Vilnius�gdtr]rrr �test_vilnius_1941_fromutc�s,
�
�
�z5TestLocalTimeDisambiguation.test_vilnius_1941_fromutcc
Cs�t�}tdddddd|d�}|�tj�}|�|�d�d�tdddddd|d�}|�tj�}|�|�d�d	�tdddddd|d
d�}|�tj�}|�|�d�d�tddd
d|d�}|�tj�}|�|�d�d�dS)NrdrIr�r�r�rz%c %ZzMon Jun 23 19:59:59 1941 UTCzMon Jun 23 20:59:59 1941 UTCr")rr�zMon Jun 23 21:59:59 1941 UTCr�rzMon Jun 23 22:00:00 1941 UTC)rcrrPrr�r*r)r+rpr]rqrrr �test_vilnius_1941_toutc�s*����z3TestLocalTimeDisambiguation.test_vilnius_1941_toutccCsztddd�}tddddd�}|�|jd�|�|jd�|�t��tdddddd�Wd�dS1s6wYdS�Nrr"r�)rrr*r�rurv�r+r�rbrrr �test_constructorss"�z-TestLocalTimeDisambiguation.test_constructorscCs@tddddd�}|��}|�|jd�|��}|�|jd�dS)Nr"r�)rrr*r�r�)r+rbr�rrr �test_members
z'TestLocalTimeDisambiguation.test_membercCs�td�}tddd�}|�|jdd�jd�|�|jdd�jd�|�|jdd�jd�|�|jdd�jd�|jdtd�}|jdtd�}|�|jdd�jd�|�|jdd�jd�|�t��|jdd�Wd�n1spwY|�t��|jdd�Wd�n1s�wY|�t��|�ddddd�Wd�n1s�wY|�t��|�ddddddddd�	Wd�dS1s�wYdS)Nrr"r�)r�rrrE)	rrr*r�r�r�rur�rvrurrr rks,���"�z(TestLocalTimeDisambiguation.test_replacecCs@td�}tddd�}|�||jdd��|�||jdd��dSrt)rrr*r�rurrr r�2sz+TestLocalTimeDisambiguation.test_comparisoncCsPtd�}tddd�}|�t|�t|jdd���|�t|�t|jdd���dSrt)rrr*r<r�rurrr �	test_hash8s z%TestLocalTimeDisambiguation.test_hashrcCs<d}t�|�}t�|d�}|�|jd�|�|jd�dS)NiX�UTr6rr")rr�r*r�)r+r[�dt0rwrrr r�>s

z.TestLocalTimeDisambiguation.test_fromtimestampzAustralia/Lord_HowecCslt�d�}t�d|�dkr|�d�d}t�|�}t�|d�}|�||�|�|jd�|�|jd�dS)	N�����A�%Z%z�	LHST+1030�>Australia/Lord_Howe timezone is not supported on this platformi�U�rr")rrrr:rr�r*r�)r+�tmr[r	r8rrr �test_fromtimestamp_lord_howeFs


z8TestLocalTimeDisambiguation.test_fromtimestamp_lord_howecCs|�t�d�jd�dSr)r*rr�r�r]rrr �%test_fromtimestamp_low_fold_detectionVszATestLocalTimeDisambiguation.test_fromtimestamp_low_fold_detectioncCs8tddddd�}|jdd�}|�|��d|���dS)NrqrsrEr"r�r�r6)rr�r*r�)r+ryrwrrr �test_timestamp[s
�z*TestLocalTimeDisambiguation.test_timestampcCsht�d�}t�d|�dkr|�d�tddddd	�}|jd
d���}|jdd���}|�|d|�dS)
Nrzr{r|r}rLrGrBr"r?rr�r~)rrrr:rr�r�r*)r+rr��s0�s1rrr �test_timestamp_lord_howebs

z4TestLocalTimeDisambiguation.test_timestamp_lord_howecCs|tddddd�}|jdd�}|��}|��}|�|��d�|�|��d�|�|t|�|�|jd	�|�|jd	�dS)
NrqrsrEr"r�r�rHr�r)rr�rPr*rer�r�)r+ryrwZadt0Zadt1rrr rRlsz+TestLocalTimeDisambiguation.test_astimezonec	Csztdd�}tddddd�}tD]+\}}}||fD]!}|�||�}|�|�}|�||�|�|dkr3dn|j|j�qqdS)Nr"r�rGr)rrr�r�r�r*r�)	r+r�rbr�r�rr�r[r�rrr �test_pickle_fold{s

��z,TestLocalTimeDisambiguation.test_pickle_foldcCs>tdd�}tddddd�}|�t|�d�|�t|�d�dS)Nr"r�zdatetime.time(0, 0, fold=1)z(datetime.datetime(1, 1, 1, 0, 0, fold=1))rrr*r�rurrr r��s

�z%TestLocalTimeDisambiguation.test_reprc	Cs
tddddtd�tj}tddddtd�}|�|��t�|�|��t�|�|jdd���t�|�|jdd���t�dD] }tdddd|td�}|�|��t�|�|jdd���t�q?dD] }tdd	d
d|td�}|�|��t�|�|jdd���t�qbdS)Nr�r#rMr"rrEr�r@rGrD)	rr_rr]r*rfr�r�r�)r+�	dt_summer�	dt_winterr�rbrrr r��s�z$TestLocalTimeDisambiguation.test_dstcCs�tddddtd�tj}tddddtd�}|�|��dt�|�|��dt�|�|jdd	���dt�|�|jdd	���dt�dS)
Nr�r#rMr"rrErHr�r�)rr_rr]r*rcr�r�)r+r�r�rrr r��s z*TestLocalTimeDisambiguation.test_utcoffsetc	Csttddddtd�tj}tddddtd�}t�|�}t�|�}|�||dt�|�||dt�|�|jd	�|�|jd	�tddddd
td�}t�|�}|t7}t�|�}|�||�|�|jd	�|�|jd�tddddd
td�}t�|�}|�|j|j	fd�tddddd
td�}t�|�}|�|j|j	fd
�tddddd	td�}t�|�}|�|j|j	fd�dS)Nr�r#rMrIrrDrGrBrr�r")r�rr)rMr"rE)rIrr)
rr_rr]r�r*r�r�rdr�)	r+Zu_summerZu_winterZt_summerZt_winterr�r	r8r�rrr r��s0






z(TestLocalTimeDisambiguation.test_fromutccCsLtdddtd�}|�||�tj��tdddtd�}|�||�tj��dS)Nr�r"rrI)rr_r*rPrr�rrrr �test_mixed_compare_regular�sz6TestLocalTimeDisambiguation.test_mixed_compare_regularcC�<tdddddtd�}|�tj�}|�||�|�||�dS)Nr�r#rMr"r?r�rr_rPrr�r�)r+�t_foldZ
t_fold_utcrrr �test_mixed_compare_fold��z3TestLocalTimeDisambiguation.test_mixed_compare_foldcCr�)Nr�rGrDrEr?rr�)r+�t_gapZ	t_gap_utcrrr �test_mixed_compare_gap�r�z2TestLocalTimeDisambiguation.test_mixed_compare_gapcCs�tdddtd�}|�t|�t|jdd���tdddddtd�}tdd	d
ddtd�}|�t|�t|jdd���|�t|�t|jdd���dS)Nr�r"rr�r�r#rMr?rGrDrE)rr_r*r<r�)r+r�r�r�rrr �test_hash_aware�s z+TestLocalTimeDisambiguation.test_hash_awareN)r9rLrMrrrsrvrwrkr�rxrr~r�r�r�r�r�rRr�r�r�r�r�r�r�r�r�rrrr ro�s8



	


!rocCs"t�|�\}}t|d�t||�Sr[)r��tee�nextr�)�iterablerrrrr �pairs�s

r�c@s�eZdZdZdd�Zedd��Zedd��Zedd	��Z	e
d
dd���Zdd
�Z
dd�Zdd�Zdd�Zdd�Zed(dd��Zed)dd��Zdd�Zdd�Zed*d d!��Zd"d#�Zd$d%�Zd&d'�ZdS)+�ZoneInfoz/usr/share/zoneinfocCs||_||_|�||�|_dS)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�rrr rZ�s	zZoneInfo.__init__cCs�td|�td|�f}|rT|ddt}|dd|7<|dd|7<tdt|��D]$}|d|||ddt7<|d|||dt7<q/|S)Nr�rr")r�SECrr=)r�r�rrYrrrr r�s$"zZoneInfo.invertc	CsF|�d���dkr
td��|�d�td�}|�|d�tjdkr%|��td�}|�||d�tjdkr:|��td	�}|�||d�g}t	|d
�D]}|�
t�d|�d���qN|�|d
�}t
|�D]\}\}}	}
||
|�d|
����}td|�|	|f||<qhdgt|�}t
|�D]
\}}
||
||<q�|||�}|S)NrGZTZifznot a zoneinfo filertrrAr8rr*r"z>lbbrIrE)�read�decoder��seekr�fromfiler7�	byteorderZbyteswaprr�structZunpackrq�findrr=)rfZfileobjZcountsr�Ztype_indicesZttisrZabbrsZgmtoff�isdstZabbrind�abbrr��idxr+rrr r�s2



zZoneInfo.fromfilecCsHtj�|j|�}t|d��
}|�|�Wd�S1swYdS)N�rb)�os�path�join�zoneroot�openr�)rfr5r�rrrr �fromname3s$�zZoneInfo.fromnamer\r"cCs�t|t�s	td��|j|urtd��|��|jd|jd|jd|j	}||j
dkr7|jd}d}n(t�
|j
|�}|j|d|�\}}|d|d}|td||j
|d�k}||d7}|rm|jdd	�S|S)
rZr[r\rr6r�r"rrEr�)rSrrvrr�r��EPOCHORDINALr�r�r�r�r��bisect�bisect_rightrr�)r+rbr�Zttir�r�Ztti_prev�shiftrrr r�;s,

���
zZoneInfo.fromutccCs\|��|jd|jd|jd|j}|j|j}t�||�}|j	t
d|d�|S)Nrr6r�rr")r�r�r�r�r�rr�r�r�r�ry)r+rbrr�rr�rrr �_find_tiYs���zZoneInfo._find_ticC�|�|d�Sr�r�rarrr rcc�zZoneInfo.utcoffsetcCs|�|d�}|r
tStSrf)r�r�r�)r+rbr�rrr rffszZoneInfo.dstcCr�)NrEr�rarrr renr�zZoneInfo.tznameNccs��|dur|j}tj�|d�}zt|�}Wn
tyYdSw|� |D]}|��}|r9|�d�s9|��dVq%Wd�dS1sEwYdS)Nzzone.tab�#rE)	r�r�r�r�r�r�stripr3r)rfZzonedirZzone_tabr�linerrr �	zonenamesqs"����"�zZoneInfo.zonenamescCs�d}}}}tj}}t}}	tj}
}d}}
tj}}d}}t|dd�}|��D]v}|d7}|�|�}|��D]f\}}||krEq<|tkrp|d7}||f||fkr[|}|}
|}|tj|f|tj|
fkro|}|}|}
q<|tkr�|d7}|}||f|	|fkr�|}	|}|}|tj|f|tj|fkr�|}|}|}q<|d7}q<q-|||f}td|�tdt	|�f|�td||
|f�td|||
f�td|||f�td|	||f�dS)	Nrr"zNumber 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)
rryr�rr�r�r��transitions�printrt)rf�
start_year�countZ	gap_countZ
fold_countZzeros_countZmin_gapZmin_foldZmax_gapZmax_foldZmin_gap_datetimeZmax_gap_datetimeZmin_gap_zoneZmax_gap_zoneZmin_fold_datetimeZmax_fold_datetimeZ
min_fold_zoneZ
max_fold_zoneZstats_since�zonenamer�rbr�Ztrans_countsrrr �stats�s`



��
�
�zZoneInfo.statsccsJ�tt|j|j��D]\\}}\}}|d|d}t�|�|fVq
dSr)r�r�r�r�rr�r+�_Zprev_tir�r�r�rrr r��s
�"�zZoneInfo.transitionsccsp�tt|j|j��D]+\\}}\}}|d|d}|tkr5|d|dkr5t�|�||d|dfVq
dS)zLFind all folds with the same value of isdst on both sides of the transition.rr"rEN)r�r�r�r�r�rrr�rrr �nondst_folds�s�"��zZoneInfo.nondst_foldsFc

Csnd}|��D].}|�|�}|��D]"\}}}}	|j|ks"|r#||	kr#q|d7}td||||||	f�qqdS)Nrr"z%3d) %-30s %s %10s %5s -> %s)r�r�r�r�r�)
rfZ	same_abbrr�r�r�r�rbr�Z	prev_abbrr�rrr �print_all_nondst_folds�s
���zZoneInfo.print_all_nondst_foldsccs,�|��D]\}}|tkr||fVqdSr[�r�r��r+r�r�rrr �folds�s���zZoneInfo.foldsccs*�|��D]
\}}|tkr||fVqdSr[r�r�rrr �gaps�s�
��z
ZoneInfo.gapsccs"�|��D]	\}}|s|VqdSr[)r�r�rrr �zeros�s���zZoneInfo.zerosr[)r")Fr")r9rLrMr�rZrvr��classmethodr�r�rr�r�r�r�rcrfrer�r�r�r�r�r�r�r�rrrr r��s4

$

0r�c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�ZoneInfoTestzAmerica/New_Yorkc
Csxtjdkr
|�d�tjdkr|�d�z
t�|j�|_WdSty;}z|�d|j|f�WYd}~dSd}~ww)N�vxworksz"Skipping zoneinfo tests on VxWorksr%z"Skipping zoneinfo tests on WindowszSkipping %s: %s)r7r�r:r�r�r�r��FileNotFoundError)r+�errrrr r��s



"��zZoneInfoTest.setUpcCs<|�|jdd�|jt|j�f|jdd�|jt|j�f�dS)Nr)r*r�r��idr)r+rrrrr �assertEquivDatetimes�s�z!ZoneInfoTest.assertEquivDatetimesc	Cs�|j}|��D]u\}}d|d||tjfD]E}||}|�|j|d��}|�|jd�|jtj	d��
|�}|�||�|��}|�|jdd�||�|�|�
tj	�|jtj	d��qtj|fD]}||}|j|d�}|�|�}|�|jd�qcqdS)Nrr	rr")
r�r�rr]r�r�r*r�rr�rPr�rc�	r+r�rbr�r��udtr]Zadtrcrrr �
test_folds�s(�
��zZoneInfoTest.test_foldsc	Cs,|j}|��D]�\}}d|d||tjfD]^}||}|j|d�}|�|�}|�|jd�|jtj	d��
|�}|�||�|��}|�|jdd�|jdd�|�|�|j|d��||}|�
|jdd���|jdd���d|�qtj|fD]}||}|�|j|d��}|�|jd�q|qdS)Nrr	rr"r�zAt %s.)r�r�rr]r�r�r*r�rr�rPr�rcZ
assertLessr�rrr �	test_gapss,
 ���zZoneInfoTest.test_gapsc	Cs�d|jvs|j�d�r|�d|j�|j}tj�d�}|jtjd<z�t��|�	�D]{\}}|j
dkr6nq|tddd�t}|t}dd	d
d|d|d|d
fD]%}||}t�
|�}	t�
||�jdd�}
|�|	|
�|	��}|�||�qS|dkr�t�
|�|d}|��}
|jdd���}|�|
||d�|�|||d�q+W|dur�tjd=n|tjd<t��dS|dur�tjd=n|tjd<t��w)NZRiyadh8zright/zSkipping %s�TZi�r\r"i���i��r�ri@i�2rrEr�)r�r3r:r�r��environ�getr�tzsetr�r�rr�r�r�r�r�r*)r+r�r�r�r�r�r�r�r[ZsdtZtzdtr�rbZts0Zts1rrr �test_system_transitionssL

�
�
�

�


z$ZoneInfoTest.test_system_transitionsN)	r9rLrMr�r�r�r�r�r�rrrr r��s
r�cseZdZ�fdd�Z�ZS)�ZoneInfoCompleteTestcshg}td�r,t��D]!}td|tfi�}||_t|�D]}|�d�r*|�||��qq
t	��
|�dS)NZtzdatazZoneInfoTest[%s]Ztest_)r
r�r�r�r�r�r-r3r�superrZ)r+r�r5ZTest�method�r8rr rZEs
��zZoneInfoCompleteTest.__init__)r9rLrMrZ�
__classcell__rrr�r r�Dsr�c@r�)�IranTestzAsia/TehranN)r9rLrMr�rrrr r�Qr�r�c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+S),�CapiTestcCs$|jj�d�r|�d�t��dS)NZPurezNot relevant in pure Python)r8r9r4r:�	_testcapiZtest_datetime_capir]rrr r�Vs
zCapiTest.setUpc	CsRdD]$}t�|�}|j|d��|�|tj�Wd�n1s!wYqdS)N�TF)�	use_macro)r�Zget_timezone_utc_capir�r�rr�)r+r�Zcapi_utcrrr �
test_utc_capi_s
���zCapiTest.test_utc_capic
	Cs�t��\}}}ttdd�d�}ttdd��}d||fd||fd||fg}|D]U\}}}	|j|d��B|�||	�tdd	d
|d�}
tdd	d
|	d�}|�|
|�|�|
��|���tdd	d
dtjd�}|�|
�	tj�|�Wd�n1svwYq&dS)
Nr�r�r��est_capi�	est_macro�est_macro_nn)r5r�rErGrrB)
r�Zmake_timezones_capirrr�r*rrer�rP)
r+r�r�r�Z	exp_namedZexp_unnamed�casesr5Ztz_actZtz_exprwr�rQrrr �test_timezones_capifs&����zCapiTest.test_timezones_capic
C�Gdd�dt�}t|fD]?}dD]:}||�}|j||d��%t�|�\}}}|�||j�|�||j�|�||j�Wd�n1sEwYqqdS)Nc@rz)z=CapiTest.test_PyDateTime_DELTA_GET.<locals>.TimeDeltaSubclassNr{rrrr �TimeDeltaSubclass�r}r�)�r��7韆r��rfr)rr�r�ZPyDateTime_DELTA_GETr*r�r�r�)r+r��klassr�r>r�r�r�rrr �test_PyDateTime_DELTA_GET������z"CapiTest.test_PyDateTime_DELTA_GETc
Cr�)Nc@rz)z2CapiTest.test_PyDateTime_GET.<locals>.DateSubclassNr{rrrr r|�r}r|))r�r"rE)rlrEr�r�)rr�r�ZPyDateTime_GETr*r�r�rd)r+r|r�r�r>r�r�rdrrr �test_PyDateTime_GET�r�zCapiTest.test_PyDateTime_GETc

Cs�Gdd�dt�}t|fD]Z}ddddddd	d
tjffD]J}||�}|j||d��5t�|�\}}}}}	|�||j�|�||j�|�||j	�|�||j
�|�|	|j�Wd�n1s`wYqqdS)Nc@rz)z;CapiTest.test_PyDateTime_DATE_GET.<locals>.DateTimeSubclassNr{rrrr r��r}r�)��r�r�r�r�r�r�r�r�r�r�r�r�r�r�)
rrr�r�r�ZPyDateTime_DATE_GETr*r�r�r�r�r�r)
r+r�r�r�r>r�r�r�r�rrrr �test_PyDateTime_DATE_GET�s(�������z!CapiTest.test_PyDateTime_DATE_GETc

Cs�Gdd�dt�}t|fD]W}dddddtjffD]J}||�}|j||d��5t�|�\}}}}}	|�||j�|�||j�|�||j	�|�||j
�|�|	|j�Wd�n1s]wYqqdS)	Nc@rz)z7CapiTest.test_PyDateTime_TIME_GET.<locals>.TimeSubclassNr{rrrr r��r}r�)r�r�r�r#r�r�r�r#r�)
rrr�r�r�ZPyDateTime_TIME_GETr*r�r�r�r�r�r)
r+r�r�r�r>r�r�r�r�rrrr �test_PyDateTime_TIME_GET�s$������z!CapiTest.test_PyDateTime_TIME_GETcCst��\}}}|jdd��|�|tj�Wd�n1swY|jdd��|�|tj�Wd�n1s<wY|jdd��>|�|tj�ttdd�d�}|�||�t	dd	d
|d�}t	dd	d
|d�}|�||�|�|�
�|�
��Wd�dS1s�wYdS)N�utc0)Ztestname�utc1�non_utcrr�r�r�rErGr)r�Zget_timezones_offset_zeror�r�rr�r�rr*rre)r+r�r�r�Znon_utc_exprwr�rrr �test_timezones_offset_zero�s ��"�z#CapiTest.test_timezones_offset_zeroc	
CsGdd�dt�}tddd�}|ddd�}tddd�}tj}|�||��|�||��|�||��|�||d��|�||d��|�||d��t�t�ddtd�t	j
tdd�g}|D]&}d	D]!}|j||d
��|�|||��Wd�n1s}wYqaq]dS)Nc@rz)z.CapiTest.test_check_date.<locals>.DateSubclassNr{rrrr r|�r}r|��r"T�
2011-01-01r�rr���arg�exact)
rrr�Zdatetime_check_dater}r�r�r�rrr�rr�)	r+r|r>ZdsrbZis_dater�r�r�rrr �test_check_date�s,�����zCapiTest.test_check_datec
Cs�Gdd�dt�}tdd�}|dd�}tj}|�||��|�||��|�||d��|�||d��t�t�ddtd�tj	t
ddd�g}|D]&}d	D]!}|j||d
��|�|||��Wd�n1sgwYqKqGdS)Nc@rz)z.CapiTest.test_check_time.<locals>.TimeSubclassNr{rrrr r��r}r�r�r�Tr"r�r�r�r�)rr�Zdatetime_check_timer}r�r�r�rrr�rr�)r+r�r�r�Zis_timer�r�r�rrr �test_check_time�s&

�����zCapiTest.test_check_timec
Cs�Gdd�dt�}tddddd�}|ddddd�}tj}|�||��|�||��|�||d��|�||d��t�t�ddtd�tj	t
ddd�g}|D]&}d	D]!}|j||d
��|�|||��Wd�n1smwYqQqMdS)Nc@rz)z6CapiTest.test_check_datetime.<locals>.DateTimeSubclassNr{rrrr r�r}r�r�r"r�r�Tr�r�r�)rr�Zdatetime_check_datetimer}r�r�r�rrr�rr�)r+r�rbr^Zis_datetimer�r�r�rrr �test_check_datetime
s&�����zCapiTest.test_check_datetimec
Cs�Gdd�dt�}td�}|d�}tj}|�||��|�||��|�||d��|�||d��t�t�ddtjt	ddd�t
ddd�g}|D]&}dD]!}|j||d��|�|||��Wd�n1sgwYqKqGdS)	Nc@rz)z4CapiTest.test_check_delta.<locals>.TimeDeltaSubclassNr{rrrr r�(r}r�r"Tr�r�r�r�)rr�Zdatetime_check_deltar}r�r�r�rr�rrr�)r+r�rZtdsZis_timedeltar�r�r�rrr �test_check_delta's&�����zCapiTest.test_check_deltac	
CsGdd�dt�}t�}|�}ttdd��}tj}|�||��|�||��|�||��|�||d��|�||d��|�||d��t�t�ddt	ddd�t
ddd�g}|D]&}d	D]!}|j||d
��|�|||��Wd�n1sywYq]qYdS)Nc@rz)z2CapiTest.test_check_tzinfo.<locals>.TZInfoSubclassNr{rrrr �TZInfoSubclassBr}rr�r�Tr"r�r�r�r�)rrrr�Zdatetime_check_tzinfor}r�r�r�rrr�)	r+rr�Ztzisr�Z	is_tzinfor�r�r�rrr �test_check_tzinfoAs,�����zCapiTest.test_check_tzinfoc	C�htddd�}dD])}|j|d��t�||j|j|j�}|�||�Wd�n1s,wYqdS)Nr�r�r��FT��macro)rr�r�Zget_date_fromdater�r�rdr*�r+�exp_dater�
c_api_daterrr �test_date_from_date^�����zCapiTest.test_date_from_datecCs�tddddddd�}dD]1}|j|d	��!t�||j|j|j|j|j|j	|j
�}|�||�Wd�n1s8wYqdS)
Nr�r�r�r�r�r�r�rr)rr�r�Zget_datetime_fromdateandtimer�r�rdr�r�r�r�r*rrrr �test_datetime_from_dateandtimeks"�
���z'CapiTest.test_datetime_from_dateandtimecCs�tddddddd�}dD]A}d	D]<}|j||d
��+t�||j|j|j|j|j|j	|j
|j�	}|�||�|�|j|j�Wd�n1sGwYqqdS)Nr�r�r�r�r�r�r��rr"r�rr�)
rr�r�Z#get_datetime_fromdateandtimeandfoldr�r�rdr�r�r�r�r�r*)r+rr�rr	rrr �%test_datetime_from_dateandtimeandfold|s*�����z.CapiTest.test_datetime_from_dateandtimeandfoldc	Csntdddd�}dD]+}|j|d��t�||j|j|j|j�}|�||�Wd�n1s/wYq	dS)Nr�r�r�r�rr)	rr�r�Zget_time_fromtimer�r�r�r�r*)r+�exp_timer�
c_api_timerrr �test_time_from_time�s����zCapiTest.test_time_from_timecCs�tdddd�}dD];}dD]6}|j||d��%t�||j|j|j|j|j�}|�	||�|�	|j|j�Wd�n1s>wYq
q	dS)Nr�r�r�r�r
rr)
rr�r�Zget_time_fromtimeandfoldr�r�r�r�r�r*)r+rr�rrrrr �test_time_from_timeandfold�s$�����z#CapiTest.test_time_from_timeandfoldc	Cr)Nr�r�r�rr)rr�r�Zget_delta_fromdsur�r�r�r*)r+Z	exp_deltarZc_api_deltarrr �test_delta_from_dsu�rzCapiTest.test_delta_from_dsuc	Csntddd���}dD]*}|j|d��t�t|�|�}|�|tddd��Wd�n1s/wYq
dS)N��rGr�rr)rr�r�r�Zget_date_fromtimestamprTr*r)r+r�rr>rrr �test_date_from_timestamp�s���z!CapiTest.test_date_from_timestampc
Cs�dddttdd��dfddd	ttdd��dfg}tj}|D]=}d
D]8}|j||d��'|\}}}t|d|i�}t|���}	||	|||�}
|�||
�Wd�n1sTwYq!qdS)
N)�rrGr�NF)rNTrr"r�T)�rrGr�r
r�NF)rNTrr)�caserr)	rrr�Zget_datetime_fromtimestampr�rrTr�r*)r+r�r*rrZdtuprZusetzZdt_origr�r�rrr �test_datetime_from_timestamp�s(�	
����z%CapiTest.test_datetime_from_timestampN)r9rLrMr�r�r�r�r�r�r�r�r�r�r�rrr
rrrrrrrrrrr r�Us,	

	r�cCs|�t��|Sr[)ZaddTestr�)�loaderZstandard_tests�patternrrr �
load_tests�sr�__main__)lr�r�r�r�r�rWr7r�rrmrzr�rr�operatorrrrrrrr	r
r�testrZtest.supportr
rrrrr)rrrrrrrrr�r0r�Z_loadsrRrr�r�rNr�rgr+ZTestCaser'rNrhrlrpr�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r2r�r:r*r+rr�r0r1r2r<r=r3rLrYr^r_r`rarbrcror�r�r�r�Z	TestSuiter�r�r�rr9�mainrrrr �<module>s,�8_A3=!a"<


*M"32
gk


�