Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/test/test_zoneinfo/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/test/test_zoneinfo/__pycache__/test_zoneinfo.cpython-312.pyc

�

*Μg:���ddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlmZmZmZmZmZddlmZddlmZddlmZddlmZmZm Z ddl!m"Z"m#Z#e"d	�Z$ejJ�\Z&Z'	ejPjQd
�dZ)da+da,da-e
j\e/�j`d
zZ1e1dzZ2ed�Z3ed��Z4d�Z5d�Z6Gd�d�Z7Gd�d�Z8Gd�de7e �Z9Gd�de9�Z:Gd�de8e9�Z;Gd�de8e:�Z<Gd�d e9�Z=Gd!�d"e=�Z>Gd#�d$e9�Z?Gd%�d&e?�Z@ej�e)d'�Gd(�d)e9��ZBej�e)d'�Gd*�d+eB��ZCGd,�d-e �ZDGd.�d/eD�ZEGd0�d1e �ZFGd2�d3eF�ZGGd4�d5e7e �ZHGd6�d7eH�ZIGd8�d9e7e �ZJGd:�d;eJ�ZKGd<�d=e �ZLGd>�d?eL�ZMGd@�dAe7e �ZNGdB�dCeN�ZOGdD�dEe �ZPGdF�dGeP�ZQGdH�dIej��ZSej�d�J�GdK�dL��ZUej�d�J�GdM�dN��ZVGdO�dP�ZWGdQ�dR�ZXeYdSk(rej��yy#ejPjT$rdZ)Y��0wxYw)T�)�annotationsN)�date�datetime�time�	timedelta�timezone)�cached_property)�MISSING_C_DOCSTRINGS)�_support)�OS_ENV_LOCK�TZPATH_TEST_LOCK�ZoneInfoTestBase)�
import_module�CleanImport�lzma�tzdataTF�datazzoneinfo_data.json���hoursc��tjtjd���atttdz�atttdzd��ay)N�zoneinfo)�prefix�v2�v1T)r)	�pathlib�Path�tempfile�mkdtemp�TEMP_DIR�ZoneInfoData�
ZONEINFO_JSON�
ZONEINFO_DATA�ZONEINFO_DATA_V1���=/usr/local/lib/python3.12/test/test_zoneinfo/test_zoneinfo.py�setUpModuler(-s@��
�|�|�H�,�,�J�?�@�H� ���4��@�M�#�M�8�d�?�t�L�r&c�6�tjt�y�N)�shutil�rmtreer r%r&r'�tearDownModuler-7s��
�M�M�(�r&c�B��eZdZdZed��Zed��Z�fd�Z�xZS)�TzPathUserMixinaH
    Adds a setUp() and tearDown() to make TZPATH manipulations thread-safe.

    Any tests that require manipulation of the TZPATH global are necessarily
    thread unsafe, so we will acquire a lock and reset the TZPATH variable
    to the default state before each test and release the lock after the test
    is through.
    c��yr*r%��selfs r'�tzpathzTzPathUserMixin.tzpathE���r&c��y)NTr%r1s r'�block_tzdatazTzPathUserMixin.block_tzdataIr4r&c�<��tj�5}|j|j|j|j
t���|j|j�j�ddd�t�|�-�y#1swY�xYw)N)r6�lock)�
contextlib�	ExitStack�
enter_context�tzpath_contextr3r6r
�
addCleanup�pop_all�close�super�setUp�r2�stack�	__class__s  �r'rAzTzPathUserMixin.setUpMsx���
�
!�
!�
#�u�����#�#��K�K�!%�!2�!2�)�$��
�
�O�O�E�M�M�O�1�1�2�$�	��
��$�
#�s�A%B�B)	�__name__�
__module__�__qualname__�__doc__�propertyr3r6rA�
__classcell__�rDs@r'r/r/;s:�������������r&r/c�8��eZdZdZGd�de�Z�fd�Z�xZS)�DatetimeSubclassMixinzP
    Replaces all ZoneTransition transition dates with a datetime subclass.
    c��eZdZed��Zy)�&DatetimeSubclassMixin.DatetimeSubclassc���||j|j|j|j|j|j
|j|j|j��	S)N)�tzinfo�fold)	�year�month�day�hour�minute�second�microsecondrQrR)�cls�dts  r'�
from_datetimez4DatetimeSubclassMixin.DatetimeSubclass.from_datetimeasN����������������	�	��	�	�����y�y��W�W�
�

r&N)rErFrG�classmethodr\r%r&r'�DatetimeSubclassrO`s��	�	�
�	r&r^c#��K�t�|�|�}|D]D}|j}|jj	|�}tj||��}|���Fy�w)N)�
transition)r@�load_transition_examplesr`r^r\�dataclasses�replace)r2�key�transition_examples�ztr[�new_dt�new_ztrDs       �r'raz.DatetimeSubclassMixin.load_transition_examplesosW�����#�g�>�s�C��%�B����B��*�*�8�8��<�F� �(�(���?�F��L�	&�s�AA)rErFrGrHrr^rarJrKs@r'rMrM[s����
�8�
��r&rMc���eZdZeZdZ�fd�Zed��Zed��Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z�xZS)�ZoneInfoTest�ZoneInfoc�V��t�|��|jj�yr*)r@rA�klass�clear_cache�r2rDs �r'rAzZoneInfoTest.setUp|s���
��
��	
�
�
��� r&c��tSr*�r#r1s r'�
zoneinfo_datazZoneInfoTest.zoneinfo_data�����r&c�0�|jjgSr*�rrr3r1s r'r3zZoneInfoTest.tzpath�����"�"�)�)�*�*r&c�$�|j|�Sr*�rm�r2rds  r'�
zone_from_keyzZoneInfoTest.zone_from_key�s���z�z�#��r&c�*�tj�Sr*)�ZoneDumpData�transition_keysr1s r'�zoneszZoneInfoTest.zones�s���+�+�-�-r&c�*�tj�Sr*)r|�fixed_offset_zonesr1s r'r�zZoneInfoTest.fixed_offset_zones�s���.�.�0�0r&c�,�tj|�Sr*)r|rarys  r'raz%ZoneInfoTest.load_transition_examples�s���4�4�S�9�9r&c�J�|j�D]H}|j|�5|j|�}|jt	|�|�ddd��J|j
jd}|j
j|�}t|d�5}|jd|��5|jj|�}|jt	|�t|��ddd�ddd�y#1swY��xYw#1swY�xYw#1swYyxYw)Nr�rbz	Repr test)�	test_name�path)r~�subTestrz�assertEqual�strrr�keys�
path_from_key�openrm�	from_file�repr)r2rd�zi�file_key�	file_path�f�zi_ffs       r'�test_strzZoneInfoTest.test_str�s����:�:�<�C����c�"��'�'��,��� � ��R��#�.�#�"� ��%�%�*�*�1�-���&�&�4�4�X�>�	�
�)�T�
"�a�����)��D��
�
�,�,�Q�/��� � ��U��T�%�[�9�E�#�
"�#�"��E�D��#�
"�s0�-D�D�0AD
�0D�D
	�
D	�D�D"c�l�tt|j���}|j|�}|j}|jd��5|j
t|�|�ddd�|jjd}|jj|�}t|d�5}|jj||��}ddd�|jd��5|j
t�|�ddd�t|d�5}|jj|�}ddd�|jd��5|j
t�|�ddd�y#1swY��
xYw#1swY��xYw#1swY��xYw#1swY�exYw#1swYyxYw)Nzfrom key)�namerr��rdzfrom file with keyzfrom file without key)
�next�iterr~rm�
class_namer��assertRegexr�rrr�r�r�r�)	r2rdr�r�r�r�r�r��zi_ff_nks	         r'�	test_reprzZoneInfoTest.test_repr�sY���4��
�
��%�&��
�Z�Z��_���_�_�
�
�\�\�z�\�
*����T�"�X�z�2�+��%�%�*�*�1�-���&�&�4�4�X�>�	�
�)�T�
"�a��J�J�(�(���(�9�E�#��\�\�3�\�
4����T�%�[�*�5�5��)�T�
"�a��z�z�+�+�A�.�H�#��\�\�6�\�
7����T�(�^�Z�8�8�
7�+�
*��
#�
"��5�
4��#�
"��8�
7�s<�E9�6F�.F�F�F*�9F�F�F�F'�*F3c�
��tt�j���}�fd�}d�j|fd�jj|fd|dff}|D]�\}}}||�}�j|�5�j
|j|�ddd��j|�d��5�jt�5d|_ddd�ddd���y#1swY�NxYw#1swY� xYw#1swY��xYw)Nc���t�jj|�d�5}�jj	|�cddd�S#1swYyxYw)Nr�)r�rrr�rmr�)rdr�r2s  �r'�from_file_nokeyz8ZoneInfoTest.test_key_attribute.<locals>.from_file_nokey�s?����d�(�(�6�6�s�;�T�B�a��z�z�+�+�A�.�C�B�B�s�A�AzPrimary constructor�no_cacher�z
: readonlyz
Some/Value)
r�r�r~rmr�r�r�rd�assertRaises�AttributeError)r2rdr��constructors�msg�constructor�expectedr�s`       r'�test_key_attributezZoneInfoTest.test_key_attribute�s�����4��
�
��%�&��	/�
#�D�J�J��4�
����,�,�c�2�
�/�4�0�
��+7�&�C��h��S�!�B����c�"�� � �����2�#������Z�0�1��&�&�~�6�)�B�F�7�2�1�+7�#�"��
7�6��2�1�s0�7C!�0C9�C-�C9�!C*	�-C6�2C9�9D	c��gd�}|D]A}|j|jj�5|j|�ddd��Cy#1swY�NxYw)N)zEurasia/Badzone�BZQzAmerica.Los_Angelesu🇨🇦uAmerica/New�York)r��module�ZoneInfoNotFoundErrorrm�r2�bad_keys�bad_keys   r'�
test_bad_keyszZoneInfoTest.test_bad_keys�sI��
�� �G��"�"�4�;�;�#D�#D�E��
�
�7�#�F�E� �E�E�s�A�A	c��gd�}|D]1}|jt�5|j|�ddd��3y#1swY�>xYw)N)z/America/Los_AngeleszAmerica/Los_Angeles/z../zoneinfo/America/Los_AngeleszAmerica/../America/Los_AngeleszAmerica/./Los_Angeles)r��
ValueErrorrmr�s   r'�test_bad_keys_pathsz ZoneInfoTest.test_bad_keys_paths�s>��
�� �G��"�"�:�.��
�
�7�#�/�.� �.�.�s	�<�A	c���ddg}|D]P}tj|�}|jt�5|jj|�ddd��Ry#1swY�]xYw)Nr&sAAAA3               )�io�BytesIOr�r�rmr�)r2�	bad_zones�bad_zone�fobjs    r'�test_bad_zoneszZoneInfoTest.test_bad_zones�sX��� �
�	�
"�H��:�:�h�'�D��"�"�:�.��
�
�$�$�T�*�/�.�"�.�.�s�A�A$	c��tt|j���}|j|�}t	dddt
j��tft	ddd�tftddd�tftd�tfdtfdtfg}|D]K\}}|j|��5|j|�5|j|�ddd�ddd��My#1swY�xYw#1swY�dxYw)N��r�rQrz
2019-01-01)�val)r�r�r~rzrr�utcr�r�	TypeErrorrr�r��fromutc)r2rd�zone�
bad_valuesr��exc_types      r'�test_fromutc_errorsz ZoneInfoTest.test_fromutc_errors�s����4��
�
��%�&���!�!�#�&���d�A�q����
6�
�C�
�d�A�q�
!�:�.�
�$��1�
�y�)�
�!�W�i� �
�	�N�
�9�%�

�
�(�M�C�����#��&��&�&�x�0��L�L��%�1�'�&�(�0�0��'�&�s$�4C7�C+�C7�+C4�0C7�7D	c��|jd�}tddd|��}|j|j�t�|j|j�t�|j|j
�d�y)N�UTC��rr�)rmrr��	utcoffset�ZERO�dst�tzname)r2r�r[s   r'�test_utczZoneInfoTest.test_utcsb��
�Z�Z��
��
�d�A�q��
,����������.��������4�(��������e�,r&c	���g}|j�D]�}|j|�D]l}|j||jt	d��z
|j
f�|j||jt	d��z|jf��n��|D]�\}}}|j|||��5|j|�}|j|��}|j|j�|j|�|j|j�|j|�|j|j�|j|�ddd���y#1swY��xYw)N�)�days)rdr[�offsetr�)r~ra�appendr`r�
offset_before�offset_afterr�rzrcr�r�r�r�)r2�
test_casesrd�zone_transitionr[r��tzis       r'�test_unambiguouszZoneInfoTest.test_unambiguouss<���
��:�:�<�C�#'�#@�#@��#E���!�!��'�2�2�Y�A�5F�F�'�5�5����!�!��'�2�2�Y�A�5F�F�'�4�4���$F� �$ *�O�C��V����#�"�V��<��(�(��-���Z�Z�s�Z�+��� � �����f�m�m�R�@�� � ������1A�1A�2�F�� � �����6�:�:�r�:�
=�<� *�<�<�s
�5B%E%�%E.	c��g}|j�D�]X}ggd�}|j|�D�]}|jr|d}n|jr|d}nd}�+|jtd��z
}|j
|d|jf�|j
|d|jf�|j}|j
|d|jf�|j
|d|jf�|jtd��z}|j
|d|jf�|j
|d|jf�|jtd��z
}|j
|d|jf�|j
|d|jf�|j}|j
|d|jf�|j
|d|jf�|jtd��z}|j
|d|jf�|j
|d|jf���|j�D]\}}|j
||f|f����[|D]�\\}}}|j||��5|j|�}	|D]�\}}
}|j|
|	��}|j|j�|j|�|j|j!�|j |�|j|j#�|j"|���	ddd���y#1swY��xYw)	N)�folds�gapsr�r�r��secondsr)rd�grp�rRrQ)r~rarR�gap�
anomaly_startrr�r�r��anomaly_end�itemsr�rzrcr�r�r�r�)r2r�rd�testsrf�
test_group�no_peephole_optr[r�r�rRr�s            r'�test_folds_and_gapsz ZoneInfoTest.test_folds_and_gaps5s����
��:�:�<�C� �"�-�E��3�3�C�8���7�7�!&�w��J��V�V�!&�v��J�
'+�O���%�%�	�!�(<�<���!�!�2�q�"�*:�*:�";�<��!�!�2�q�"�*:�*:�";�<��%�%���!�!�2�q�"�*:�*:�";�<��!�!�2�q�"�/�/�":�;��%�%�	�!�(<�<���!�!�2�q�"�*:�*:�";�<��!�!�2�q�"�/�/�":�;��^�^�i��&:�:���!�!�2�q�"�*:�*:�";�<��!�!�2�q�"�/�/�":�;��^�^���!�!�2�q�"�/�/�":�;��!�!�2�q�"�/�/�":�;��^�^�i��&:�:���!�!�2�q�"�/�/�":�;��!�!�2�q�"�/�/�":�;�G9�J$)�;�;�=���Z��!�!�C��:�z�":�;�$1�O �T",��J�S�#�����#�3��/��(�(��-��(-�$�B��f�����c��:�B��$�$�R�Y�Y�[�&�-�-��D��$�$�R�\�\�^�V�5E�5E�r�J��$�$�R�V�V�X�v�z�z�2�>�).�0�/�",�/�/�s
�
B1M
�
M	c	��|j�D]�}|j|�}|j|��5|j|�D]�}|js�|j
}|t
d��z
}|t
d��z}|j|�}|j|jd||f�|j|�}|j|jd||f���	ddd���y#1swY��xYw)Nr�rr�r)	r~rzr�rarR�transition_utcr�
astimezoner�)	r2rdr�rf�dt_utc�
dt_before_utc�dt_after_utc�	dt_before�dt_afters	         r'�test_folds_from_utcz ZoneInfoTest.test_folds_from_utcls����:�:�<�C��#�#�C�(�B����#��&��7�7��<�B��7�7� ��.�.�F�$*�Y�q�-A�$A�M�#)�I�a�,@�#@�L� -� 8� 8�� <�I��$�$�Y�^�^�Q��F�8K�L�+�6�6�r�:�H��$�$�X�]�]�A��&�7I�J�=�'�&� �&�&�s�B.C1�1C:	c�~�|j�D]�}|j|�}tdddd|��}|j|��5|j	|j�d�|j	|j
�d�|j	|j�d�ddd���y#1swY��xYw�N��ri��r�r�)r~rzrr��assertIsr�r�r�)r2rdr��ts    r'�test_time_variable_offsetz&ZoneInfoTest.test_time_variable_offset~s����:�:�<�C��#�#�C�(�B��R��Q��b�1�A����#��&��
�
�a�h�h�j�$�/��
�
�a�k�k�m�T�2��
�
�a�e�e�g�t�,�'�&�	 �'�&�s
�A!B3�3B<	c��|j�D]�\}}|j|�}tdddd|��}|j|��5|j	|j�|j
�|j	|j
�|j�|j	|j�|j�ddd���y#1swY��xYwr�)r�rzrr�r�r�r�r�)r2rdr�r�r�s     r'�test_time_fixed_offsetz#ZoneInfoTest.test_time_fixed_offset�s����2�2�4�K�C���#�#�C�(�B��R��Q��b�1�A����#��&�� � �����V�]�]�;�� � ������0@�0@�A�� � �����&�*�*�5�'�&�5�
'�&�s
�
A?C�C	)rErFrG�py_zoneinfor�r�rArIrrr3rzr~r�rar�r�r�r�r�r�r�r�r�r�r�r�r�rJrKs@r'rjrjxs����
�F��J�!������+��+��.�1�:�:�"9�0*�2$�$�	+�&�$-�;�:5?�nK�$	-�	6r&rjc�H�eZdZeZejed�d��Zd�Z	y)�
CZoneInfoTestz6Signature information for builtins requires docstringsc� �ddl}|jj|jj|jjf}|D]8}|j|��5|jj|�ddd��:y#1swY�ExYw)z1Ensure that C module has valid method signatures.rN)�method)�inspectrmrnr�r�r��	Signature�
from_callable)r2r��must_have_signaturesr�s    r'�test_signatureszCZoneInfoTest.test_signatures�su��	�
�J�J�"�"��J�J����J�J� � � 
��
+�F����V��,��!�!�/�/��7�-�,�+�,�,�s�B�B
	c��d�}ddg}d}|j|�}|j|�D]J}|js�|jjt
k(s�.|jj|��}ndD]s}|r	|�}n}|j|��5|j|�}|j|jd�|j|jd	�d
d
d
��uy
#1swY��xYw)a:Test that fold isn't mutated when no change is necessary.

        The underlying C API is capable of mutating datetime objects, and
        may rely on the fact that addition of a datetime object returns a
        new datetime; this test ensures that the input datetime to fromutc
        is not mutated.
        c��Gd�dt|��}||j|j|j|j|j
|j|j|j|j��	S)Nc���eZdZ�fd�Z�xZS)�LCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclassc�B��|td�k(r|St�|�	|�S�Nr)rr@�__add__)r2�otherrDs  �r'r	zTCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclass.__add__�s#����	�!��,�#�� �7�?�5�1�1r&)rErFrGr	rJrKs@r'�SameAddSubclassr�s
���2�2r&rr�)
�typerSrTrUrVrWrXrYrRrQ)r[rs  r'�to_subclassz3CZoneInfoTest.test_fold_mutate.<locals>.to_subclass�s`��
2�$�r�(�
2�#��������������	�	��	�	�����W�W��y�y�
�

r&FT�
Europe/Londonr�)FT)�subclassrrN)rzrarRr�r�r�r�rcr�r�r�)	r2r
rrdr�rf�exampler[�
dt_fromutcs	         r'�test_fold_mutatezCZoneInfoTest.test_fold_mutate�s���	�(�4�=����
�
�
��
$���/�/��4�B��w�w�2�?�?�4�4��<��+�+�3�3�2�3�>���5�
&�H�� ��)�������x��0��Z�Z��^�
�� � ����!�4�� � ����!�,�	1�0�
&�1�0�s
�A
C2�2C;	N)
rErFrG�
c_zoneinfor��unittest�skipIfr
rrr%r&r'r�r��s1��
�F��X�_�_�)�M�O�8�O�8�0-r&r�c��eZdZy)�ZoneInfoDatetimeSubclassTestN�rErFrGr%r&r'rr����r&rc��eZdZy)�CZoneInfoDatetimeSubclassTestNrr%r&r'rr�rr&rc�.��eZdZe�fd��Zd�Z�xZS)�ZoneInfoSubclassTestc���t�|��Gd�d|j�}d|_|j|_||_y)Nc��eZdZy)�3ZoneInfoSubclassTest.setUpClass.<locals>.ZISubclassNrr%r&r'�
ZISubclassr �s��r&r!)r@�
setUpClassrmr��parent_klass)rZr!rDs  �r'r"zZoneInfoSubclassTest.setUpClass�s:���
����	����	�&����9�9�����	r&c���|jd�}|jd�}|j||�|j||j�|j||j�y)Nr)r#rm�assertIsNot�assertIsInstance)r2�base_obj�sub_objs   r'�test_subclass_own_cachez,ZoneInfoSubclassTest.test_subclass_own_cache�sZ���$�$�_�5���*�*�_�-������7�+����h��(9�(9�:����g�t�z�z�2r&)rErFrGr]r"r)rJrKs@r'rr�s�������3r&rc��eZdZeZy)�CZoneInfoSubclassTestN�rErFrGrr�r%r&r'r+r+����
�Fr&r+c�"�eZdZed��Zd�Zy)�ZoneInfoV1Testc��tSr*)r$r1s r'rrzZoneInfoV1Test.zoneinfo_data�s���r&c#�K�tddd�}td��}||z
}||z}tj|�D]}||jcxkr|ks�n�|���!y�w)N�r�r�)rrr|rar`)r2rd�epoch�
max_offset_32�min_dt�max_dtrfs       r'raz'ZoneInfoV1Test.load_transition_exampless_������q�!�$��!�'�2�
���&����&���7�7��<�B�����0�&�0���=�s�AA�
AN)rErFrGrIrrrar%r&r'r/r/�s��
� �� �
r&r/c��eZdZeZy)�CZoneInfoV1TestNr,r%r&r'r9r9
r-r&r9z4Skipping tzdata-specific tests: tzdata not installedc�6�eZdZdZed��Zed��Zd�Zy)�TZDataTestsa5
    Runs all the ZoneInfoTest tests, but against the tzdata package

    NOTE: The ZoneDumpData has frozen test data, but tzdata will update, so
    some of the tests (particularly those related to the far future) may break
    in the event that the time zone policies in the relevant time zones change.
    c��gSr*r%r1s r'r3zTZDataTests.tzpaths���	r&c��y)NFr%r1s r'r6zTZDataTests.block_tzdata!s��r&c�&�|j|��S)Nr�rxrys  r'rzzTZDataTests.zone_from_key%s���z�z�c�z�"�"r&N)rErFrGrHrIr3r6rzr%r&r'r;r;s4�����������#r&r;c��eZdZeZy)�CTZDataTestsNr,r%r&r'r@r@)s	���Fr&r@c�B�eZdZeZd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd
d	�Zy)�
WeirdZoneTestc
�l�tdtddd���}tdtd���}ttddd	d
�||�g}d}|j	||�}|j
j
|�}tddd	d|�
�}tdddd|�
�}||f||ffD]�\}	}
|jd|	��5|j|	j�|
j�|j|	j�|
j�|j|	j�|
j�ddd���tddd	d|�
�tddd	dddtj�
�ftdddd|�
�tddddtj�
�fg}|D]u\}}
|jd|��5|
j|�}|j||�|jtj�}|j||
�ddd��wy#1swY���xYw#1swY��xYw)N�LMT��r�)r�minutesr��STDr�[�	��STD6rr��
�local)r�r[������r�)�
ZoneOffsetr�ZoneTransitionr�construct_zonermr�r�r�r�r�r�rr�r�)r2rDrH�transitions�after�zfr��dt0�dt1r[r��dts�dt_localr��	dt_actual�
dt_utc_actuals                r'�test_one_transitionz!WeirdZoneTest.test_one_transition3s������B��!J� J�K������!3� 3�4��
�8�D�!�Q��3�S�#�>�
����
�
 �
 ��e�
4��
�Z�Z�
!�
!�"�
%���t�Q��1�R�0���t�Q��A�b�1����:��S�z�2�J�B�����7�r��2�� � �����f�m�m�<�� � ������1A�1A�B�� � �����6�:�:�6�3�2�3���q�!�Q�r�2���q�!�Q��A�h�l�l�C�
�
��q�!�R��3���q�!�R����=�
�	
��!$��H�f����9���:�"�-�-�b�1�	�� � ��H�5� (� 3� 3�H�L�L� A�
�� � ���7�;�:�!$�!3�2��";�:�s�;A?H�=AH*�H'	�*H3	c	��tdtt�}ttddd�||�g}d}|j	||�}|j
j
|�}tddd�tddd	�tddd�td
dd�tddd�g}|D]�}|j|�
�}|j|��5|j|j�|j�|j|j�|j�|j|j�|j�ddd���y#1swY��xYw)N�DSTr2rzSTD0DST-1,0/0,J365/25�l�i�rJrRrPr��r��r[)
rT�ONE_HrUrrVrmr�rcr�r�r�r�r�)r2rbrWrXrYr�r\r[s        r'�test_one_zone_dstzWeirdZoneTest.test_one_zone_dst\s%�����u�-���8�D�!�Q�/��c�:�
��(��
�
 �
 ��e�
4��
�Z�Z�
!�
!�"�
%��
�T�1�a� ��T�1�b�!��T�1�a� ��T�2�q�!��T�1�a� �
���B����2��&�B������$�� � �����c�j�j�9�� � ��������?�� � �����3�7�7�3�%�$��$�$�s
�A?E�E	c��tdtt�}tddtzt�}g}tdd�D]R}|j	tt
|ddd�||��|j	tt
|ddd�||���Td	}|j||�}|jj|�}t
d
dd�|ft
ddd�|ft
ddd�|ft
ddd�|fg}|D]�\}	}
|	j|�
�}	|j|	��5|j|	j�|
j�|j|	j�|
j�|j|	j�|
j�ddd���t!d|�
�}|jd�5|j#|j�d�|j#|j�d�|j#|j�d�ddd�y#1swY��ExYw#1swYyxYw)NrHrbr�����rdrr��i�rQi�r�rfrzTesting datetime.time)rTrgr��ranger�rUrrVrmr�rcr�r�r�r�r�rr�)r2rHrbrWrSrXrYr��casesr[r�r�s            r'�test_no_tz_strzWeirdZoneTest.test_no_tz_strvs������t�,�����E�	�5�1�����$��%�D�����x��a��A�6��S�A�
�
����x��b�!�Q�7��c�B�
�	&���
�
 �
 ��e�
4��
�Z�Z�
!�
!�"�
%���d�A�q�
!�3�'�
�d�A�q�
!�3�'�
�d�B��
"�C�(�
�d�A�q�
!�3�'�	
�� �J�B�����2��&�B������$�� � �����f�m�m�<�� � ������1A�1A�B�� � �����6�:�:�6�%�$� �
��2���
�\�\�1�
2��M�M�!�(�(�*�d�+��M�M�!�+�+�-��.��M�M�!�%�%�'�4�(�3�
2�%�$��3�
2�s�&A?H7�
A!I�7I	�I
c��tdtt�tdtt�g}|D�]}td||�g}d}|j	||�}|j
j
|�}tddd�tddd�tddd�g}|D]�}|j|��}|j||�	�5|j|j�|j�|j|j�|j�|j|j�|j�ddd�����y#1swY��xYw)
NrHrbrlrcrr2rkr�)r�r[)rTr�rgrUrVrmr�rrcr�r�r�r�r�)	r2�offsetsr�rWrXrYr�r\r[s	         r'�test_tz_before_onlyz!WeirdZoneTest.test_tz_before_only�s+��
�u�d�D�)��u�e�U�+�
��
�F��t�V�V�4��K��E��$�$�[�%�8�B����%�%�b�)�B���q�!�$���q�!�$���q�!�$��C����Z�Z�r�Z�*���\�\��B�\�7��$�$�R�Y�Y�[�&�-�-�@��$�$�R�\�\�^�V�5E�5E�F��$�$�R�V�V�X�v�z�z�:�8�7��#�&8�7�s
�>A?E�Ec��|jgd�}|jt�5|jj	|�ddd�y#1swYyxYw)Nrl)rVr�r�rmr�)r2rYs  r'�test_empty_zonezWeirdZoneTest.test_empty_zone�s@��
�
 �
 ��R�
(��
�
�
�z�
*��J�J� � ��$�+�
*�
*�s�A
�
Ac�^�tdtd���}tdt�}d||ftt	ddd�||�d||fg}d	}|j||�}|jj|d
��}tj|ftj|ft	dd
d�|ft	ddd�|fg}|D]�\}}	|j|��}
|jd|
|	��5|j|
j�|	j�|j|
j�|	j�|j|
j�|	j�ddd���tjtjtd��zft	dd
dddd�t	ddd�ft	dd
ddddd�t	ddddddd�ft	dddddd�t	dddddd�ft	d dd�t	d dd�ftjtjfg}|D]j\}}
|j|��}
|
jt j"��}|j|j%|�|
�|j|
|��ly#1swY���xYw)!a�Test when a transition is in the far past or future.

        Particularly, this is a concern if something:

            1. Attempts to call ``datetime.timestamp`` for a datetime outside
               of ``[datetime.min, datetime.max]``.
            2. Attempts to construct a timedelta outside of
               ``[timedelta.min, timedelta.max]``.

        This actually occurs "in the wild", as some time zones on Ubuntu (at
        least as of 2020) have an initial transition added at ``-2**58``.
        rD�8���r��GMTl�����xrl�GMT0�Africa/Abidjanr�iwrRrFr�r�r�)r�r[r�Ni�ij��+�4ik�;�?Br�rO�r2)rTrr�rUrrVrmr��min�maxrcr�r�r�r�r�rr�r�)r2rDrwrWrXrYr��offset_cases�dt_naiver�r[�	utc_cases�naive_dt�naive_dt_utcr�s               r'�test_zone_very_large_timestampz,WeirdZoneTest.test_zone_very_large_timestamp�s�����	�$� 7�8�����%����c�"��8�D�!�Q�/��c�:���S�!�
����
�
 �
 ��e�
4��
�Z�Z�
!�
!�"�*:�
!�
;���\�\�3��
�\�\�3��
�d�B��
#�S�)�
�d�A�q�
!�3�'�	
��!-��H�f��!�!��!�,�B����8��6��B�� � �����f�m�m�<�� � ������1A�1A�B�� � �����6�:�:�6�C�B�!-��\�\�8�<�<�)�C�*@�@�A�
�d�B��B��B�
/��$��1�1E�F���r�2�r�2�r�6�:���q�!�Q��A�v�6�
��d�A�q�!�R��
+�X�d�A�q�!�R��-K�L�
�d�A�q�
!�8�D�!�Q�#7�8�
�\�\�8�<�<�(�

�	�'0�"�H�l��!�!��!�,�B�!�)�)����)�>�F����V�.�.�r�2�B�7����R��(�'0�#C�B�s
�'A?J"�"J,	c��tdtt�}ttddd�||�g}d}|j	||�}|j
j
|d��}tddd|��}|jd�5|j|j�|j�|j|j�|j�|j|j�|j�ddd�td	|��}|jd
�5|j|j�|j�|j|j�|j�|j|j�|j�ddd�y#1swY��xYw#1swYyxYw)Nr�r2r�UTC0r�r�r�zdatetime.datetimerz
datetime.time)
rTr�rUrrVrmr�r�r�r�r�r�r)r2r�rWrXrYr�r[r�s        r'�$test_fixed_offset_phantom_transitionz2WeirdZoneTest.test_fixed_offset_phantom_transitionsL�����d�+��%�h�t�Q��&:�C��E�F����
�
 �
 ��e�
4��
�Z�Z�
!�
!�"�%�
!�
0��
�d�A�q��
,��
�\�\�-�
.����R�Y�Y�[�#�*�*�5����R�\�\�^�S�]�]�;����R�V�V�X�s�w�w�/�/�

��2���
�\�\�/�
*����Q�X�X�Z����4����Q�[�[�]�C�M�M�:����Q�U�U�W�c�g�g�.�+�
*�
/�
.��+�
*�s�A?F-�%A?F9�-F6�9GNc��g}g}g}ggg}ggg}ggg}	d}
d}|
|g}d�}
tt|
|�d���}|D]�}|\}}}t|�D]�\}\}}||}||}|	|}|�||cxkr|ksn�(||vr|j|�||vr|j|�|��U|j|�|j|j	|������t|�}t|�}t|�}t
j�}d}tt|df��D�]�}||}||}|	|}||}t�}g}|D]z} t| jj��}!t| j�}"t|�}#|j|!|"|#f�|| j j#d�d	zz
}�|t%|�}t|�}$t|�}%t|�}&|j'd
�|j'd|z�|j'd�|j't)j*d
||||%|$|&��|j't)j*d|%�|��g|����|j't)j*d|%�d�g|����|D]'}'|j't)j*dg|'�����)|j't%|��|j't)j*|�d�g|����|j't)j*|�d�g|����|j't)j*d|�d�g|����|dkDs��H|j'd�|j'|j#d��|j'd����|j-d�|S)N)i�r3)l����lc��t|t�r|S|jr$t|jj��}nd}||j|jfSr*)�
isinstance�tupler`�intr��	timestampr�r�)rf�
trans_times  r'�zt_as_tuplez1WeirdZoneTest.construct_zone.<locals>.zt_as_tuple,sO��
�"�e�$��	��}�}� ��!2�!2�!<�!<�!>�?�
�!�
��� 0� 0�"�/�/�B�Br&c��|dSrr%)�xs r'�<lambda>z.WeirdZoneTest.construct_zone.<locals>.<lambda>;s��!�A�$r&r�)�l�qr��ascii��TZifs%d�               �>6l�>�Bz>lbb�br�r�
)�sorted�map�	enumerater��index�lenr�r�rmr��	bytearrayr�r��
total_seconds�boolr�r��encode�bytes�write�struct�pack�seek)(r2rWrX�version�isutc�isstd�leap_seconds�offset_lists�trans_times_lists�trans_idx_lists�v1_range�v2_range�rangesr�rfr�r�r��v�dt_min�dt_maxrq�trans_times�	trans_idx�isutcnt�isstdcnt�leapcnt�zonefile�
time_types�	time_type�abbrstr�ttinfosr��utcoff�isdst�abbrind�typecnt�timecnt�charcnt�ttinfos(                                        r'rVzWeirdZoneTest.construct_zones����������B�x����H���r�(��(��(���H�%��
	C��S��k�:��O���B�68�3�J�
�|�'0��'8�#��#�F�F�&�q�/��/��2��+�A�.�	��)��j�2�F�2�� ��/��N�N�=�1��w�.��N�N�<�0��)��&�&�z�2��$�$�W�]�]�<�%@�A�%(9��.�e�*���u�:���l�#���:�:�<���
��s�G�Q�<�(�)�A�"�1�o�G�+�A�.�K�'��*�I�"�1�
�I� �k�G��G�!���V�-�-�;�;�=�>���V�Z�Z�(���g�,�������w�7�8��6�=�=�/�/��8�7�B�B��
"��G�n�G��'�l�G��+�&�G��'�l�G�
�N�N�7�#��N�N�5�7�?�+��N�N�9�%��N�N�����7�H�g�w����
�
�N�N�6�;�;��7�)�I�;�'?�N�+�N�O��N�N�6�;�;��7�)�1�~�B�	�B�C�!�����v�{�{�6�;�F�;�<�"�
�N�N�5��>�*�
�N�N�6�;�;�'��!�}�=�u�=�>��N�N�6�;�;�(��1�~�>��>�?��N�N�6�;�;��7�)�1�~�E��E�F��1�u����w�'����u�|�|�G�4�5����w�'�g*�j	�
�
�a���r&)Nrd)
rErFrGr�r�r`rhrorrrtr�r�rVr%r&r'rBrB0s4��
�F�'8�R4�4))�V";�H%�;)�z/�*tr&rBc��eZdZeZy)�CWeirdZoneTestNr,r%r&r'r�r��r-r&r�c�v��eZdZeZdZdZdZe�fd��Z	ed��Z
d�Zd�Zd�Z
d	�Zd
�Zed��Z�xZS)�	TZStrTestrrr�c�b��t�|��|j�|j�yr*)r@r"�_populate_test_cases�populate_tzstr_header)rZrDs �r'r"zTZStrTest.setUpClass�s&���
����� � �"��!�!�#r&c��t�}td�D]/}|dz
}|dz
}|dz
}|tjddddddd�z
}�1t	|�|_y)Nr�r��3r�r�r)r�rmr�r�r��_tzif_header)rZ�out�_s   r'r�zTZStrTest.populate_tzstr_header�sd���k��
�q��A��7�N�C��4�K�C��9��C�
�6�;�;�u�a��A�q�!�Q�7�7�C�
�!��:��r&c�D�tj|j�}|jdd�|j	d�|j	|jd��|j	d�|jd�|jj||��S)z/Creates a zoneinfo file following a POSIX rule.rr�r�r�r�)r�r�r�r�r�r�rmr�)r2�tzstrr�s   r'�zone_from_tzstrzTZStrTest.zone_from_tzstr�sy���:�:�d�/�/�0���
�
�a���	���w�����u�|�|�G�,�-����w���
�
�a���z�z�#�#�H�%�#�8�8r&c�@�|jj�D]�\}}|j|��5|j|�}ddd�|D]�\}}}|j	��}|j|||��5|j|j
�|j�|j|j�|j�|j|j�|j�ddd�����y#1swY��xYw#1swY��xYw)N�r�r�)r�r[r�)	r�r�r�r�rcr�r�r�r�)r2r�rnr�r�r�r�r[s        r'�test_tzstr_localizedzTZStrTest.test_tzstr_localized�s��� �O�O�1�1�3�L�E�5����E��*��)�)�%�0��+�(-�#��&�!��%�%�R�%�0���\�\��"�V�\�D��$�$�R�Y�Y�[�&�-�-�@��$�$�R�\�\�^�V�5E�5E�F��$�$�R�V�V�X�v�z�z�:�E�D�(-�	4�*�*��E�D�s�D�<A?D�D	�Dc��|jj�D�]3\}}|j|��5|j|�}ddd�|D]�\}}}||jk(r�||j
z
j
tj��}|j�}|j
|��}	|j||	�||jk(r(|j|j|j|�n|j|jd�|	jtj�}|j||�����6y#1swY��xYw)Nr�r�r)
r�r�r�r��GAPr�rcrr�r�r��FOLDrR)
r2r�rnr�r�r��dt_typer��dt_act�dt_exps
          r'�test_tzstr_from_utczTZStrTest.test_tzstr_from_utc�s%�� �O�O�1�1�3�L�E�5����E��*��)�)�%�0��+�.3�)��&�'��d�h�h�&��"�V�%5�%5�5�>�>�#�<�<�?���
 �*�*�2�.��!�)�)��)�4��� � ���0��d�i�i�'��$�$�V�[�[�(�-�-��J��$�$�V�[�[�!�4� �*�*�8�<�<�8��� � ���0�-.3�	4�*�*�s�E�E	c��gd�}|D].}|j|��5|j|�ddd��0y#1swY�;xYw)N)5�AAA24zAAA+24zAAA-24zAAA24BBB,J60/2,J300/2zAAA+24BBB,J60/2,J300/2zAAA-24BBB,J60/2,J300/2zAAA4BBB24,J60/2,J300/2zAAA4BBB+24,J60/2,J300/2zAAA4BBB-24,J60/2,J300/2zAAA4:00BBB,J60/2,J300/2zAAA4:59BBB,J60/2,J300/2zAAA4BBB5:00,J60/2,J300/2zAAA4BBB5:59,J60/2,J300/2zAAA4:00:00BBB,J60/2,J300/2zAAA4:00:59BBB,J60/2,J300/2zAAA4BBB5:00:00,J60/2,J300/2zAAA4BBB5:00:59,J60/2,J300/2zAAA24:59:59BBB5,J60/2,J300/2zAAA-24:59:59BBB5,J60/2,J300/2zAAA4BBB24:59:59,J60/2,J300/2zAAA4BBB-24:59:59,J60/2,J300/2zAAA4BBB,M12.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M12.1.1/2zAAA4BBB,M1.5.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M1.5.1/2zAAA4BBB,M1.1.6/2,M2.1.1/2zAAA4BBB,M1.1.1/2,M2.1.6/2zAAA4BBB,0/2,20/2zAAA4BBB,0/2,0/14zAAA4BBB,20/2,365/2zAAA4BBB,365/2,365/14zAAA4BBB,J1/2,J20/2zAAA4BBB,J1/2,J1/14zAAA4BBB,J20/2,J365/2zAAA4BBB,J365/2,J365/14zAAA4BBB,J60/167,J300/2zAAA4BBB,J60/+167,J300/2zAAA4BBB,J60/-167,J300/2zAAA4BBB,J60/2,J300/167zAAA4BBB,J60/2,J300/+167zAAA4BBB,J60/2,J300/-167zAAA4BBB,J60/2:00,J300/2zAAA4BBB,J60/2:59,J300/2zAAA4BBB,J60/2,J300/2:00zAAA4BBB,J60/2,J300/2:59zAAA4BBB,J60/2:00:00,J300/2zAAA4BBB,J60/2:00:59,J300/2zAAA4BBB,J60/2,J300/2:00:00zAAA4BBB,J60/2,J300/2:00:59zAAA4BBB,J60/167:59:59,J300/2zAAA4BBB,J60/-167:59:59,J300/2zAAA4BBB,J60/2,J300/167:59:59zAAA4BBB,J60/2,J300/-167:59:59r�)r�r�)r2�tzstrsr�s   r'�test_extreme_tzstrzTZStrTest.test_extreme_tzstr�sB��C
��J�E����E��*��$�$�U�+�+�*��*�*�s	�9�A	c�
�gd�}|D]b}|j|��5tj|�}|jt|�5|j|�ddd�ddd��dy#1swY�xYw#1swY�{xYw)N):�PST8PDT�+11zGMT,M3.2.0/2,M11.1.0/3zGMT0+11,M3.2.0/2,M11.1.0/3zPST8PDT,M3.2.0/2�AAA168zAAA+168zAAA-168zAAA168BBB,J60/2,J300/2zAAA+168BBB,J60/2,J300/2zAAA-168BBB,J60/2,J300/2zAAA4BBB168,J60/2,J300/2zAAA4BBB+168,J60/2,J300/2zAAA4BBB-168,J60/2,J300/2zAAA4:0BBB,J60/2,J300/2zAAA4:100BBB,J60/2,J300/2zAAA4BBB5:0,J60/2,J300/2zAAA4BBB5:100,J60/2,J300/2zAAA4:00:0BBB,J60/2,J300/2zAAA4:00:100BBB,J60/2,J300/2zAAA4BBB5:00:0,J60/2,J300/2zAAA4BBB5:00:100,J60/2,J300/2zAAA4BBB,M1443339,M11.1.0/3zAAA4BBB,M3.2.0/2,0349309483959czAAA4BBB,,J300/2zAAA4BBB,z,J300/2zAAA4BBB,J60/2,zAAA4BBB,J60/2,zzAAA4BBB,M13.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M13.1.1/2zAAA4BBB,M0.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M0.1.1/2zAAA4BBB,M1.6.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M1.6.1/2zAAA4BBB,M1.1.7/2,M2.1.1/2zAAA4BBB,M1.1.1/2,M2.1.7/2zAAA4BBB,-1/2,20/2zAAA4BBB,1/2,-1/2zAAA4BBB,367,20/2zAAA4BBB,1/2,367/2zAAA4BBB,J0/2,J20/2zAAA4BBB,J20/2,J366/2zAAA4BBB,J60/2/3,J300/2zAAA4BBB,J60/2,J300/2/3zAAA4BBB,J60/168,J300/2zAAA4BBB,J60/+168,J300/2zAAA4BBB,J60/-168,J300/2zAAA4BBB,J60/2,J300/168zAAA4BBB,J60/2,J300/+168zAAA4BBB,J60/2,J300/-168zAAA4BBB,J60/2:0,J300/2zAAA4BBB,J60/2:100,J300/2zAAA4BBB,J60/2,J300/2:0zAAA4BBB,J60/2,J300/2:100zAAA4BBB,J60/2:00:0,J300/2zAAA4BBB,J60/2:00:100,J300/2zAAA4BBB,J60/2,J300/2:00:0zAAA4BBB,J60/2,J300/2:00:100r�)r��re�escape�assertRaisesRegexr�r�)r2�invalid_tzstrs�
invalid_tzstr�tzstr_regexs    r'�test_invalid_tzstrzTZStrTest.test_invalid_tzstr9st��H
��T,�M����M��2�!�i�i�
�6���+�+�J��D��(�(��7�E�	3�2�,�
E�D��	3�2�s#�,A9�A-�A9�-A6�2A9�9B	c�f������fd�}|j�|j�|j�i�|����fd��}|����fd��}|����fd��}|���fd��}|��fd��}|��fd��}|��fd��}|����fd	��}|����fd
��}|����fd��}�|_y)Nc�T��t��}|�t��|kDsJd��y)z�Decorator to call the addition methods.

            This will call a function which adds at least one new entry into
            the `cases` dictionary. The decorator will also assert that
            something was added to the dictionary.
            z!Function did not add a test case!N)r�)r��prev_lenrns  �r'�callz,TZStrTest._populate_test_cases.<locals>.call�s+����5�z�H�
�C��u�:��(�M�*M�M�(r&c����d}tdtd��t�}tdtd��t�}t	ddd	�|�ft	ddd
dd�|�ft	ddd
dd
d
��|�ft	ddd
dd
d��|�ft	ddd
ddd
��|�ft	ddd
ddd��|�ft	ddd�|�ft	dddddd��|�ft	ddddd
d
��|�ft	ddddd
d��|�ft	ddddd�|�ft	ddddd
d
��|�ft	ddddd
d��|�ft	dddddd��|�ft	ddddd
d
��|�ft	ddddd
d��|�ff�|<y)Nz EST5EDT,M3.2.0/4:00,M11.1.0/3:00�EST���r�EDT���r�rdrJrMr~rQr�rRrr�r�r�r��rTrr�rgr)r�r�r�r�r��NORMALrns   ����r'�_addz,TZStrTest._populate_test_cases.<locals>._add�s����7�E��U�I�B�$7��>�C��U�I�B�$7��?�C��$��1�%�s�F�3��$��2�q�"�-�s�F�;��$��2�q�!�!�4�c�3�?��$��2�q�!�!�4�c�3�?��$��2�q�!�!�4�c�3�?��$��2�q�!�!�4�c�3�?��$��A�&��V�4��$��A�q�"�1�5�s�F�C��$��A�q�!�!�4�c�4�@��$��A�q�!�!�4�c�4�@��$��1�a��,�c�6�:��$��1�a���3�S�#�>��$��1�a���3�S�#�>��$��A�q�"�1�5�s�F�C��$��A�q�!�!�4�c�4�@��$��A�q�!�!�4�c�4�@�!�E�%�Lr&c���d}tdtt�}tdtt�}tddd�|�ftddddd	�|�ftdddd
d�|�ftddd�|�ftddd
dd	d��|�ftddd
ddd��|�ftddd
d
dd��|�ftddddd	�|�ftdddd
d�|�ftddddd	d��|�ftdddddd��|�ftdddd
dd��|�ff�|<y)Nz"GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00rw�BSTr�rd�rFrr~r�rM��rrr����rTr�rgr)r�rwrr�r�rrns   ����r'rz,TZStrTest._populate_test_cases.<locals>._add�sK���9�E��U�D�$�/�C��U�E�5�1�C��$��2�&��V�4��$��2�q�"�-�s�F�;��$��2�q�!�,�c�6�:��$��B�'��f�5��$��B��2�A�6��V�D��$��B��1�1�5�s�C�@��$��B��1�1�5�s�C�@��$��2�q�"�-�s�F�;��$��2�q�!�,�c�6�:��$��B��2�A�6��V�D��$��B��1�1�5�s�D�A��$��B��1�1�5�s�F�C�
�E�%�Lr&c�z��d}tdtd��t�}tdtd��t�}t	ddd	�|�ft	ddd
dd�|�ft	ddd
ddd�
�|�ft	ddd
ddd�
�|�ft	ddd
ddd�
�|�ft	ddd
ddd�
�|�ft	ddd
ddd�
�|�ft	ddd
ddd�
�|�ft	ddd
ddd�
�|�ft	dddd�|�ft	ddd	dd�|�ft	ddd	ddd�
�|�ft	ddd	ddd�
�|�ft	ddd	dd�|�ff�|<y)NzAEST-10AEDT,M10.1.0/2,M4.1.0/3�AESTrMr�AEDTr�r�rQrErOrr~rr�rrd�r)r�r
rr�r�rrns   ����r'rz,TZStrTest._populate_test_cases.<locals>._add�s����5�E��f�i�b�&9�4�@�D��f�i�b�&9�5�A�D��$��1�%�t�V�4��$��1�a��,�d�F�;��$��1�a��!�4�d�F�C��$��1�a���3�T�4�@��$��1�a���3�T�4�@��$��1�a���3�T�4�@��$��1�a���3�T�4�@��$��1�a���3�T�6�B��$��1�a���3�T�6�B��$��A�q�)�4��8��$��A�q�"�-�t�V�<��$��A�q�!�!�4�d�C�@��$��A�q�!�!�4�d�C�@��$��A�q�!�,�d�F�;��E�%�Lr&c�8��d}tdtt�}tdtt�}tddd�|�ftddddd	�|�ftdddd
d�|�ftddd�|�ftddd
dd	d��|�ftddd
ddd��|�ftddd
ddd��|�ftddd
d
dd��|�ftddddd	�|�ftdddd
d�|�ftddddd	d��|�ftdddddd��|�ftdddd
dd��|�ff
�|<y)NzIST-1GMT0,M10.5.0,M3.5.0/1rw�ISTr�rdrrFrr~r�rMrrrrr�r	r
r)r�rwrr�rrns   ���r'rz,TZStrTest._populate_test_cases.<locals>._add�sf���1�E��U�D�5�&�1�C��U�E�4�0�C��$��2�&��V�4��$��2�q�"�-�s�F�;��$��2�q�!�,�c�6�:��$��B�'��f�5��$��B��2�A�6��V�D��$��B��1�1�5�s�D�A��$��B��1�1�5�s�D�A��$��B��1�1�5�s�F�C��$��2�q�"�-�s�F�;��$��2�q�!�,�c�6�:��$��B��2�A�6��V�D��$��B��1�1�5�s�D�A��$��B��1�1�5�s�F�C��E�%�Lr&c�Z��d}tddd�tdtd����ff�|<y)Nz<+11>-11r�rr�r�r)rrTr)r�rrns ��r'rz,TZStrTest._populate_test_cases.<locals>._adds:����E��T�1�a�(��u�i�b�&9�:����E�%�Lr&c���d}tdtd���}tdtd��t�}tddd	�|�ftdd
d	�|�ff�|<y)Nz<-04>4<-03>,M9.1.6/24,M4.1.6/24�-04r�r�-03���r�rrr��rTrrgr)r��M04�M03rrns   ��r'rz,TZStrTest._populate_test_cases.<locals>._addsa���6�E��U�I�B�$7�8�C��U�I�B�$7��?�C��$��1�%�s�F�3��$��A�&��V�4��E�%�Lr&c���d}tdtd��t�}tddd�|�ftddd�|�ftddd	d
ddd�|�ftd
dd�|�ftd
dd�|�ftd
dd�|�ftd
dd	d
ddd�|�ftddd�|�ftddd�|�ftddd	d
ddd�|�ff
�|<y)NzEST5EDT,0/0,J365/25r�r�rr�rrErRrFr{r~rr�rdi`	r)r�r�rrns  ��r'rz,TZStrTest._populate_test_cases.<locals>._add)s���*�E��U�I�B�$7��?�C��$��1�%�s�F�3��$��1�%�s�F�3��$��B��B��F�;�S�&�I��$��1�%�s�F�3��$��1�%�s�F�3��$��1�%�s�F�3��$��B��B��F�;�S�&�I��$��1�%�s�F�3��$��1�%�s�F�3��$��B��B��F�;�S�&�I��E�%�Lr&c�b��d}tdtd���}tdtd��t�}tddd�|�ftdd	d
�|�ftddddd
�|�ftddddd��|�ftddddd��|�ftdddd�|�ftddddd
�|�ftddddd��|�ftddddd��|�ftdddd�|�ftddddd
d
d�|�ftddd�|�ftdd	d�|�ftddddd
�|�ftddddd��|�ftddddd��|�ftdddd�|�ftddddd
�|�ftddddd��|�ftddddd��|�ftdddd�|�ftddddd
d
d�|�ff�|<y)NzAAA3BBB,J60/12,J305/12�AAArr�BBB���r�rr��rdr�r~rRrr�
rMrFr{rr�r	r�r�rrr�r�rrns   ����r'rz,TZStrTest._populate_test_cases.<locals>._add>s%���-�E��U�I�B�$7�8�C��U�I�B�$7��?�C��$��1�%�s�F�3��$��2�&��V�4��$��1�b�"�-�s�F�;��$��1�b�q�1�3��<��$��1�b�q�1�3��<��$��1�b�)�3��7��$��A�r�2�.��V�<��$��A�r��2�C��>��$��A�r��2�C��>��$��A�r�*�C��8��$��B��B��F�;�S�&�I��$��1�%�s�F�3��$��2�&��V�4��$��1�b�"�-�s�F�;��$��1�b�q�1�3��<��$��1�b�q�1�3��<��$��1�b�)�3��7��$��A�r�2�.��V�<��$��A�r��2�C��>��$��A�r��2�C��>��$��A�r�*�C��8��$��B��B��F�;�S�&�I�-�E�%�Lr&c���d}tdtd���}tdtd��t�}tddd	�|�ftddd
ddd�|�ftddd
d
d��|�ftddd
d
d��|�ftddd
d�|�ftdddd�|�ftdddd
d��|�ftdddd
d��|�ftdddd�|�ff	�|<y)Nz <-03>3<-02>,M3.5.0/-2,M10.5.0/-1rrrz-02rr�rdrr�r~�rrrr{rM�r)r��N03�N02r�r�rrns   ����r'rz,TZStrTest._populate_test_cases.<locals>._add_s���7�E��U�I�B�$7�8�C��U�I�B�$7��?�C��$��2�&��V�4��$��2�r�2�r�2�C��@��$��2�r��2�C��=��$��2�r��2�C��=��$��2�r�*�C��8��$��B��+�S�&�9��$��B���3�S�$�?��$��B���3�S�$�?��$��B��+�S�&�9�
�E�%�Lr&c���d}tdtd���}tdtd��t�}tddd	d
d�|�ftddd	d
dd�
�|�ftddd	d
dd
�
�|�ftddd	dd�|�ftdd	dd
ddd�|�ftdd	dd
ddd�
�|�ftdd	dd
ddd
�
�|�ftdd	dddd�|�ff�|<y)Nz%AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45rrrrr��rdr�rrrrr�rQr��,r�-rr!s   ����r'rz,TZStrTest._populate_test_cases.<locals>._addvs���<�E��U�I�B�$7�8�C��U�I�B�$7��?�C��$��2�q�!�,�c�6�:��$��2�q�"�1�5�s�C�@��$��2�q�"�1�5�s�C�@��$��2�q�"�-�s�F�;��$��A�q�"�b�&�9�3��G��$��A�q�"�b�q�9�3��E��$��A�q�"�b�q�9�3��E��$��A�q�"�b�1�3��?�	�E�%�Lr&)rr�r�r�)rZr�rr�r�rrns   @@@@r'r�zTZStrTest._populate_test_cases�s����		N������x�x���g�g����	
�	�
�	�6
�	�
�	�.
�	�
�	�0
�	�
�	�.
�
	�
�
	�
�
	�
�
	�
�	�
�	�(
�	�
�	�@
�	�
�	�,
�	�
�	�$��r&)rErFrGr�r�rr�r�r]r"r�r�r�r�r�r�r�rJrKs@r'r�r��sp���
�F�
�F��D�
�C��$��$��&��&� 9�;�1�:H,�TQ8�f�|��|r&r�c��eZdZeZy)�
CTZStrTestNr,r%r&r'r-r-�r-r&r-c�l��eZdZeZ�fd�Zed��Zed��Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Z�xZS)�ZoneInfoCacheTestc�V��|jj�t�|�
�yr*)rmrnr@rAros �r'rAzZoneInfoCacheTest.setUp�s����
�
��� �
��
�r&c��tSr*rqr1s r'rrzZoneInfoCacheTest.zoneinfo_data�rsr&c�0�|jjgSr*rur1s r'r3zZoneInfoCacheTest.tzpath�rvr&c�d�|j|jd�|jd��y)N�America/Los_Angeles)r�rmr1s r'�test_ephemeral_zonesz&ZoneInfoCacheTest.test_ephemeral_zones�s'���
�
��J�J�,�-�t�z�z�:O�/P�	
r&c�l�|jd�}|jd�}|j||�y)N�Australia/Sydney)rmr��r2�tz0�tz1s   r'�test_strong_refsz"ZoneInfoCacheTest.test_strong_refs�s.���j�j�+�,���j�j�+�,���
�
�c�3�r&c��|jd�}|jjd�}|j||�y)N�
Europe/Lisbon)rmr�r%r8s   r'�
test_no_cachezZoneInfoCacheTest.test_no_cache�s4���j�j��)���j�j�!�!�/�2������c�"r&c��|jd�}|jg�5|jd�}ddd�|j|�y#1swY�xYw)z�Test that the cache persists when tzpath has been changed.

        The PEP specifies that as long as a reference exists to one zone
        with a given key, the primary constructor must continue to return
        the same object.
        r4N)rmr<r�)r2�zi0�zi1s   r'�test_cache_reset_tzpathz)ZoneInfoCacheTest.test_cache_reset_tzpath�sN���j�j�.�/��
�
 �
 ��
$��*�*�2�3�C�%�	
�
�
�c�3��%�
$�s�A�Ac��|jd�}|jjd��|jd�}|j||�y)Nr4��	only_keys)rmrnr%)r2�la0�la1s   r'�test_clear_cache_explicit_nonez0ZoneInfoCacheTest.test_clear_cache_explicit_none�sE���j�j�.�/���
�
�����.��j�j�.�/������c�"r&c��|jd�}|jd�}|jjdg��|jd�}|jd�}|j||�|j||�y)z5Tests that you can clear a single key from the cache.r4�
Europe/DublinrDN�rmrnr%r�)r2rF�dub0rG�dub1s     r'�test_clear_cache_one_keyz*ZoneInfoCacheTest.test_clear_cache_one_key�ss���j�j�.�/���z�z�/�*���
�
���*?�)@��A��j�j�.�/���z�z�/�*������c�"��
�
�d�D�!r&c�x�|jd�}|jd�}|jd�}|jjddg��|jd�}|jd�}|jd�}|j||�|j||�|j||�y)Nr4rJ�
Asia/TokyorDrK)r2rFrL�tok0rGrM�tok1s       r'�test_clear_cache_two_keysz+ZoneInfoCacheTest.test_clear_cache_two_keys�s����j�j�.�/���z�z�/�*���z�z�,�'���
�
���,�o�>�	�	
��j�j�.�/���z�z�/�*���z�z�,�'������c�"�����t�$��
�
�d�D�!r&)rErFrGr�r�rArIrrr3r5r;r>rBrHrNrSrJrKs@r'r/r/�sX���
�F�������+��+�
�
 �#� �#�"�"r&r/c��eZdZeZy)�CZoneInfoCacheTestNr,r%r&r'rUrU�r-r&rUc�`��eZdZeZ�fd�Zed��Zed��Zd�Z	d�Z
d�Zd�Zd�Z
�xZS)	�ZoneInfoPickleTestc�V��|jj�tj�5}|j	tj|j��|j|j�j�ddd�t�|�1�y#1swY�xYwr*)
rmrnr9r:r;�test_support�set_zoneinfo_moduler�r=r>r?r@rArBs  �r'rAzZoneInfoPickleTest.setUp�so����
�
��� �
�
!�
!�
#�u����� @� @���� M�N��O�O�E�M�M�O�1�1�2�$�	��
��	$�
#�s�AB�B(c��tSr*rqr1s r'rrz ZoneInfoPickleTest.zoneinfo_data�rsr&c�0�|jjgSr*rur1s r'r3zZoneInfoPickleTest.tzpath�rvr&c��ttjdz�D]�}|j|��5|j	d�}tj
||��}tj|�}|jd��5|j||�ddd�tj|�}|jd��5|j||�ddd�ddd���y#1swY�VxYw#1swY� xYw#1swY��xYw)Nr��protorJ��protocolzIs non-pickled ZoneInfo��testzIs unpickled ZoneInfo)rm�pickle�HIGHEST_PROTOCOLr�rm�dumps�loadsr��r2r_�zi_in�pkl�zi_rt�zi_rt2s      r'�test_cache_hitz!ZoneInfoPickleTest.test_cache_hit�s����6�2�2�Q�6�7�E����E��*��
�
�?�3���l�l�5�5�9�����S�)���\�\�'@�\�A��M�M�%��/�B� ���c�*���\�\�'>�\�?��M�M�%��0�@�+�*�8�B�A��@�?��+�*�s<�AD�C*�/D�C6�D�*C3�/D�6C?�;D�D	c��ttjdz�D]�}|j|��5|j	d�}tj
||��}~|jj
�tj|�}tj|�}|j||�ddd���y#1swY��xYw)Nrr^rJr`)	rmrdrer�rmrfrnrgr�rhs      r'�test_cache_missz"ZoneInfoPickleTest.test_cache_miss
s����6�2�2�Q�6�7�E����E��*��
�
�?�3���l�l�5�5�9����
�
�&�&�(����S�)�����c�*���
�
�e�V�,�+�*�8�*�*�s�BB=�=C	c���ttjdz�D�]}|j|��5|jjd�}tj||��}tj|�}|jd��5|j||�ddd�tj|�}|jd��5|j||�ddd�|j	d�}|jd��5|j||�ddd�ddd���y#1swY��xYw#1swY�_xYw#1swY�-xYw#1swY��ExYw)	Nrr^rJr`zNot the pickled objectrbzNot a second unpickled objectzNot a cached object)	rmrdrer�rmr�rfrgr%)r2r_�zi_no_cacherjrkrl�zi_caches       r'r>z ZoneInfoPickleTest.test_no_caches���6�2�2�Q�6�7�E����E��*�"�j�j�1�1�/�B���l�l�;��?�����S�)���\�\�'?�\�@��$�$�U�K�8�A� ���c�*���\�\�'F�\�G��$�$�U�F�3�H� �:�:�o�6���\�\�'<�\�=��$�$�U�H�5�>�+�*�8�A�@��H�G��>�=��+�*�sT�AE�
D4� /E�E�"+E�
E� E�4D=�9E�E	�E�E�E�E"	c	�Z�d}t|jj|�d�5}|jj	|�}|jd�|jj	||��}ddd�dfdfg}|D]�\}}t
tjdz�D]]}|j||��5|jtj�5tj||�	�ddd�ddd��_��y#1swY��xYw#1swY�"xYw#1swY��xYw)
NrJr�rr�zZoneInfo with keyzZoneInfo without keyr)r�r_r`)
r�rrr�rmr�r�rmrdrer�r��
PicklingErrorrf)	r2rdr��zi_nokey�zi_keyr�r�r�r_s	         r'�test_from_filez!ZoneInfoPickleTest.test_from_file*s����
�$�$�$�2�2�3�7��
>�!��z�z�+�+�A�.�H�
�F�F�1�I��Z�Z�)�)�!��)�5�F�	?��(�)�
�-�.�
�
�
(�M�B�	��v�6�6��:�;���\�\�I�U�\�C��*�*�6�+?�+?�@����R�%�8�A�D�C�<�(�?�
>��A�@��D�C�s0�A
D	�< D!�D	�4D!�	D�D
�D!�!D*c�x�ttjdz�D�]u}|j|��5d}|j	|�}tj
||��}tj|�}|j||�t|jj|�d�5}|jj||��}ddd�tj
||��}tj|�}	|j||	�|jtj�5tj
|��ddd�tj
||��}
tj|
�}|j||�ddd���xy#1swY��xYw#1swY�_xYw#1swY���xYw)Nrr^rJr`r�r�)rmrdrer�rmrfrgr�r�rrr�r�r�rt)r2r_rdr��pkl_0�zi_rt_0r�r��pkl_1�zi_rt_1�pkl_2�zi_rt_2s            r'�test_pickle_after_from_filez.ZoneInfoPickleTest.test_pickle_after_from_file=sM��
�6�2�2�Q�6�7�E����E��*�%���Z�Z��_�����R�%�8�� �,�,�u�-���
�
�b�'�*��$�,�,�:�:�3�?��F�!� �J�J�0�0���0�<�E�G����R�%�8�� �,�,�u�-���
�
�b�'�*��&�&�v�';�';�<��L�L���7�=����R�%�8�� �,�,�u�-���
�
�b�'�*�)+�*�8�G�F��=�<��+�*�s>�A7F/�*F�A%F/�-F#�AF/�F �F/�#F,�(F/�/F9	)rErFrGr�r�rArIrrr3rmror>rwrrJrKs@r'rWrW�sN���
�F�������+��+�1�-�6�&9�&+r&rWc��eZdZeZy)�CZoneInfoPickleTestNr,r%r&r'r�r�Zr-r&r�c�0�eZdZdZeZed��Zd�Zd�Z	y)�CallingConventionTestz8Tests for functions with restricted calling conventions.c��tSr*rqr1s r'rrz#CallingConventionTest.zoneinfo_datacrsr&c��t|jjd�d�5}|jt�5|j
j
|��ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�r�)r�)r�rrr�r�r�rmr�)r2r�s  r'rwz$CallingConventionTest.test_from_filegsa��
�$�$�$�2�2�5�9�4�
@�A��"�"�9�-��
�
�$�$�!�$�,�.�A�
@�-�-��A�
@�s"�A6�A*�A6�*A3	�/A6�6A?c��|jt�5|jjdg�ddd�y#1swYyxYw�Nr�)r�r�rmrnr1s r'�test_clear_cachez&CallingConventionTest.test_clear_cachels0��
�
�
�y�
)��J�J�"�"�E�7�+�*�
)�
)�s	�<�AN)
rErFrGrHr�r�rIrrrwr�r%r&r'r�r�^s&��B�
�F�
����-�
,r&r�c��eZdZeZy)�CCallingConventionTestNr,r%r&r'r�r�qr-r&r�c�h�eZdZeZeejd���Zd�Z	d�Z
d�Zd�Zd�Z
d�Zd�Zy	)
�
TzPathTestc#�K�d}t�}|}	t5tjj	|d�}|tj|<d��ddd�||ury|�tj|=y|tj|<y#1swY�6xYw#||urw|�tj|=w|tj|<wxYw�w)N�PYTHONTZPATH)�objectr�os�environ�get)�value�path_var�unset_env_sentinel�old_envs    r'�python_tzpath_contextz TzPathTest.python_tzpath_contextxs�����"��#�X��$��	/���*�*�.�.��4�8��',��
�
�8�$���
�,�,�����J�J�x�(�'.��
�
�8�$����
�,�,�����J�J�x�(�'.��
�
�8�$�s3�C�B�8B�B�-C�B�
B�.B?�?Cc�v�dgfddgfdtj�d�ddgfg}|D]|\}}|j|�5|j|��5|jj�|jj}|j||�ddd�ddd��~y#1swY�xYw#1swY��xYw)z<Tests that the environment variable works with reset_tzpath.rlz
/etc/zoneinfo�/a/b/cz/d/e/f�r3N)r��pathsepr�r�r��reset_tzpath�TZPATH�assertSequenceEqual)r2�	new_paths�new_path_var�expected_resultr3s     r'�test_env_variablezTzPathTest.test_env_variable�s�����H�
��/�0��b�j�j�\��
(�8�X�*>�?�
�	�.7�)�L�/��+�+�L�9��\�\��\�6��K�K�,�,�.�!�[�[�/�/�F��,�,�V�_�E�7�:�9�.7�6�6��:�9�s$�B/�
AB#�B/�#B,�(B/�/B8	c	���ddgddgddgddgddgddgg}|D�]\}}tjj|�}|j|�5|j	d	|�
�5|j|jj�5}|jj�ddd�|jjdjt�ddd�|jj}|j	d|�
�5|j||�ddd�ddd���y#1swY��xYw#1swY�exYw#1swY�-xYw#1swY��GxYw)
N��path/to/somewherer%��/usr/share/zoneinfor�)r���../relative/path�r�r��r�r��r�r�r��warning)r�r�filtered)r�r��joinr�r��assertWarnsr��InvalidTZPathWarningr�r��warnings�filename�__file__r�r�)r2r��input_paths�expected_pathsr��wr3s       r'� test_env_variable_relative_pathsz+TzPathTest.test_env_variable_relative_paths�sG��
#�R�(�=�(�
�#�B�'�<�(�
�8��<��
)�

�
�
�,,6�'�K���z�z���{�3�H��+�+�H�5��\�\�)�h�\�?��)�)�$�+�+�*J�*J�K�q����0�0�2�L��$�$�Q�Z�Z��]�%;�%;�X�F�@����+�+���\�\�*�x�\�@��,�,�V�^�D�A�6�5�,6�L�K��@�?��A�@��6�5�sT�E�"&D<�D0	�#5D<�1E�	E�E�0D9
�5D<�<E�E�E�
E�E	c��d}|j|�5tdd�5|jt�5}ddl}ddd�j
}ddd�|j
jdj�|j|jdjt�ddd�y#1swY�|xYw#1swY�txYw#1swYyxYw)Nr�rzzoneinfo._tzpathr)r�rr��RuntimeWarningrr�r&r��messager�r�r�)r2r�r�rr�s     r'�1test_env_variable_relative_paths_warning_locationz<TzPathTest.test_env_variable_relative_paths_warning_location�s���&��
�
'�
'��
1��Z�);�<��%�%�n�5��#�6�'/�'D�'D�$�=�
�!�!�!�*�*�Q�-�"7�"7�9M�N����Q�Z�Z��]�3�3�X�>�2�
1�5�5��=�<��2�
1�s9�
C�C�B7�C�AC�7C�<C�C	�C�Cc��|jjdg��|j|jjd�y)Nr���to)r�)r�r�r�r�r1s r'�test_reset_tzpath_kwargz"TzPathTest.test_reset_tzpath_kwarg�s3����� � �X�J� �/�� � ����!3�!3�[�Ar&c���gd�}|D]W}|j|��5|jt�5|jj	|��ddd�ddd��Yy#1swY�xYw#1swY�pxYw)N)r�r�r�r�r�r�)r�r�)r�r�r�r�r�)r2r�r�s   r'� test_reset_tzpath_relative_pathsz+TzPathTest.test_reset_tzpath_relative_paths�sc��
�
�&�K����+��6��&�&�z�2��K�K�,�,��,�<�3�7�6�&�2�2��7�6�s"�A.�A"�A.�"A+�'A.�.A7	c���gd�}|D]V}|j|��5|jt�5|jj	|�ddd�ddd��Xy#1swY�xYw#1swY�oxYw)N)z!/etc/zoneinfo:/usr/share/zoneinfos!/etc/zoneinfo:/usr/share/zoneinfor)r�)r�r�r�r�r�)r2r��	bad_values   r'�test_tzpath_type_errorz!TzPathTest.test_tzpath_type_error�s`��
�
�$�I����I��.��&�&�y�1��K�K�,�,�Y�7�2�/�.�$�1�1��/�.�s"�A-�A!�A-�!A*�&A-�-A6	c�J�ddg}dg}|j|�5|jj}ddd�|j|�5|jj}ddd�|j|�|j|�y#1swY�^xYw#1swY�:xYw)Nz/onez/twoz/three)r<r�r�r�)r2�tzpath_0�tzpath_1�query_0�query_1s     r'�test_tzpath_attributez TzPathTest.test_tzpath_attribute�s����F�#���:��
�
 �
 ��
*��k�k�(�(�G�+��
 �
 ��
*��k�k�(�(�G�+�	
� � ��7�3�� � ��7�3�+�
*��+�
*�s�B
�	B�
B�B"N)rErFrGr�r��staticmethodr9�contextmanagerr�r�r�r�r�r�r�r�r%r&r'r�r�usN��
�F�����/���/�(
F�#E�J
?�B�
=�
8�4r&r�c��eZdZeZy)�CTzPathTestNr,r%r&r'r�r��r-r&r�c�`�eZdZeZed��Zed��Zd�Z	d�Z
d�Zd�Zd�Z
d�Zd	�Zd
�Zy)�
TestModulec��tSr*rqr1s r'rrzTestModule.zoneinfo_datarsr&c��|jjd�}t|d�5}|j�cddd�S#1swYyxYw)Nr�r�)rrr�r��read)r2�	zone_filer�s   r'�
_UTC_byteszTestModule._UTC_bytess9���&�&�4�4�U�;�	�
�)�T�
"�a��6�6�8�#�
"�
"�s�A�Ac��tjj|�st|�d���|j	dd�^}}|r5tj
tjj
||�d��tjj
||�}t|d�5}|j|j�ddd�y#1swYyxYw)z�Creates a valid TZif file at key under the zoneinfo root tz_root.

        tz_root must exist, but all folders below that will be created.
        z does not exist.�/rT)�exist_ok�wbN)
r�r��exists�FileNotFoundError�rsplit�makedirsr�r�r�r�)r2rd�tz_root�root_dir�tail�
zonefile_pathr�s       r'�
touch_zonezTestModule.touch_zones���
�w�w�~�~�g�&�#�w�i�/?�$@�A�A��*�*�S�!�,���4���K�K������W�h�7�$�G������W�c�2�
�
�-��
&�!�
�G�G�D�O�O�$�'�
&�
&�s�%C
�
Cc��|jt�5|jjddd�y#1swYyxYwr*)r�r�r��NOATTRIBUTEr1s r'�test_getattr_errorzTestModule.test_getattr_errors)��
�
�
�~�
.��K�K�#�#�/�
.�
.�s�6�?c��t|jj�}tt|j��}||z
}|j	|�y)z?dir(self.module) should at least contain everything in __all__.N)�setr��__all__�dir�assertFalse)r2�module_all_set�module_dir_set�
differences    r'�test_dir_contains_allz TestModule.test_dir_contains_all sA���T�[�[�0�0�1���S����-�.��#�n�4�
�����$r&c�h�t|j�}t|�}|j||�y)z5Test that there are no duplicates in dir(self.module)N)r�r�r��assertCountEqual)r2�
module_dir�
module_uniques   r'�test_dir_uniquezTestModule.test_dir_unique)s)������%�
��J��
����j�-�8r&c�d�|j|jjg�5|j|jj�|j
j
�}t|jj�}||z}|j||�ddd�y#1swYyxYwr*)	r<rrr3�
assertTruer�r��available_timezonesr�r�)r2�available_keys�
zoneinfo_keys�unions    r'�test_available_timezonesz#TestModule.test_available_timezones0s���
�
 �
 �$�"4�"4�";�";�!<�
=��O�O�D�.�.�3�3�4�!�[�[�<�<�>�N��� 2� 2� 7� 7�8�M�"�N�2�E����]�E�2�>�
=�
=�s�A6B&�&B/c� �tj�5}|jd|�|j|g�5|jj�}|j
d|�ddd�ddd�y#1swY�xYw#1swYyxYw)NzMars/Olympus_Mons)r�TemporaryDirectoryr�r<r�r��assertIn)r2�tdr�s   r'�"test_available_timezones_weirdzonez-TestModule.test_available_timezones_weirdzone<so��
�
(�
(�
*�b��O�O�/��4��$�$�b�T�*�!%���!@�!@�!B���
�
�1�>�B�+�	+�
*�+�*��	+�
*�s"�%B�-A8�'B�8B	�=B�B
c	��hd�}t|�}|D�cgc]}d|����	}}|D�cgc]}d|����	}}d|fd||zfd||zfd||z|zfg}tj�5}|D]�\}}	tjj||�}
tj|
�|	D]}|j||
��|j|
g�5|j|�5|jj�}|j||�ddd�ddd���	ddd�ycc}wcc}w#1swY�'xYw#1swY��xYw#1swYyxYw)N>�Europe/Paris�America/Indiana/Indianapolisr�rPr�America/Santiagor7r4zposix/zright/�	base_tree�base_and_posix�base_and_right�	all_trees)
�listrr�r�r�r��mkdirr�r<r�r�r�r�)
r2r�rr��
posix_tree�
right_treernr��	case_name�treer�rd�actuals
             r'�test_folder_exclusionsz!TestModule.test_folder_exclusionsEsS��	
����N�	�,5�6�I�q��q�c�l�I�
�6�,5�6�I�q��q�c�l�I�
�6��)�$�
�y�:�5�6�
�y�:�5�6�
�)�j�0�:�=�>�	
���
(�
(�
*�b�#(��	�4��'�'�,�,�r�9�5������!��C��O�O�C��1� ��(�(�'��3����i�0�!%���!@�!@�!B���(�(���:�1�4�3�$)�+�
*��7��6�$1�0��4�3��+�
*�sG�D&�D+�"A)E�D<�-D0	�
D<�
E�0D9
�5D<�<E�E�Ec�T�ddh}t|�dgz}tj�5}|D]}|j||��|j	|g�5|j
j
�}|j||�ddd�ddd�y#1swY�xYw#1swYyxYw)NzAmerica/New_Yorkr�
posixrules)r	rr�r�r<r�r�r�)r2r�rr�rdrs      r'�test_exclude_posixrulesz"TestModule.test_exclude_posixrulesis�����
��
�H�~���.��
�
(�
(�
*�b�������R�(���$�$�b�T�*����8�8�:��� � ���2�+�	+�
*�+�*��	+�
*�s#�,B�-B�B�B	�B�B'N)rErFrGr�r�rIrrr	r�r�r�r�r�r�rrrr%r&r'r�r��sW��
�F�
��������
%� $�%�9�
3�C�";�H3r&r�c��eZdZeZy)�CTestModuleNr,r%r&r'rrzr-r&rc��eZdZdZd�Zd�Zy)�ExtensionBuiltTesta�Smoke test to ensure that the C and Python extensions are both tested.

    Because the intention is for the Python and C versions of ZoneInfo to
    behave identically, these tests necessarily rely on implementation details,
    so the tests may need to be adjusted if the implementations change. Do not
    rely on these tests as an indication of stable properties of these classes.
    c��|jttjd��|j	tt
jd��y)N�_weak_cache)r��hasattrrrkr�r�r1s r'�test_cache_locationz&ExtensionBuiltTest.test_cache_location�s8��	
�����!4�!4�m�D�E������ 4� 4�m�D�Er&c���ddl}|j|jtj��|j|jt
j��yr)�gcr��
is_trackedr�rkr)r2rs  r'�test_gc_trackedz"ExtensionBuiltTest.test_gc_tracked�s;�������
�
�k�&:�&:�;�<�����
�
�j�&9�&9�:�;r&N)rErFrGrHrrr%r&r'rr~s���F�<r&r)�frozenc�0�eZdZUded<ded<eZded<y)rTr�r�rr�r�N)rErFrG�__annotations__r�r�r%r&r'rTrT�s���K����C��r&rTc��eZdZUded<ded<ded<ed��Zed��Zed��Zed	��Zed
��Z	ed��Z
y)
rUrr`rTr�r�c��|j|jjz
jtj
��S)Nr�)r`r�r�rcrr�r1s r'r�zZoneTransition.transition_utc�s7�����$�"4�"4�">�">�>�G�G��<�<�H�
�	
r&c�\�|jj|jjkDS)zWhether this introduces a fold�r�r�r�r1s r'rRzZoneTransition.fold��'���!�!�+�+�d�.?�.?�.I�.I�I�Ir&c�\�|jj|jjkS)zWhether this introduces a gapr&r1s r'r�zZoneTransition.gap�r'r&c�\�|jj|jjz
Sr*)r�r�r�r1s r'�deltazZoneTransition.delta�s%��� � �*�*�T�-?�-?�-I�-I�I�Ir&c�d�|jr|j|jzS|jSr*�rRr`r*r1s r'r�zZoneTransition.anomaly_start�s&���9�9��?�?�T�Z�Z�/�/��?�?�"r&c�d�|js|j|jzS|jSr*r,r1s r'r�zZoneTransition.anomaly_end�s&���y�y��?�?�T�Z�Z�/�/��?�?�"r&N)rErFrGr"rIr�rRr�r*r�r�r%r&r'rUrU�s���������
�
��
�
�J��J��J��J��J��J��#��#��#��#r&rUc�,�eZdZdd�Zd�Zd�Zd�Zd�Zy)r!c�v�tj|�|_g|_||_|j|�yr*)rrr3r�r�_populate_tzpath)r2�source_jsonr3rs    r'�__init__zZoneInfoData.__init__�s.���l�l�6�*�����	�������k�*r&c� �|j|zSr*r�rys  r'r�zZoneInfoData.path_from_key�s���{�{�S� � r&c��t|d�5}tj|�}ddd�d}|j�D]�\}}|jj|�|j
|�}|jr|j|�}n|}|j|�}	|	jjdd��t|	d�5}|j|�ddd���y#1swY��xYw#1swY��xYw)Nr�rT)r��parentsr�)
r��json�loadr�r�r��_decode_textr�_convert_to_v1r��parentr
r�)
r2r1r��
zoneinfo_dictrrrdr��raw_datar�destinations
          r'r0zZoneInfoData._populate_tzpath�s���
�+�t�
$�� �I�I�a�L�M�%�&�f�-�
�'�-�-�/�J�C���I�I���S�!��(�(��/�H��w�w��*�*�8�4�����,�,�S�1�K����$�$�d�D�$�A��k�4�(�A�����
�)�(�0�%�
$�� )�(�s�C)�C5�)C2�5C>	c��djttj|��}t	j
|�}tj|�S)Nr&)r�r�r�r��base64�	b85decoder�
decompress)r2�contentsr<�decodeds    r'r8zZoneInfoData._decode_text�s:���8�8�C��
�
�H�5�6���"�"�8�,�����w�'�'r&c��|dddk(sJd��t|dd�}d}|dz}|dk\sJd	��tjd
|||�\}}}}}	}
|dz|	dzz|
z|dzz|z|z}||z
}d
|d|z}|||dzdk(sJd��|S)NrrQr�zInvalid TZif data found!r�r%r�z-Version 1 file found: no conversion necessaryr�rEr�sTZifz0Version 2 file not truncated at Version 2 header)r�r��unpack)
r2rBr��header_start�
header_endr�r�r�r�r�r��	file_sizer�s
             r'r9zZoneInfoData._convert_to_v1�s����!�}��'�C�)C�C�'��h�q��m�$����!�B�&�
��!�|�L�L�L�|�@F�
�
��8�L��4�A
�=���7�G�W�g�

�a�K���k�
��
���k�
��	
�
�
�	�	�Z��	��(�1�Y�"7�7��
�Y�)�a�-�1�W�<�	>�=�	>�<��
r&N)F)rErFrGr2r�r0r8r9r%r&r'r!r!�s��+�!��((�r&r!c�t�eZdZed��Zed��Zed��Zed��Zed��Zed��Z	dZ
dZy)r|c�>�|j�j�Sr*)�
_get_zonedumpr��rZs r'r}zZoneDumpData.transition_keyss��� � �"�'�'�)�)r&c�(�|j�|Sr*)rL)rZrds  r'raz%ZoneDumpData.load_transition_examples
s��� � �"�3�'�'r&c�n�|js|j�|jj�Sr*)�_FIXED_OFFSET_ZONES�_populate_fixed_offsetsr�rMs r'r�zZoneDumpData.fixed_offset_zoness,���&�&��'�'�)��&�&�,�,�.�.r&c�R�|js|j�|jSr*)�_ZONEDUMP_DATA�_populate_zonedump_datarMs r'rLzZoneDumpData._get_zonedumps#���!�!��'�'�)��!�!�!r&c�<�dtdtt�i|_yr�)rTr�rPrMs r'rQz$ZoneDumpData._populate_fixed_offsetss��
�:�e�T�4�0�#
��r&c���d�}d�}d�}d�}d�}d�}d�}d�}d	�}	d
�}
|�|�|�|�|�|�|�|�|	�|
�d�
|_y)Nc��tdtd���}tdt�}tt	ddd�||�gS)NrDrvr�rwrxr�rTrr�rUr)rDrws  r'�_Africa_Abidjanz=ZoneDumpData._populate_zonedump_data.<locals>._Africa_Abidjan#s@���U�I�d�$;�<�C��U�D�)�C��x��a��3�S�#�>��
r&c
���tdtt�}tdtt�}tdtt�}tdtt�}tt	dddd�||�tt	dddd�||�tt	dd	d
d�||�tt	dddd�||�tt	d
ddd�||�tt	d
d	dd�||�gS)Nz+00z+01i�rdr
r�rr rE�rMrr�rJ)rTr�rgrUr)�P00_s�P01_d�P00_d�P01_ss    r'�_Africa_Casablancaz@ZoneDumpData._populate_zonedump_data.<locals>._Africa_Casablanca+s����u�d�D�1�E��u�e�U�3�E��u�d�U�F�3�E��u�e�T�2�E��x��a��Q�7���F��x��a��Q�7���F��x��a��Q�7���F��x��b�"�a�8�%��G��x��a��A�6��u�E��x��a��A�6��u�E�
�

r&c�(�tdtd��t�}tdtd��t�}tdtd��t�}td	td��t�}td
td��t�}t	tddd
ddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tddd d�||�t	tddd!d�||�gS)"NrDi&���r��PSTi����r�PDTi�����PWT�PPTrIr�rSrRrOr�i~rdrFrMri�rJi�r�rKr�ri�ri�	r rE�rTrr�rgrUr)rDrbrcrdres     r'�_America_Los_AngeleszBZoneDumpData._populate_zonedump_data.<locals>._America_Los_Angeles=sn���U�I�f�$=�t�D�C��U�I�B�$7��>�C��U�I�B�$7��?�C��U�I�B�$7��?�C��U�I�B�$7��?�C��x��b�"�b�!�Q�?��c�J��x��a��Q�7��c�B��x��a��Q�7��c�B��x��b�"�a�8�#�s�C��x��a��A�6��S�A��x��a��R�8�#�s�C��x��a��Q�7��c�B��x��a��A�6��S�A��x��b�!�Q�7��c�B��x��a��Q�7��c�B��x��b�!�Q�7��c�B��
r&c
�V�tdtd��t�}tdtd��t�}tdtd��t�}tdtd��t�}td	td
��t�}t	tddd�||�t	td
dd�||�t	tddd�||�t	tddd�||�t	tddd�||�t	tddd�||�t	tddd�||�gS)NrDi����r��SMTz-05i����ri���ri���ibrivrM�|rOi�rdrrRrerQr�rJr�rf)rDri�N05�N04r&s     r'�_America_Santiagoz?ZoneDumpData._populate_zonedump_data.<locals>._America_SantiagoUs���U�I�f�$=�t�D�C��U�I�f�$=�t�D�C��U�I�f�$=�t�D�C��U�I�f�$=�t�D�C��U�I�f�$=�u�E�C��x��a��3�S�#�>��x��a��4�c�3�?��x��a��3�S�#�>��x��a��4�c�3�?��x��b�"�5�s�C�@��x��a��3�S�#�>��x��a��3�S�#�>��
r&c
��tdtd��t�}tdtd��t�}t	tddd�||�t	tdd	d
d�||�t	tdd	d	d�||�gS)
N�JSTi�~r��JDT頌i�rr�rJrRri�rf)rorps  r'�_Asia_Tokyoz9ZoneDumpData._populate_zonedump_data.<locals>._Asia_Tokyofsw���U�I�e�$<�d�C�C��U�I�e�$<�e�D�C��x��a��3�S�#�>��x��a��Q�7��c�B��x��a��A�6��S�A��
r&c��tdtd��t�}tdtd��t�}tdtd��t�}t	tdd	d
�||�t	tdd
d
dd
�||�t	tdd
dd	�||�t	tddd
d
�||�t	tdddd	�||�t	tddd
d
�||�t	tdddd	�||�gS)NrDičr�r
rqri��igr�r�}rrdr
r)rQrMrOrerf)rDr
rs   r'�_Australia_Sydneyz?ZoneDumpData._populate_zonedump_data.<locals>._Australia_Sydneyss����U�I�e�$<�d�C�C��f�i��&>��E�D��f�i��&>��F�D��x��a��3�S�$�?��x��a��A�q�9�4��F��x��a��Q�7��t�D��x��a��A�6��d�C��x��b�!�Q�7��t�D��x��a��A�6��d�C��x��b�!�Q�7��t�D��
r&c���tdtd��t�}tdtd��t�}tdtd��t�}tdtt�}td	tt�}tdtt�}tdtt�}t	td
ddd
�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�t	tdddd�||�gS)NrDi$���r��DMTi���rirwriXr�r�rrjrr#rMrrdrtrQi�rri�	rrf)rDrw�IST_0�GMT_0r�GMT_1�IST_1s       r'�_Europe_Dublinz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Dublin�s9���U�I�e�$<�d�C�C��U�I�e�$<�d�C�C��u�i��&=�u�E�E��u�d�D�1�E��U�E�5�1�C��u�d�U�F�3�E��u�e�T�2�E��x��a��A�6��S�A��x��a��Q�7��e�D��x��b�!�Q�7���F��x��a��A�6��s�C��x��a��Q�7���F��x��b�"�a�8�%��G��x��a��Q�7���F��x��b�"�a�8�%��G�	�	
r&c
���tdtt�}tdtt�}tdtt�}tdtd��t�}t	tddd	d
�||�t	tdddd
�||�t	tdddd
�||�t	tdddd�||�t	tdddd
�||�t	tdddd
�||�gS)N�WET�WEST�CET�CESTi r�i�rdr	rrJrr�i�rrrjrFrM)rTr�rgrrUr)r~rr�r�s    r'�_Europe_Lisbonz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Lisbon�s����U�D�$�/�C��f�e�U�3�D��U�E�4�0�C��f�i��&=�u�E�D��x��a��Q�7��d�C��x��a��Q�7��s�C��x��a��Q�7��d�C��x��a��Q�7��s�C��x��a��Q�7��d�C��x��b�"�a�8�$��D�
�
r&c�~�tdtd��t�}tdtt�}tdtt�}t	tddd�||�t	td	d
dd�||�t	td	dd
d�||�t	tdd
dd�||�t	tdddd�||�gS)NrDi����r�rwri7rRri�rdrrMrr�i�r	r
rf)rDrwrs   r'�_Europe_Londonz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_London�s����U�I�c�$:�D�A�C��U�D�$�/�C��U�E�5�1�C��x��b�!�4�c�3�?��x��a��Q�7��c�B��x��b�"�a�8�#�s�C��x��a��Q�7��c�B��x��b�"�a�8�#�s�C��
r&c	�h�tdtd��t�}tdtd��t�}tdtd��t�}tdtd	��t�}tt	d
dd�||�tt	dd
d�||�tt	ddd�||�gS)NrDi�l��r�z-1040ij��z-10i`s��z+14i��imri�rMi�rRrFrX)rD�N1040�N10�P14s    r'�_Pacific_KiritimatizAZoneDumpData._populate_zonedump_data.<locals>._Pacific_Kiritimati�s����U�I�f�$=�t�D�C��w�	�&�(A�4�H�E��U�I�f�$=�t�D�C��U�I�e�$<�d�C�C��x��a��3�S�%�@��x��b�!�4�e�S�A��x��b�"�5�s�C�@�	�
r&)
rzzAfrica/Casablancar4rr7rPrJr=rzPacific/Kiritimati)rS)rZrYr`rgrmrrrur|r�r�r�s           r'rTz$ZoneDumpData._populate_zonedump_data!s{��	�	�$	�0	�"	�
	�	�(
	�	�	�.�/�!3�!5�#7�#9� 1� 3� 1� 3�%�-�+�-�+�-�+�-�"5�"7�
��r&N)rErFrGr]r}rar�rLrQrTrSrPr%r&r'r|r|s����*��*��(��(��/��/��"��"�
�
��
�
�i
��i
�V�N��r&r|�__main__)[�
__future__rr?r9rb�importlib.metadata�	importlibr�r6r�rrdr�r+r�rrrrrrr�	functoolsr	�test.supportr
�test.test_zoneinforrY�test.test_zoneinfo._supportrr
r�test.support.import_helperrrr�get_modulesr�r�metadata�HAS_TZDATA_PKG�PackageNotFoundErrorr#r$r rr�r:�DATA_DIRr"r�rgr(r-r/rMrjr�rrrr+r/r9rr;r@rBr�r�r-r/rUrWr�r�r�r�r�r�r�TestCaser�	dataclassrTrUr!r|rE�mainr%r&r'�<module>r�sA��"�
����	��	��
�	�
�
���>�>�%�-�7�W�W�A��V���2�,�2�2�4���Z��
������)��N��
������7�<�<��!�(�(�6�1���/�/�
���|������M����@��:Z6�?�$4�Z6�zB-�L�B-�J	�#8�,�	�	�$9�=�	�3�<�3�*�0���\��$�n��������N��#�,�#��#�*������N���;����a�$�a�H�]��q� �q�h���Q"��)9�Q"�h�*��o+��*:�o+�d�,��,�,�,�&�2��C4��"2�C4�L�*��x3�!�x3�v�*��<��*�*�<�,����d�#���$������d�#�%#�%#�$�%#�P>�>�BI�I�X�z���H�M�M�O���eE���.�.���N��s�J=�=K�K

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists