
    <eq%                   R   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZ d dlm Z   e d          Z! ej"                    \  Z#Z$	 ej%        %                    d	           d
Z&n# ej%        j'        $ r dZ&Y nw xY wda(da)da* e
j+        e,          j-        dz  Z.e.dz  Z/ ed           Z0 ed          Z1d Z2d Z3 G d d          Z4 G d d          Z5 G d de4e          Z6 G d de6          Z7 G d de5e6          Z8 G d de5e7          Z9 G d de6          Z: G d  d!e:          Z; G d" d#e6          Z< G d$ d%e<          Z= ej>        e& d&           G d' d(e6                      Z? ej>        e& d&           G d) d*e?                      Z@ G d+ d,e          ZA G d- d.eA          ZB G d/ d0e          ZC G d1 d2eC          ZD G d3 d4e4e          ZE G d5 d6eE          ZF G d7 d8e4e          ZG G d9 d:eG          ZH G d; d<e          ZI G d= d>eI          ZJ G d? d@e4e          ZK G dA dBeK          ZL G dC dDe          ZM G dE dFeM          ZN G dG dHejO                  ZP ejQ        d
I           G dJ dK                      ZR ejQ        d
I           G dL dM                      ZS G dN dO          ZT G dP dQ          ZUeVdRk    r ejW                     dS dS )S    )annotationsN)datedatetimetime	timedeltatimezone)cached_property)_support)OS_ENV_LOCKTZPATH_TEST_LOCKZoneInfoTestBase)import_modulelzmatzdataTFdatazzoneinfo_data.json   hoursc                     t          j        t          j        d                    at          t          t          dz            at          t          t          dz  d          ad S )Nzoneinfo)prefixv2v1T)r   )	pathlibPathtempfilemkdtempTEMP_DIRZoneInfoDataZONEINFO_JSONZONEINFO_DATAZONEINFO_DATA_V1     7/usr/lib/python3.11/test/test_zoneinfo/test_zoneinfo.pysetUpModuler&   ,   sS    
 |H,J???@@H 4@@M#M8d?tLLLr$   c                 8    t          j        t                     d S N)shutilrmtreer   r#   r$   r%   tearDownModuler+   6   s    
M(r$   c                  N     e Zd ZdZed             Zed             Z fdZ xZS )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                    d S r(   r#   selfs    r%   tzpathzTzPathUserMixin.tzpathD       tr$   c                    dS )NTr#   r/   s    r%   block_tzdatazTzPathUserMixin.block_tzdataH   r2   r$   c                j   t          j                    5 }|                    |                     | j        | j        t                               |                     |                                j	                   d d d            n# 1 swxY w Y   t                                                       d S )N)r4   lock)
contextlib	ExitStackenter_contexttzpath_contextr1   r4   r   
addCleanuppop_allclosesupersetUpr0   stack	__class__s     r%   r?   zTzPathUserMixin.setUpL   s    !## 	3u##K!%!2) $     OOEMMOO1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	s   A'BBB)	__name__
__module____qualname____doc__propertyr1   r4   r?   __classcell__rB   s   @r%   r-   r-   :   sx            X   X        r$   r-   c                  >     e Zd ZdZ G d de          Z fdZ xZS )DatetimeSubclassMixinzP
    Replaces all ZoneTransition transition dates with a datetime subclass.
    c                  $    e Zd Zed             ZdS )&DatetimeSubclassMixin.DatetimeSubclassc                     | |j         |j        |j        |j        |j        |j        |j        |j        |j        	  	        S )N)tzinfofold)	yearmonthdayhourminutesecondmicrosecondrO   rP   )clsdts     r%   from_datetimez4DatetimeSubclassMixin.DatetimeSubclass.from_datetime`   sH    3		yW
 
 
 
r$   N)rC   rD   rE   classmethodrZ   r#   r$   r%   DatetimeSubclassrM   _   s-        		 	 
	 	 	r$   r\   c              #     K   t                                          |          }|D ]=}|j        }| j                            |          }t          j        ||          }|V  >d S )N)
transition)r>   load_transition_examplesr^   r\   rZ   dataclassesreplace)r0   keytransition_examplesztrY   new_dtnew_ztrB   s          r%   r_   z.DatetimeSubclassMixin.load_transition_examplesn   su      #gg>>sCC% 	 	BB*88<<F (???FLLLL		 	r$   )rC   rD   rE   rF   r   r\   r_   rH   rI   s   @r%   rK   rK   Z   sl             8           r$   rK   c                       e Zd ZeZdZ fdZed             Zed             Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )ZoneInfoTestZoneInfoc                z    t                                                       | j                                         d S r(   )r>   r?   klassclear_cacher0   rB   s    r%   r?   zZoneInfoTest.setUp{   s0     	
     r$   c                    t           S r(   r!   r/   s    r%   zoneinfo_datazZoneInfoTest.zoneinfo_data       r$   c                    | j         j        gS r(   rp   r1   r/   s    r%   r1   zZoneInfoTest.tzpath       ")**r$   c                ,    |                      |          S r(   rk   r0   rb   s     r%   zone_from_keyzZoneInfoTest.zone_from_key   s    zz#r$   c                4    t                                           S r(   )ZoneDumpDatatransition_keysr/   s    r%   zoneszZoneInfoTest.zones   s    ++---r$   c                4    t                                           S r(   )rz   fixed_offset_zonesr/   s    r%   r~   zZoneInfoTest.fixed_offset_zones   s    ..000r$   c                6    t                               |          S r(   )rz   r_   rw   s     r%   r_   z%ZoneInfoTest.load_transition_examples   s    44S999r$   c                   |                                  D ]g}|                     |          5  |                     |          }|                     t	          |          |           d d d            n# 1 swxY w Y   h| j        j        d         }| j                            |          }t          |d          5 }|                     d|          5  | j	        
                    |          }|                     t	          |          t          |                     d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   rbz	Repr test)	test_namepath)r|   subTestrx   assertEqualstrrp   keyspath_from_keyopenrk   	from_filerepr)r0   rb   zifile_key	file_pathfzi_ffs          r%   test_strzZoneInfoTest.test_str   s   ::<< 	/ 	/Cc"" / /'',,  R#.../ / / / / / / / / / / / / / / %*1-&44X>>	)T"" 	:a)DD : :
,,Q//  UT%[[999: : : : : : : : : : : : : : :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:sH   9A11A5	8A5	9E AD(E (D,	,E /D,	0E  EEc                   t          t          |                                                     }|                     |          }| j        }|                     d          5  |                     t          |          |           d d d            n# 1 swxY w Y   | j        j	        d         }| j        
                    |          }t          |d          5 }| j                            ||          }d d d            n# 1 swxY w Y   |                     d          5  |                     t          |          |           d d d            n# 1 swxY w Y   t          |d          5 }| j                            |          }d d d            n# 1 swxY w Y   |                     d          5  |                     t          |          |           d d d            d S # 1 swxY w Y   d S )Nzfrom key)namer   r   rb   zfrom file with keyzfrom file without key)nextiterr|   rk   
class_namer   assertRegexr   rp   r   r   r   r   )	r0   rb   r   r   r   r   r   r   zi_ff_nks	            r%   	test_reprzZoneInfoTest.test_repr   s    4

%%&&ZZ___
\\z\** 	3 	3T"XXz222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 %*1-&44X>>	)T"" 	:aJ(((99E	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: \\3\44 	6 	6T%[[*555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 )T"" 	/az++A..H	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ \\6\77 	9 	9T(^^Z888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9sZ   !$BBBDDD"$EEE-FFF5$G&&G*-G*c                2    t          t                                                               } fd}d j        |fd j        j        |fd|d ff}|D ]\  }}} ||          }                     |          5                       |j        |           d d d            n# 1 swxY w Y                        | d          5                       t                    5  d|_        d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nc                    t          j                            |           d          5 }j                            |          cd d d            S # 1 swxY w Y   d S )Nr   )r   rp   r   rk   r   )rb   r   r0   s     r%   from_file_nokeyz8ZoneInfoTest.test_key_attribute.<locals>.from_file_nokey   s    d(66s;;TBB /az++A../ / / / / / / / / / / / / / / / / /s   AAAzPrimary constructorno_cacher   z
: readonlyz
Some/Value)
r   r   r|   rk   r   r   r   rb   assertRaisesAttributeError)r0   rb   r   constructorsmsgconstructorexpectedr   s   `       r%   test_key_attributezZoneInfoTest.test_key_attribute   s   4

%%&&	/ 	/ 	/ 	/ 	/
 #DJ4,c2/40
 +7 
	* 
	*&ChS!!B c"" 3 3  2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 00011 * *&&~66 * *)BF* * * * * * * * * * * * * * ** * * * * * * * * * * * * * *
	* 
	*sH   :B""B&	)B&	D C4(D4C88D;C8<DD	D	c                    g d}|D ]N}|                      | j        j                  5  |                     |           d d d            n# 1 swxY w Y   Od S )N)zEurasia/BadzoneBZQzAmerica.Los_Angelesu   🇨🇦u   America/NewYork)r   moduleZoneInfoNotFoundErrorrk   r0   bad_keysbad_keys      r%   test_bad_keyszZoneInfoTest.test_bad_keys   s    
 
 
   	$ 	$G""4;#DEE $ $

7###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$s   A

A	A	c                    g d}|D ]I}|                      t                    5  |                     |           d d d            n# 1 swxY w Y   Jd S )N)z/America/Los_AngeleszAmerica/Los_Angeles/z../zoneinfo/America/Los_AngeleszAmerica/../America/Los_AngeleszAmerica/./Los_Angeles)r   
ValueErrorrk   r   s      r%   test_bad_keys_pathsz ZoneInfoTest.test_bad_keys_paths   s    
 
 
   	$ 	$G"":.. $ $

7###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $	$ 	$s   AA		A		c                    ddg}|D ]b}t          j        |          }|                     t                    5  | j                            |           d d d            n# 1 swxY w Y   cd S )Nr$   s   AAAA3               )ioBytesIOr   r   rk   r   )r0   	bad_zonesbad_zonefobjs       r%   test_bad_zoneszZoneInfoTest.test_bad_zones   s     
	
 " 	+ 	+H:h''D"":.. + +
$$T***+ + + + + + + + + + + + + + +	+ 	+s   AA"	%A"	c                l   t          t          |                                                     }|                     |          }t	          dddt
          j                  t          ft	          ddd          t          ft          ddd          t          ft          d          t          fdt          fdt          fg}|D ]u\  }}|                     |          5  |                     |          5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   vd S )N  r   rO   r   z
2019-01-01)val)r   r   r|   rx   r   r   utcr   r   	TypeErrorr   r   r   fromutc)r0   rb   zone
bad_valuesr   exc_types         r%   test_fromutc_errorsz ZoneInfoTest.test_fromutc_errors   s   4

%%&&!!#&& dAq666
CdAq!!:.$1y)!WWi 	N9%

 ( 	& 	&MC#&& & &&&x00 & &LL%%%& & & & & & & & & & & & & & && & & & & & & & & & & & & & &	& 	&s6   D(/DD(DD(DD((D,	/D,	c                Z   |                      d          }t          ddd|          }|                     |                                t                     |                     |                                t                     |                     |                                d           d S )NUTC  r   r   )rk   r   r   	utcoffsetZEROdsttzname)r0   r   rY   s      r%   test_utczZoneInfoTest.test_utc  s    ZZdAq,,,...4(((e,,,,,r$   c           	        g }|                                  D ]}|                     |          D ]h}|                    ||j        t	          d          z
  |j        f           |                    ||j        t	          d          z   |j        f           i|D ]\  }}}|                     |||          5  |                     |          }|	                    |          }| 
                    |                                |j        |           | 
                    |                                |j        |           | 
                    |                                |j        |           d d d            n# 1 swxY w Y   d S )N   )days)rb   rY   offsetr   )r|   r_   appendr^   r   offset_beforeoffset_afterr   rx   ra   r   r   r   r   )r0   
test_casesrb   zone_transitionrY   r   tzis          r%   test_unambiguouszZoneInfoTest.test_unambiguous  s   
::<< 	 	C#'#@#@#E#E  !!'2YA5F5F5FF'5   !!'2YA5F5F5FF'4   "  * 	; 	;OCV#"V<< ; ;((--ZZsZ++  fmR@@@  1A2FFF  6:r:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;	; 	;s   8B6E::E>	E>	c                   g }|                                  D ]B}g g d}|                     |          D ]}|j        r	|d         }n|j        r	|d         }nd }&|j        t          d          z
  }|                    |d|j        f           |                    |d|j        f           |j        }|                    |d|j        f           |                    |d|j        f           |j        t          d          z   }|                    |d|j        f           |                    |d|j        f           |j	        t          d          z
  }|                    |d|j        f           |                    |d|j        f           |j	        }|                    |d|j        f           |                    |d|j        f           |j	        t          d          z   }|                    |d|j        f           |                    |d|j        f           |
                                D ]\  }}|                    ||f|f           D|D ]\  \  }}}|                     ||          5  |                     |          }	|D ]\  }}
}|                    |
|	          }|                     |                                |j        |           |                     |                                |j        |           |                     |                                |j        |           	 d d d            n# 1 swxY w Y   d S )	N)foldsgapsr   r   r   secondsr   )rb   grprP   rO   )r|   r_   rP   gapanomaly_startr   r   r   r   anomaly_enditemsr   rx   ra   r   r   r   r   )r0   r   rb   testsrd   
test_groupno_peephole_optrY   r   r   rP   r   s               r%   test_folds_and_gapsz ZoneInfoTest.test_folds_and_gaps4  s   
::<< (	< (	<C "--E33C88 #< #<7 	!&wJJV !&vJJ
 '+O %	!(<(<(<<!!2q"*:";<<<!!2q"*:";<<<%!!2q"*:";<<<!!2q"/":;;;%	!(<(<(<<!!2q"*:";<<<!!2q"/":;;;^i&:&:&::!!2q"*:";<<<!!2q"/":;;;^!!2q"/":;;;!!2q"/":;;;^i&:&:&::!!2q"/":;;;!!2q"/":;;;;#(;;== < <Z!!C:z":;;;;< ", 		? 		?JS##3// ? ?((--(- ? ?$Bfc::B$$RYY[[&-DDD$$R\\^^V5ErJJJ$$RVVXXvz2>>>>?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?		? 		?s   <C M		M	M	c           	     "   |                                  D ]}|                     |          }|                     |          5  |                     |          D ]}|j        s
|j        }|t          d          z
  }|t          d          z   }|                    |          }|                     |j        d||f           |                    |          }|                     |j        d||f           	 d d d            n# 1 swxY w Y   d S )Nr   r   r   r   )	r|   rx   r   r_   rP   transition_utcr   
astimezoner   )	r0   rb   r   rd   dt_utcdt_before_utcdt_after_utc	dt_beforedt_afters	            r%   test_folds_from_utcz ZoneInfoTest.test_folds_from_utck  s   ::<< 	K 	KC##C((B#&& K K77<< K KB7 ! .F$*Yq-A-A-A$AM#)Ia,@,@,@#@L - 8 8 < <I$$Y^QF8KLLL+66r::H$$X]A&7IJJJJKK K K K K K K K K K K K K K K	K 	Ks   B4DD	
D	c                   |                                  D ]}|                     |          }t          dddd|          }|                     |          5  |                     |                                d            |                     |                                d            |                     |                                d            d d d            n# 1 swxY w Y   d S N      r   i  r   r   )r|   rx   r   r   assertIsr   r   r   )r0   rb   r   ts       r%   test_time_variable_offsetz&ZoneInfoTest.test_time_variable_offset}  s   ::<< 	- 	-C##C((BRQb111A#&& - -ahhjj$///akkmmT222aeeggt,,,- - - - - - - - - - - - - - -		- 	-s   A9CC	"C	c                   |                                  D ]\  }}|                     |          }t          dddd|          }|                     |          5  |                     |                                |j                   |                     |                                |j                   |                     |                                |j                   d d d            n# 1 swxY w Y   d S r   )r~   rx   r   r   r   r   r   r   )r0   rb   r   r   r   s        r%   test_time_fixed_offsetz#ZoneInfoTest.test_time_fixed_offset  s!   2244 	6 	6KC##C((BRQb111A#&& 6 6  V];;;  0@AAA  &*5556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6s   BC--C1	4C1	)rC   rD   rE   py_zoneinfor   r   r?   rG   rp   r1   rx   r|   r~   r_   r   r   r   r   r   r   r   r   r   r   r   r   r   rH   rI   s   @r%   rh   rh   w   s{       FJ! ! ! ! !   X + + X+  . . .1 1 1: : :: : :"9 9 90* * *2$ $ $$ $ $	+ 	+ 	+& & &$- - -; ; ;:5? 5? 5?nK K K$	- 	- 	-	6 	6 	6 	6 	6 	6 	6r$   rh   c                      e Zd ZeZd ZdS )CZoneInfoTestc                    d }ddg}d}|                      |          }|                     |          D ];}|j        r2|j        j        t
          k    r|j                            |          } n<dD ]}|r ||          }n|}|                     |          5  |	                    |          }| 
                    |j        d           | 
                    |j        d	           d
d
d
           n# 1 swxY w Y   d
S )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                     G d dt          |                     } || j        | j        | j        | j        | j        | j        | j        | j        | j	        	  	        S )Nc                       e Zd Z fdZ xZS )LCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclassc                p    |t          d          k    r| S t                                          |          S Nr   )r   r>   __add__)r0   otherrB   s     r%   r   zTCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclass.__add__  s/    	!,,# 77??5111r$   )rC   rD   rE   r   rH   rI   s   @r%   SameAddSubclassr     s8        2 2 2 2 2 2 2 2 2r$   r  r   )
typerQ   rR   rS   rT   rU   rV   rW   rP   rO   )rY   r  s     r%   to_subclassz3CZoneInfoTest.test_fold_mutate.<locals>.to_subclass  sz    2 2 2 2 2$r(( 2 2 2 #?		Wy
 
 
 
r$   FTEurope/Londonr   )FT)subclassr   r   N)rx   r_   rP   r   r   r   r   ra   r   r   r   )	r0   r  r  rb   r   rd   examplerY   
dt_fromutcs	            r%   test_fold_mutatezCZoneInfoTest.test_fold_mutate  si   	 	 	( 4=$$//44 	 	Bw 2?4<<+3323>>% 
	- 
	-H  [))x00 - -ZZ^^
  !444  !,,,	- - - - - - - - - - - - - - -
	- 
	-s   AC22C6	9C6	N)rC   rD   rE   
c_zoneinfor   r	  r#   r$   r%   r   r     s(        F0- 0- 0- 0- 0-r$   r   c                      e Zd ZdS )ZoneInfoDatetimeSubclassTestNrC   rD   rE   r#   r$   r%   r  r            Dr$   r  c                      e Zd ZdS )CZoneInfoDatetimeSubclassTestNr  r#   r$   r%   r  r    r  r$   r  c                  4     e Zd Ze fd            Zd Z xZS )ZoneInfoSubclassTestc                    t                                                        G d d| j                  }d| _        | j        | _        || _        d S )Nc                      e Zd ZdS )3ZoneInfoSubclassTest.setUpClass.<locals>.ZISubclassNr  r#   r$   r%   
ZISubclassr    s        Dr$   r  )r>   
setUpClassrk   r   parent_klass)rX   r  rB   s     r%   r  zZoneInfoSubclassTest.setUpClass  sc    	 	 	 	 	 	 	 	 &9			r$   c                    |                      d          }|                     d          }|                     ||           |                     || j                    |                     || j                   d S )Nr  )r  rk   assertIsNotassertIsInstance)r0   base_objsub_objs      r%   test_subclass_own_cachez,ZoneInfoSubclassTest.test_subclass_own_cache  ss    $$_55**_--7+++h(9:::gtz22222r$   )rC   rD   rE   r[   r  r  rH   rI   s   @r%   r  r    sQ            [3 3 3 3 3 3 3r$   r  c                      e Zd ZeZdS )CZoneInfoSubclassTestNrC   rD   rE   r
  r   r#   r$   r%   r   r             FFFr$   r   c                  *    e Zd Zed             Zd ZdS )ZoneInfoV1Testc                    t           S r(   )r"   r/   s    r%   rp   zZoneInfoV1Test.zoneinfo_data  s    r$   c              #     K   t          ddd          }t          d          }||z
  }||z   }t                              |          D ]}||j        cxk    r|k    rn |V  d S )N  r           r   )r   r   rz   r_   r^   )r0   rb   epochmax_offset_32min_dtmax_dtrd   s          r%   r_   z'ZoneInfoV1Test.load_transition_examples  s       q!$$!'222&&77<< 	 	B0000&00000	 	r$   N)rC   rD   rE   rG   rp   r_   r#   r$   r%   r$  r$    s<            X 
 
 
 
 
r$   r$  c                      e Zd ZeZdS )CZoneInfoV1TestNr!  r#   r$   r%   r.  r.    r"  r$   r.  z4Skipping tzdata-specific tests: tzdata not installedc                  D    e Zd ZdZed             Zed             Zd ZdS )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                    g S r(   r#   r/   s    r%   r1   zTZDataTests.tzpath  s    	r$   c                    dS )NFr#   r/   s    r%   r4   zTZDataTests.block_tzdata  s    ur$   c                .    |                      |          S )Nr   rv   rw   s     r%   rx   zTZDataTests.zone_from_key  s    zzcz"""r$   N)rC   rD   rE   rF   rG   r1   r4   rx   r#   r$   r%   r0  r0    sc            X   X# # # # #r$   r0  c                      e Zd ZeZdS )CTZDataTestsNr!  r#   r$   r%   r5  r5    s         FFFr$   r5  c                  D    e Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zdd
ZdS )WeirdZoneTestc           
         t          dt          ddd                     }t          dt          d                     }t          t          ddd	d
          ||          g}d}|                     ||          }| j                            |          }t          ddd	d|          }t          dddd|          }||f||ffD ]\  }	}
|                     d|	          5  |                     |		                                |
j	                   |                     |	
                                |
j
                   |                     |	                                |
j                   d d d            n# 1 swxY w Y   t          ddd	d|          t          ddd	dddt          j                  ft          dddd|          t          ddddt          j                  fg}|D ]\  }}|                     d|          5  |                    |          }|                     ||           |                    t          j                  }|                     ||           d d d            n# 1 swxY w Y   d S )NLMT      r   )r   minutesr   STDr   [  	      STD6r   r   
   local)r   rY                 r   )
ZoneOffsetr   ZoneTransitionr   construct_zonerk   r   r   r   r   r   r   r   r   r   )r0   r9  r=  transitionsafterzfr   dt0dt1rY   r   dtsdt_localr   	dt_actualdt_utc_actuals                   r%   test_one_transitionz!WeirdZoneTest.test_one_transition#  s	   B!J!J!J JKK!3!3!3 344 8D!Q33S#>>
   e44Z!!"%%tQ1R000tQAb111:Sz2 	7 	7JB7r22 7 7  fm<<<  1ABBB  6:6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 q!Qr222q!QAhlCCC
 q!R333q!R===	
 !$ 	8 	8Hf9:: 8 8"--b11	  H555 ( 3 3HL A A  7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s&   !BE55E9	<E9	A!I22I6	9I6	c           	     &   t          dt          t                    }t          t          ddd          ||          g}d}|                     ||          }| j                            |          }t          ddd          t          ddd	          t          ddd          t          d
dd          t          ddd          g}|D ]}|                    |          }|                     |          5  | 	                    |
                                |j
                   | 	                    |                                |j                   | 	                    |                                |j                   d d d            n# 1 swxY w Y   d S )NDSTr'  r   zSTD0DST-1,0/0,J365/25l     i  r?  rG  rE  r     r   rY   )rI  ONE_HrJ  r   rK  rk   r   ra   r   r   r   r   r   )r0   rW  rL  rM  rN  r   rQ  rY   s           r%   test_one_zone_dstzWeirdZoneTest.test_one_zone_dstL  s   u--8D!Q//c::
 (  e44Z!!"%% T1a  T1b!!T1a  T2q!!T1a  
  	4 	4B2&&B$$ 4 4  cj999  ???  373334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	4 	4s   1BFF		F		c                ~   t          dt          t                    }t          ddt          z  t                    }g }t          dd          D ]j}|                    t          t          |ddd          ||                     |                    t          t          |ddd          ||                     kd	}|                     ||          }| j        	                    |          }t          d
dd          |ft          ddd          |ft          ddd          |ft          ddd          |fg}|D ]\  }	}
|	
                    |          }	|                     |	          5  |                     |	                                |
j                   |                     |	                                |
j                   |                     |	                                |
j                   d d d            n# 1 swxY w Y   t!          d|          }|                     d          5  |                     |                                d            |                     |                                d            |                     |                                d            d d d            d S # 1 swxY w Y   d S )Nr=  rW  r       rY  r   r    i  rF  i  r   r[  r   zTesting datetime.time)rI  r\  r   ranger   rJ  r   rK  rk   r   ra   r   r   r   r   r   r   r   )r0   r=  rW  rL  rQ   rM  rN  r   casesrY   r   r   s               r%   test_no_tz_strzWeirdZoneTest.test_no_tz_strf  s   t,,E	511$%% 	 	DxaA66SAA   xb!Q77cBB      e44
 Z!!"%% dAq!!3'dAq!!3'dB""C(dAq!!3'	
   	7 	7JB2&&B$$ 7 7  fm<<<  1ABBB  6:6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 2\\122 	) 	)MM!((**d+++MM!++--...MM!%%''4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s&   &BG::G>	G>	,A9J22J69J6c                   t          dt          t                    t          dt          t                    g}|D ]J}t          d ||          g}d}|                     ||          }| j                            |          }t          ddd          t          ddd          t          ddd          g}|D ]}|                    |          }| 	                    ||	          5  | 
                    |                                |j                   | 
                    |                                |j                   | 
                    |                                |j                   d d d            n# 1 swxY w Y   ϐLd S )
Nr=  rW  ra  rX  r   r'  r`  r   )r   rY   )rI  r   r\  rJ  rK  rk   r   r   ra   r   r   r   r   r   )	r0   offsetsr   rL  rM  rN  r   rQ  rY   s	            r%   test_tz_before_onlyz!WeirdZoneTest.test_tz_before_only  s    udD))ueU++

  	; 	;F tVV44K E$$[%88B%%b))B q!$$q!$$q!$$C  ; ;ZZrZ**\\B\77 ; ;$$RYY[[&-@@@$$R\\^^V5EFFF$$RVVXXvz:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;;#	; 	;s   #BE77E;>E;c                    |                      g d          }|                     t                    5  | j                            |           d d d            d S # 1 swxY w Y   d S )Nra  )rK  r   r   rk   r   )r0   rN  s     r%   test_empty_zonezWeirdZoneTest.test_empty_zone  s      R((z** 	% 	%J  $$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   AA Ac                   t          dt          d                    }t          dt                    }d||ft          t	          ddd          ||          d||fg}d	}|                     ||          }| j                            |d
          }t          j        |ft          j	        |ft	          ddd          |ft	          ddd          |fg}|D ]\  }}	|
                    |          }
|                     d|
|	          5  |                     |
                                |	j                   |                     |
                                |	j                   |                     |
                                |	j                   ddd           n# 1 swxY w Y   t          j        t          j        t          d          z   ft	          dddddd          t	          ddd          ft	          ddddddd          t	          ddddddd          ft	          dddddd          t	          dddddd          ft	          d dd          t	          d dd          ft          j	        t          j	        fg}|D ]z\  }}|
                    |          }
|
                    t           j                  }|                     |                    |          |
           |                     |
|           {dS )!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``.
        r9  8r   GMTl         x  r   l            GMT0Africa/Abidjanr   iw  rG  r;  r   r   r   )r   rY   r   Ni  ij     +   4   ik  ;   ?B r      rD     r'  )rI  r   r   rJ  r   rK  rk   r   minmaxra   r   r   r   r   r   r   r   r   )r0   r9  rl  rL  rM  rN  r   offset_casesdt_naiver   rY   	utc_casesnaive_dtnaive_dt_utcr   s                  r%   test_zone_very_large_timestampz,WeirdZoneTest.test_zone_very_large_timestamp  s?    	$ 7 7 788%% c"8D!Q//c::S!
   e44Z!!"*:!;; \3\3dB##S)dAq!!3'	
 !- 	7 	7Hf!!!,,B86BB 7 7  fm<<<  1ABBB  6:6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 \8<)C*@*@*@@AdBBB//$11E1EFr2r2r6::q!QAv66 dAq!R++XdAq!R-K-KLdAq!!8D!Q#7#78\8<(

	 '0 	) 	)"Hl!!!,,B!)))>>FV..r22B777R((((	) 	)s   BFF	!F	c                    t          dt          t                    }t          t          ddd          ||          g}d}|                     ||          }| j                            |d          }t          ddd|          }|                     d          5  |                     |	                                |j	                   |                     |
                                |j
                   |                     |                                |j                   d d d            n# 1 swxY w Y   t          d	|          }|                     d
          5  |                     |	                                |j	                   |                     |
                                |j
                   |                     |                                |j                   d d d            d S # 1 swxY w Y   d S )Nr   r'  r   UTC0r   r   r   zdatetime.datetimer   zdatetime.time)rI  r   rJ  r   rK  rk   r   r   r   r   r   r   r   )r0   r   rL  rM  rN  r   rY   r   s           r%   $test_fixed_offset_phantom_transitionz2WeirdZoneTest.test_fixed_offset_phantom_transition  s/   d++%htQ&:&:CEEF  e44Z!!"%!00dAq,,,\\-.. 	0 	0RYY[[#*555R\\^^S];;;RVVXXsw///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0
 2\\/** 	/ 	/QXXZZ444Q[[]]CM:::QUUWWcg...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s&   BD--D14D1BG33G7:G7NrY  c                   g }g }g }g g g}g g g}g g g}	d}
d}|
|g}d }t          t          ||          d           }|D ]}|\  }}}t          |          D ]\  }\  }}||         }||         }|	|         }|||cxk    r|k    sn 2||vr|                    |           ||vr|                    |           |=|                    |           |                    |                    |                     t          |          }t          |          }t          |          }t          j                    }d}t          t          |df                    D ]}||         }||         }|	|         }||         }t                      }g }|D ]} t          | j                                                  }!t          | j                  }"t          |          }#|                    |!|"|#f           || j                            d          d	z   z  }t%          |          }t          |          }$t          |          }%t          |          }&|                    d
           |                    d|z             |                    d           |                    t)          j        d||||%|$|&                     |                    t)          j        d|% | g|R             |                    t)          j        d|% dg|R             |D ]'}'|                    t)          j        dg|'R             (|                    t%          |                     |                    t)          j        | dg|R             |                    t)          j        | dg|R             |                    t)          j        d| dg|R             |dk    rR|                    d           |                    |                    d                     |                    d           |                    d           |S )N)i   r(  )l         l            c                    t          | t                    r| S | j        r't          | j                                                  }nd }|| j        | j        fS r(   )
isinstancetupler^   intr   	timestampr   r   )rd   
trans_times     r%   zt_as_tuplez1WeirdZoneTest.construct_zone.<locals>.zt_as_tuple  sZ    
 "e$$ 	} " !2!<!<!>!>??

!
 0"/BBr$   c                    | d         S r   r#   )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   rb  rw  	bytearrayr  r   total_secondsboolr   r   encodebyteswritestructpackseek)(r0   rL  rM  versionisutcisstdleap_secondsoffset_liststrans_times_liststrans_idx_listsv1_rangev2_rangerangesr  rd   r  r   r   vdt_mindt_maxrf  trans_times	trans_idxisutcntisstdcntleapcntzonefile
time_types	time_typeabbrstrttinfosr   utcoffisdstabbrindtypecnttimecntcharcntttinfos(                                           r%   rK  zWeirdZoneTest.construct_zone  s    BxHr(((H%	C 	C 	C Sk::OOO 	B 	BB683J|'0'8'8 B B##FF&q//2+A.	)j2222F2222 //NN=111w..NN<000)&&z222$$W]]<%@%@AAA%B( e**u::l##:<<
sGQ<(()) 3	( 3	(A"1oG+A.K'*I"1I  kkGG! C CV-;;==>>VZ((g,,w78886=//887BBGnnG'llG+&&G'llG NN7###NN57?+++NN9%%%NN7Hgw    NN6;'?7'?I'?'?N+NNNOOONN6;~7~~~B	BBBCCC! = =v{6;F;;;<<<<NN5>>*** NN6;'}}}=u===>>>NN6;(~~~>>>>???NN6;~7~~~EEEEFFF 1uuw'''u||G44555w'''ar$   )NrY  )rC   rD   rE   r   r   rU  r]  rd  rg  ri  r~  r  rK  r#   r$   r%   r7  r7     s        F'8 '8 '8R4 4 44)) )) ))V"; "; ";H% % %;) ;) ;)z/ / /*t t t t t tr$   r7  c                      e Zd ZeZdS )CWeirdZoneTestNr!  r#   r$   r%   r  r    r"  r$   r  c                       e Zd ZeZdZdZdZe fd            Z	ed             Z
d Zd Zd Zd	 Zed
             Z xZS )	TZStrTestr   r   r   c                    t                                                       |                                  |                                  d S r(   )r>   r  _populate_test_casespopulate_tzstr_header)rX   rB   s    r%   r  zTZStrTest.setUpClass  sC      """!!#####r$   c                    t                      }t          d          D ].}|dz  }|dz  }|dz  }|t          j        ddddddd          z  }/t	          |          | _        d S )Nr   r     3r  r  r   )r  rb  r  r  r  _tzif_header)rX   out_s      r%   r  zTZStrTest.populate_tzstr_header  sv    kk
 q 	8 	8A7NC4KC9C 6;uaAq!Q777CC ::r$   c                f   t          j        | j                  }|                    dd           |                    d           |                    |                    d                     |                    d           |                    d           | j                            ||          S )z/Creates a zoneinfo file following a POSIX rule.r   r   r  r  r   )r   r   r  r  r  r  rk   r   )r0   tzstrr  s      r%   zone_from_tzstrzTZStrTest.zone_from_tzstr  s    :d/00a 	wu||G,,---waz##H%#888r$   c                z   | j                                         D ]\  }}|                     |          5  |                     |          }d d d            n# 1 swxY w Y   |D ]\  }}}|                    |          }|                     |||          5  |                     |                                |j                   |                     |                                |j                   |                     |                                |j                   d d d            n# 1 swxY w Y   Ԑ!d S )Nr  r   )r  rY   r   )	r   r   r   r  ra   r   r   r   r   )r0   r  rc  r   rz  r   r  rY   s           r%   test_tzstr_localizedzTZStrTest.test_tzstr_localized  s    O1133 
	; 
	;LE5E** 1 1))%001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 (- ; ;#&!%%R%00\\"V\DD ; ;$$RYY[[&-@@@$$R\\^^V5EFFF$$RVVXXvz:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;;	
	; 
	;s$   AA	A	BD--D14D1c                   | j                                         D ]D\  }}|                     |          5  |                     |          }d d d            n# 1 swxY w Y   |D ]\  }}}|| j        k    r||j        z
                      t          j                  }|	                    |          }|                    |          }	| 
                    ||	           || j        k    r"| 
                    |j        |j        |           n| 
                    |j        d           |		                    t          j                  }| 
                    ||           Fd S )Nr  r   r   )r   r   r   r  GAPr   ra   r   r   r   r   FOLDrP   )
r0   r  rc  r   rz  r   dt_typer   dt_actdt_exps
             r%   test_tzstr_from_utczTZStrTest.test_tzstr_from_utc  s    O1133 	1 	1LE5E** 1 1))%001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 .3 1 1)&'dh&&"V%55>>#< ?  
  **2..!)))44  000di''$$V[(-JJJJ$$V[!444  **8<88  0000-1		1 	1s   AA	A	c                ,   g d}|D ]}|                      |          5  t          j        |          }|                     t          |          5  |                     |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )N)PST8PDT+11zGMT,M3.2.0/2,M11.1.0/3zGMT0+11,M3.2.0/2,M11.1.0/3zPST8PDT,M3.2.0/2zSTD+25zSTD-25zSTD+374zSTD+374DST,M3.2.0/2,M11.1.0/3zSTD+23DST+25,M3.2.0/2,M11.1.0/3zSTD-23DST-25,M3.2.0/2,M11.1.0/3zAAA4BBB,M1443339,M11.1.0/3zAAA4BBB,M3.2.0/2,0349309483959czAAA4BBB,M13.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M13.1.1/2zAAA4BBB,M0.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M0.1.1/2zAAA4BBB,M1.6.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M1.6.1/2zAAA4BBB,M1.1.7/2,M2.1.1/2zAAA4BBB,M1.1.1/2,M2.1.7/2zAAA4BBB,-1/2,20/2zAAA4BBB,1/2,-1/2zAAA4BBB,367,20/2zAAA4BBB,1/2,367/2zAAA4BBB,J0/2,J20/2zAAA4BBB,J20/2,J366/2r  )r   reescapeassertRaisesRegexr   r  )r0   invalid_tzstrsinvalid_tzstrtzstr_regexs       r%   test_invalid_tzstrzTZStrTest.test_invalid_tzstr  s)   #
 #
 #
J , 	8 	8MM22 8 8 !i66++JDD 8 8((7778 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s5   0BA1%B1A55B8A59BB	B	c                   fd}| j         | j        | j        i |fd            }|fd            }|fd            }|fd            }|fd            }|fd            }|fd            }|fd	            }|fd
            }|fd            }| _        d S )Nc                t    t                    } |              t                    |k    s
J d            dS )zDecorator 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_lenrc  s     r%   callz,TZStrTest._populate_test_cases.<locals>.call  sA     5zzHACCCu::(((*M(((((r$   c                 n   d} t          dt          d          t                    }t          dt          d          t                    }t	          ddd	          |ft	          ddd
dd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd          |ft	          dddddd          |ft	          dddddd          |ft	          dddddd          |ft	          ddddd          |ft	          dddddd          |ft	          dddddd          |ft	          dddddd          |ft	          dddddd          |ft	          dddddd          |ff| <   d S )Nz EST5EDT,M3.2.0/4:00,M11.1.0/3:00ESTr   EDTr   rY  r?  rB  rs  rF  r   rP   r   r   r   r   rv  rI  r   r   r\  r   )r  r  r  r  r  NORMALrc  s      r%   _addz,TZStrTest._populate_test_cases.<locals>._add+  s'    7EUIB$7$7$7>>CUIB$7$7$7??C $1%%sF3$2q"--sF;$2q!!444c3?$2q!!444c3?$2q!!444c3?$2q!!444c3?$A&&V4$Aq"1555sFC$Aq!!444c4@$Aq!!444c4@$1a,,c6:$1a333S#>$1a333S#>$Aq"1555sFC$Aq!!444c4@$Aq!!444c4@!E%LLLr$   c                    d} t          dt          t                    }t          dt          t                    }t          ddd          |ft          ddddd	          |ft          dddd
d          |ft          ddd          |ft          ddddd	d          |ft          dddddd          |ft          dddd
dd          |ft          ddddd	          |ft          dddd
d          |ft          ddddd	d          |ft          dddddd          |ft          dddd
dd          |ff| <   d S )Nz"GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00rl  BSTr   rY     r;  r   rs  r   rB        r   r  r         rI  r   r\  r   )r  rl  r  r  r  r  rc  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._addG  s    9EUD$//CUE511C $2&&V4$2q"--sF;$2q!,,c6:$B''f5$B2A666VD$B11555sC@$B11555sC@$2q"--sF;$2q!,,c6:$B2A666VD$B11555sDA$B11555sFCE%LLLr$   c                    d} t          dt          d          t                    }t          dt          d          t                    }t	          ddd	          |ft	          ddd
dd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          ddd
ddd          |ft	          dddd          |ft	          ddd	dd          |ft	          ddd	ddd          |ft	          ddd	ddd          |ft	          ddd	dd          |ff| <   d S )NzAEST-10AEDT,M10.1.0/2,M4.1.0/3AESTrB  r   AEDTr   r   rF  r:  rD  r   rs  r  r   r   rY     r  )r  r  r  r  r  r  rc  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._add_  s    5Efib&9&9&94@@Dfib&9&9&95AAD $1%%tV4$1a,,dF;$1a!444dFC$1a333T4@$1a333T4@$1a333T4@$1a333T4@$1a333T6B$1a333T6B$Aq))48$Aq"--tV<$Aq!!444dC@$Aq!!444dC@$Aq!,,dF;E%LLLr$   c                    d} t          dt          t                     }t          dt          t                    }t          ddd          |ft          ddddd	          |ft          dddd
d          |ft          ddd          |ft          ddddd	d          |ft          dddddd          |ft          dddddd          |ft          dddd
dd          |ft          ddddd	          |ft          dddd
d          |ft          ddddd	d          |ft          dddddd          |ft          dddd
dd          |ff| <   d S )NzIST-1GMT0,M10.5.0,M3.5.0/1rl  ISTr   rY  r  r;  r   rs  r   rB  r  r  r   r  r   r  r  r  )r  rl  r  r  r  rc  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._addx  s    1EUD5&11CUE400C $2&&V4$2q"--sF;$2q!,,c6:$B''f5$B2A666VD$B11555sDA$B11555sDA$B11555sFC$2q"--sF;$2q!,,c6:$B2A666VD$B11555sDA$B11555sFCE%LLLr$   c                 t    d} t          ddd          t          dt          d                    ff| <   d S )Nz<+11>-11r   r   r  r   r   )r   rI  r   )r  r  rc  s    r%   r  z,TZStrTest._populate_test_cases.<locals>._add  sJ     E T1a((uib&9&9&9::E%LLLr$   c                     d} t          dt          d                    }t          dt          d          t                    }t          ddd	          |ft          dd
d	          |ff| <   d S )Nz<-04>4<-03>,M9.1.6/24,M4.1.6/24-04r  r   -03r   r  r   r   rI  r   r\  r   )r  M04M03r  rc  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._add  s}     6EUIB$7$7$788CUIB$7$7$7??C $1%%sF3$A&&V4E%LLLr$   c                    d} t          dt          d          t                    }t          ddd          |ft          ddd          |ft          ddd	d
ddd          |ft          ddd          |ft          ddd          |ft          ddd          |ft          ddd	d
ddd          |ft          ddd          |ft          ddd          |ft          ddd	d
ddd          |ff
| <   d S )NzEST5EDT,0/0,J365/25r  r  r   r   r   r:  rG  r;  rp  rs  rt  r   rY  i`	  r  )r  r  r  rc  s     r%   r  z,TZStrTest._populate_test_cases.<locals>._add  s+    *EUIB$7$7$7??C $1%%sF3$1%%sF3$BBF;;S&I$1%%sF3$1%%sF3$1%%sF3$BBF;;S&I$1%%sF3$1%%sF3$BBF;;S&IE%LLLr$   c                 6   d} t          dt          d                    }t          dt          d          t                    }t          ddd          |ft          dd	d
          |ft          ddddd          |ft          ddddd          |ft          ddddd          |ft          dddd          |ft          ddddd          |ft          ddddd          |ft          ddddd          |ft          dddd          |ft          ddddddd          |ft          ddd          |ft          dd	d          |ft          ddddd          |ft          ddddd          |ft          ddddd          |ft          dddd          |ft          ddddd          |ft          ddddd          |ft          ddddd          |ft          dddd          |ft          ddddddd          |ff| <   d S )NzAAA3BBB,J60/12,J305/12AAAr  r   BBBr   r   r      rY  r   rs  rG  r   r     rB  r;  rp  rt  r   r  r  r  r  r  r  r  r  rc  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._add  s    -EUIB$7$7$788CUIB$7$7$7??C $1%%sF3$2&&V4$1b"--sF;$1bq1113<$1bq1113<$1b))37$Ar2..V<$Ar222C>$Ar222C>$Ar**C8$BBF;;S&I$1%%sF3$2&&V4$1b"--sF;$1bq1113<$1bq1113<$1b))37$Ar2..V<$Ar222C>$Ar222C>$Ar**C8$BBF;;S&I-E%LLLr$   c                    d} t          dt          d                    }t          dt          d          t                    }t          ddd	          |ft          ddd
ddd          |ft          ddd
dd          |ft          ddd
dd          |ft          ddd
d          |ft          dddd          |ft          ddddd          |ft          ddddd          |ft          dddd          |ff	| <   d S )Nz <-03>3<-02>,M3.5.0/-2,M10.5.0/-1r  r  r   z-02r  r   rY  r  r     rs     r   r  r   rp  rB     r  )r  N03N02r  r  r  rc  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._add  s?    7EUIB$7$7$788CUIB$7$7$7??C $2&&V4$2r2r22C@$2r222C=$2r222C=$2r**C8$B++S&9$B333S$?$B333S$?$B++S&9
E%LLLr$   c                    d} t          dt          d                    }t          dt          d          t                    }t          ddd	d
d          |ft          ddd	d
dd          |ft          ddd	d
dd
          |ft          ddd	dd          |ft          dd	dd
ddd          |ft          dd	dd
ddd          |ft          dd	dd
ddd
          |ft          dd	dddd          |ff| <   d S )Nz%AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45r  r  r   r  r    rY  r   r   r   r  r  r   rF  r   ,   rt  -   r  r  s      r%   r  z,TZStrTest._populate_test_cases.<locals>._add  s?    <EUIB$7$7$788CUIB$7$7$7??C $2q!,,c6:$2q"1555sC@$2q"1555sC@$2q"--sF;$Aq"b&993G$Aq"bq9993E$Aq"bq9993E$Aq"b113?	E%LLLr$   )r  r  r  r   )rX   r  r  r  r  r  rc  s      @@@@r%   r  zTZStrTest._populate_test_cases  s1   		N 		N 		N 		N 		N xg		 	 	 	 	 	 	 
	6 
	 	 	 	 	 	 	 
	. 
	 	 	 	 	 	 	 
	0 
	 	 	 	 	 	 
	. 

	 
	 
	 
	 
	 

	 

	 
	 
	 
	 
	 

	 
	 	 	 	 	 
	( 
	 	 	 	 	 	 	 
	@ 
	 	 	 	 	 	 	 
	, 
	 	 	 	 	 	 	 
	$ r$   )rC   rD   rE   r   r   r  r  r  r[   r  r  r  r  r  r  r  rH   rI   s   @r%   r  r    s        FFD
C$ $ $ $ [$ & & [& 9 9 9; ; ;1 1 1:,8 ,8 ,8\ | | [| | | | |r$   r  c                      e Zd ZeZdS )
CTZStrTestNr!  r#   r$   r%   r  r    r"  r$   r  c                  x     e Zd ZeZ fdZed             Zed             Zd Z	d Z
d Zd Zd Zd	 Zd
 Z xZS )ZoneInfoCacheTestc                z    | j                                          t                                                       d S r(   )rk   rl   r>   r?   rm   s    r%   r?   zZoneInfoCacheTest.setUp  s,    
   r$   c                    t           S r(   ro   r/   s    r%   rp   zZoneInfoCacheTest.zoneinfo_data  rq   r$   c                    | j         j        gS r(   rs   r/   s    r%   r1   zZoneInfoCacheTest.tzpath  rt   r$   c                ~    |                      |                     d          |                     d                     d S )NAmerica/Los_Angeles)r   rk   r/   s    r%   test_ephemeral_zonesz&ZoneInfoCacheTest.test_ephemeral_zones   sA    JJ,--tzz:O/P/P	
 	
 	
 	
 	
r$   c                    |                      d          }|                      d          }|                     ||           d S )NAustralia/Sydney)rk   r   r0   tz0tz1s      r%   test_strong_refsz"ZoneInfoCacheTest.test_strong_refs%  s@    jj+,,jj+,,c3r$   c                    |                      d          }| j                             d          }|                     ||           d S )NEurope/Lisbon)rk   r   r  r(  s      r%   test_no_cachezZoneInfoCacheTest.test_no_cache+  sD    jj))j!!/22c"""""r$   c                    |                      d          }|                     g           5  |                      d          }ddd           n# 1 swxY w Y   |                     ||           dS )zTest 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.
        r$  N)rk   r:   r   )r0   zi0zi1s      r%   test_cache_reset_tzpathz)ZoneInfoCacheTest.test_cache_reset_tzpath2  s     jj.//  $$ 	4 	4**233C	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	c3s   AAAc                    |                      d          }| j                             d            |                      d          }|                     ||           d S )Nr$  	only_keys)rk   rl   r  )r0   la0la1s      r%   test_clear_cache_explicit_nonez0ZoneInfoCacheTest.test_clear_cache_explicit_none?  s[    jj.//
...jj.//c"""""r$   c                >   |                      d          }|                      d          }| j                             dg           |                      d          }|                      d          }|                     ||           |                     ||           dS )z5Tests that you can clear a single key from the cache.r$  Europe/Dublinr4  Nrk   rl   r  r   )r0   r6  dub0r7  dub1s        r%   test_clear_cache_one_keyz*ZoneInfoCacheTest.test_clear_cache_one_keyF  s    jj.//zz/**
*?)@AAAjj.//zz/**c"""dD!!!!!r$   c                   |                      d          }|                      d          }|                      d          }| j                             ddg           |                      d          }|                      d          }|                      d          }|                     ||           |                     ||           |                     ||           d S )Nr$  r:  
Asia/Tokyor4  r;  )r0   r6  r<  tok0r7  r=  tok1s          r%   test_clear_cache_two_keysz+ZoneInfoCacheTest.test_clear_cache_two_keysS  s    jj.//zz/**zz,''
,o> 	 	
 	
 	
 jj.//zz/**zz,''c"""t$$$dD!!!!!r$   )rC   rD   rE   r   r   r?   rG   rp   r1   r%  r+  r.  r2  r8  r>  rC  rH   rI   s   @r%   r  r    s        F       X + + X+
 
 

     # # #     # # #" " "" " " " " " "r$   r  c                      e Zd ZeZdS )CZoneInfoCacheTestNr!  r#   r$   r%   rE  rE  e  r"  r$   rE  c                  l     e Zd ZeZ fdZed             Zed             Zd Z	d Z
d Zd Zd Z xZS )	ZoneInfoPickleTestc                   | j                                          t          j                    5 }|                    t          j        | j                             |                     |	                                j
                   d d d            n# 1 swxY w Y   t                                                       d S r(   )rk   rl   r7   r8   r9   test_supportset_zoneinfo_moduler   r;   r<   r=   r>   r?   r@   s     r%   r?   zZoneInfoPickleTest.setUpl  s    
   !## 	3u @ M MNNNOOEMMOO1222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	s   ABBBc                    t           S r(   ro   r/   s    r%   rp   z ZoneInfoPickleTest.zoneinfo_datau  rq   r$   c                    | j         j        gS r(   rs   r/   s    r%   r1   zZoneInfoPickleTest.tzpathy  rt   r$   c                Z   t          t          j        dz             D ]}|                     |          5  |                     d          }t          j        ||          }t          j        |          }|                     d          5  |                     ||           d d d            n# 1 swxY w Y   t          j        |          }|                     d          5  |                     ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )Nr   protor:  protocolzIs non-pickled ZoneInfotestzIs unpickled ZoneInfo)rb  pickleHIGHEST_PROTOCOLr   rk   dumpsloadsr   r0   rO  zi_inpklzi_rtzi_rt2s         r%   test_cache_hitz!ZoneInfoPickleTest.test_cache_hit}  s   62Q677 	1 	1EE** 
1 
1

?33l55999S))\\'@\AA 0 0MM%///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  c**\\'>\?? 1 1MM%0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1 
1	1 	1sZ   ADB/#D/B33D6B37-D$D;DDDDDD"	%D"	c                   t          t          j        dz             D ]}|                     |          5  |                     d          }t          j        ||          }~| j                                         t          j        |          }t          j        |          }|                     ||           d d d            n# 1 swxY w Y   d S )Nr   rN  r:  rP  )	rb  rT  rU  r   rk   rV  rl   rW  r   rX  s         r%   test_cache_missz"ZoneInfoPickleTest.test_cache_miss  s   62Q677 
	- 
	-EE** 	- 	-

?33l55999
&&(((S))c**eV,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-
	- 
	-s   BCC		C		c                   t          t          j        dz             D ]j}|                     |          5  | j                            d          }t          j        ||          }t          j        |          }|                     d          5  |                     ||           d d d            n# 1 swxY w Y   t          j        |          }|                     d          5  |                     ||           d d d            n# 1 swxY w Y   |                     d          }|                     d          5  |                     ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ld S )	Nr   rN  r:  rP  zNot the pickled objectrR  zNot a second unpickled objectzNot a cached object)	rb  rT  rU  r   rk   r   rV  rW  r  )r0   rO  zi_no_cacherZ  r[  r\  zi_caches          r%   r.  z ZoneInfoPickleTest.test_no_cache  sq   62Q677 	6 	6EE** 6 6"j11/BBl;???S))\\'?\@@ 9 9$$UK8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9  c**\\'F\GG 4 4$$UF3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4  ::o66\\'<\== 6 6$$UH5556 6 6 6 6 6 6 6 6 6 6 6 6 6 66 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6s~   AE<B4(E<4B88E<;B8<-E<)D E<DE<D.E<E%E<%E))E<,E)-E<<F 	F 	c           	     v   d}t          | j                            |          d          5 }| j                            |          }|                    d           | j                            ||          }d d d            n# 1 swxY w Y   |df|dfg}|D ]\  }}t          t          j        dz             D ]~}| 	                    ||          5  | 
                    t          j                  5  t          j        ||	           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d S )
Nr:  r   r   r   zZoneInfo with keyzZoneInfo without keyr   )r   rO  rP  )r   rp   r   rk   r   r  rb  rT  rU  r   r   PicklingErrorrV  )	r0   rb   r   zi_nokeyzi_keyr   r   r   rO  s	            r%   test_from_filez!ZoneInfoPickleTest.test_from_file  s   $$22377>> 	6!z++A..HFF1IIIZ))!)55F		6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ()-.


 ( 	9 	9MB	v6:;; 9 9\\IU\CC 9 9**6+?@@ 9 9R%88889 9 9 9 9 9 9 9 9 9 9 9 9 9 99 9 9 9 9 9 9 9 9 9 9 9 9 9 99	9 	9sH   ABB
B D,2D		D,DD,DD,,D03D0c                   t          t          j        dz             D ]}|                     |          5  d}|                     |          }t          j        ||          }t          j        |          }|                     ||           t          | j	        
                    |          d          5 }| j                            ||          }d d d            n# 1 swxY w Y   t          j        ||          }t          j        |          }	|                     ||	           |                     t          j                  5  t          j        ||           d d d            n# 1 swxY w Y   t          j        ||          }
t          j        |
          }|                     ||           d d d            n# 1 swxY w Y   d S )Nr   rN  r:  rP  r   r   )rb  rT  rU  r   rk   rV  rW  r   r   rp   r   r   r   rd  )r0   rO  rb   r   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  sb   
 62Q677 	+ 	+EE** + +%ZZ__R%888 ,u--b'***$,::3??FF =! J000<<E= = = = = = = = = = = = = = = R%888 ,u--b'***&&v';<< 8 8L77778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 R%888 ,u--b'***)+ + + + + + + + + + + + + + +	+ 	+s\   B G6CGC##G&C#'A"G	E, G,E00G3E04AGG	
G	)rC   rD   rE   r   r   r?   rG   rp   r1   r]  r_  r.  rg  ro  rH   rI   s   @r%   rG  rG  i  s        F       X + + X+1 1 1- - -6 6 6&9 9 9&+ + + + + + +r$   rG  c                      e Zd ZeZdS )CZoneInfoPickleTestNr!  r#   r$   r%   rq  rq    r"  r$   rq  c                  8    e Zd ZdZeZed             Zd Zd Z	dS )CallingConventionTestz8Tests for functions with restricted calling conventions.c                    t           S r(   ro   r/   s    r%   rp   z#CallingConventionTest.zoneinfo_data  rq   r$   c                "   t          | j                            d          d          5 }|                     t                    5  | j                            |           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr   r   )r   )r   rp   r   r   r   rk   r   )r0   r   s     r%   rg  z$CallingConventionTest.test_from_file  s   $$225994@@ 	-A""9-- - -
$$!$,,,- - - - - - - - - - - - - - -	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s5   BA, B,A0	0B3A0	4BBBc                    |                      t                    5  | j                            dg           d d d            d S # 1 swxY w Y   d S Nr   )r   r   rk   rl   r/   s    r%   test_clear_cachez&CallingConventionTest.test_clear_cache  s    y)) 	, 	,J""E7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   AAAN)
rC   rD   rE   rF   r   r   rG   rp   rg  rx  r#   r$   r%   rs  rs    sV        BBF  X- - -
, , , , ,r$   rs  c                      e Zd ZeZdS )CCallingConventionTestNr!  r#   r$   r%   rz  rz    r"  r$   rz  c                  f    e Zd ZeZeej        d                         Zd Z	d Z
d Zd Zd Zd ZdS )	
TzPathTestc              #  r  K   d}t                      }|}	 t          5  t          j                            |d           }| t          j        |<   d V  d d d            n# 1 swxY w Y   ||u rd S |t          j        |= d S |t          j        |<   d S # ||u rn|t          j        |= n|t          j        |<   w xY w)NPYTHONTZPATH)objectr   osenvironget)valuepath_varunset_env_sentinelold_envs       r%   python_tzpath_contextz TzPathTest.python_tzpath_context  s       "#XX$	/  *..488',
8$              
 ,,, Jx((('.
8$$$ ,,, Jx(('.
8$....s.   B 4AB A!!B $A!%B &B6c                z   dg fddgfdt           j         dddgfg}|D ]\  }}|                     |          5  |                     |          5  | j                                         | j        j        }|                     ||           ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   dS )z<Tests that the environment variable works with reset_tzpath.ra  z/etc/zoneinfo/a/b/cz/d/e/fr1   N)r  pathsepr  r   r   reset_tzpathTZPATHassertSequenceEqual)r0   	new_pathsnew_path_varexpected_resultr1   s        r%   test_env_variablezTzPathTest.test_env_variable  s    H/0(bj(((8X*>?
	 .7 	F 	F)L/++L99 F F\\\66 F FK,,...![/F,,V_EEEF F F F F F F F F F F F F F FF F F F F F F F F F F F F F F	F 	Fs5   B/<BB/BB/B B//B3	6B3	c           	     z   ddgddgddgddgddgddgg}|D ]"\  }}t           j                            |          }|                     |          5  |                     d	|
          5  |                     | j        j                  5  | j                                         d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        j	        }|                     d|
          5  | 
                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   $d S )Npath/to/somewherer#   /usr/share/zoneinfor  )r  ../relative/pathr  r  r  r  r  r  r  warning)r  filtered)r  r  joinr  r   assertWarnsr   InvalidTZPathWarningr  r  r  )r0   r   input_pathsexpected_pathsr  r1   s         r%    test_env_variable_relative_pathsz+TzPathTest.test_env_variable_relative_paths  s   #R(=( #B'<( 8<
 )

, ,6 	E 	E'Kz{33H++H55 	E 	E\\)h\?? 3 3 ))$+*JKK 3 3002223 3 3 3 3 3 3 3 3 3 3 3 3 3 33 3 3 3 3 3 3 3 3 3 3 3 3 3 3 +\\*x\@@ E E,,V^DDDE E E E E E E E E E E E E E E	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E	E 	Es~   D.) C	B/	#C/B33C6B37C:D.C

D.C
&D.4DD.DD.DD..D2	5D2	c                ~    | j                             dg           |                     | j         j        d           d S )Nr  to)r  )r   r  r  r  r/   s    r%   test_reset_tzpath_kwargz"TzPathTest.test_reset_tzpath_kwargB  s>      XJ ///  !3[AAAAAr$   c                   g d}|D ]}}|                      |          5  |                     t                    5  | j                            |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   ~d S )N)r  r  r  r  r  r  )r  r  )r   r   r   r   r  )r0   r   r  s      r%    test_reset_tzpath_relative_pathsz+TzPathTest.test_reset_tzpath_relative_pathsG  s   
 
 

 & 	= 	=K+66 = =&&z22 = =K,,,<<<= = = = = = = = = = = = = = == = = = = = = = = = = = = = =	= 	=s4   A9A"A9"A&&A9)A&*A99A=	 A=	c                   g d}|D ]|}|                      |          5  |                     t                    5  | j                            |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   }d S )N)z!/etc/zoneinfo:/usr/share/zoneinfos!   /etc/zoneinfo:/usr/share/zoneinfor   )r  )r   r   r   r   r  )r0   r   	bad_values      r%   test_tzpath_type_errorz!TzPathTest.test_tzpath_type_errorU  s   
 
 

 $ 	8 	8II.. 8 8&&y11 8 8K,,Y7778 8 8 8 8 8 8 8 8 8 8 8 8 8 88 8 8 8 8 8 8 8 8 8 8 8 8 8 8	8 	8s4   A8A!A8!A%%A8(A%)A88A<	?A<	c                P   ddg}dg}|                      |          5  | j        j        }d d d            n# 1 swxY w Y   |                      |          5  | j        j        }d d d            n# 1 swxY w Y   |                     ||           |                     ||           d S )Nz/onez/twoz/three)r:   r   r  r  )r0   tzpath_0tzpath_1query_0query_1s        r%   test_tzpath_attributez TzPathTest.test_tzpath_attributea  s/   F#:  ** 	) 	)k(G	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)   ** 	) 	)k(G	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	  7333  733333s   6::A//A36A3N)rC   rD   rE   r   r   staticmethodr7   contextmanagerr  r  r  r  r  r  r  r#   r$   r%   r|  r|    s        F/ /  \/(F F F"E "E "EHB B B
= = =
8 
8 
84 4 4 4 4r$   r|  c                      e Zd ZeZdS )CTzPathTestNr!  r#   r$   r%   r  r  o  r"  r$   r  c                  n    e Zd ZeZed             Zed             Zd Z	d Z
d Zd Zd Zd Zd	 Zd
 ZdS )
TestModulec                    t           S r(   ro   r/   s    r%   rp   zTestModule.zoneinfo_datav  rq   r$   c                    | j                             d          }t          |d          5 }|                                cd d d            S # 1 swxY w Y   d S )Nr   r   )rp   r   r   read)r0   	zone_filer   s      r%   
_UTC_byteszTestModule._UTC_bytesz  s    &44U;;	)T"" 	a6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                   t           j                            |          st          | d          |                    dd          ^}}|r4t          j        t           j                            ||          d           t           j                            ||          }t          |d          5 }|                    | j	                   ddd           dS # 1 swxY w Y   dS )zCreates 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./r   T)exist_okwbN)
r  r   existsFileNotFoundErrorrsplitmakedirsr  r   r  r  )r0   rb   tz_rootroot_dirtailzonefile_pathr   s          r%   
touch_zonezTestModule.touch_zone  s   
 w~~g&& 	B#w$@$@$@AAA**S!,,4 	HKWh77$GGGGWc22-&& 	%!GGDO$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   0CCCc                    |                      t                    5  | j        j         d d d            d S # 1 swxY w Y   d S r(   )r   r   r   NOATTRIBUTEr/   s    r%   test_getattr_errorzTestModule.test_getattr_error  s    ~.. 	$ 	$K##	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s   599c                    t          | j        j                  }t          t          | j                            }||z
  }|                     |           dS )z?dir(self.module) should at least contain everything in __all__.N)setr   __all__dirassertFalse)r0   module_all_setmodule_dir_set
differences       r%   test_dir_contains_allz TestModule.test_dir_contains_all  sO    T[011S--..#n4
$$$$$r$   c                x    t          | j                  }t          |          }|                     ||           dS )z5Test that there are no duplicates in dir(self.module)N)r  r   r  assertCountEqual)r0   
module_dirmodule_uniques      r%   test_dir_uniquezTestModule.test_dir_unique  s8    %%
Jj-88888r$   c                P   |                      | j        j        g          5  |                     | j        j                   | j                                        }t          | j        j                  }||z  }|                     ||           d d d            d S # 1 swxY w Y   d S r(   )	r:   rp   r1   
assertTruer   r   available_timezonesr  r   )r0   available_keyszoneinfo_keysunions       r%   test_available_timezonesz#TestModule.test_available_timezones  s      $"4";!<== 		3 		3OOD.3444![<<>>N 2 788M "N2E]E222		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3 		3s   A-BB"Bc                D   t          j                    5 }|                     d|           |                     |g          5  | j                                        }|                     d|           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NzMars/Olympus_Mons)r   TemporaryDirectoryr  r:   r   r  assertIn)r0   tdr  s      r%   "test_available_timezones_weirdzonez-TestModule.test_available_timezones_weirdzone  s>   (** 	CbOO/444$$bT** C C!%!@!@!B!B1>BBBC C C C C C C C C C C C C C C		C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	Cs5   -B0A=1B=B	BB	BBBc           	        h d}t          |          }d |D             }d |D             }d|fd||z   fd||z   fd||z   |z   fg}t          j                    5 }|D ]\  }}t          j                            ||          }	t          j        |	           |D ]}
|                     |
|	           |                     |	g          5  | 	                    |          5  | j
                                        }|                     ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   	 d d d            d S # 1 swxY w Y   d S )N>   Europe/ParisAmerica/Indiana/Indianapolisr   r@  r  America/Santiagor'  r$  c                    g | ]}d | S )zposix/r#   .0r  s     r%   
<listcomp>z5TestModule.test_folder_exclusions.<locals>.<listcomp>      666qlqll666r$   c                    g | ]}d | S )zright/r#   r  s     r%   r  z5TestModule.test_folder_exclusions.<locals>.<listcomp>  r  r$   	base_treebase_and_posixbase_and_right	all_trees)listr   r  r  r   r  mkdirr  r:   r   r   r  r   )r0   r   r  
posix_tree
right_treerc  r  	case_nametreer  rb   actuals               r%   test_folder_exclusionsz!TestModule.test_folder_exclusions  sT   	
 	
 	
 NN	66I666
66I666
 )$y:56y:56)j0:=>	
 (** 	;b#( 
; 
;	4',,r955!!! 2 2COOC1111(('33 ; ;i00 ; ;!%!@!@!B!B((:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
;	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;s[   A-E	D/0D	D/DD/D D/#E	/D33E	6D37E		EEc                |   ddh}t          |          dgz   }t          j                    5 }|D ]}|                     ||           |                     |g          5  | j                                        }|                     ||           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NzAmerica/New_Yorkr  
posixrules)r  r   r  r  r:   r   r  r   )r0   r   r  r  rb   r  s         r%   test_exclude_posixrulesz"TestModule.test_exclude_posixrules  sM   

 H~~.(** 	3b ) )R(((($$bT** 3 388::  2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3		3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s5   2B10BB1B	B1 B	!B11B58B5N)rC   rD   rE   r   r   rG   rp   r	   r  r  r  r  r  r  r  r  r  r#   r$   r%   r  r  s  s        F  X   _
% % % $ $ $% % %9 9 9
3 
3 
3C C C"; "; ";H3 3 3 3 3r$   r  c                      e Zd ZeZdS )CTestModuleNr!  r#   r$   r%   r  r    r"  r$   r  c                      e Zd ZdZd Zd ZdS )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                    |                      t          t          j        d                     |                     t          t
          j        d                     d S )N_weak_cache)r  hasattrr
  ri   r  r   r/   s    r%   test_cache_locationz&ExtensionBuiltTest.test_cache_location  sJ     	!4mDDEEE 4mDDEEEEEr$   c                    dd l }|                     |                    t          j                             |                     |                    t          j                             d S r   )gcr  
is_trackedr   ri   r  r
  )r0   r  s     r%   test_gc_trackedz"ExtensionBuiltTest.test_gc_tracked  sW     				k&:;;<<<z':;;<<<<<r$   N)rC   rD   rE   rF   r	  r  r#   r$   r%   r  r    s?         F F F= = = = =r$   r  )frozenc                  2    e Zd ZU ded<   ded<   eZded<   dS )rI  r   r   r   r   r   N)rC   rD   rE   __annotations__r   r   r#   r$   r%   rI  rI  
  s8         KKKCr$   rI  c                      e Zd ZU ded<   ded<   ded<   ed             Zed             Zed             Zed	             Zed
             Z	ed             Z
dS )rJ  r   r^   rI  r   r   c                f    | j         | j        j        z
                      t          j                  S )Nr   )r^   r   r   ra   r   r   r/   s    r%   r   zZoneTransition.transition_utc  s2    $"4">>GG< H 
 
 	
r$   c                6    | j         j        | j        j        k    S )zWhether this introduces a foldr   r   r   r/   s    r%   rP   zZoneTransition.fold       !+d.?.IIIr$   c                6    | j         j        | j        j        k     S )zWhether this introduces a gapr  r/   s    r%   r   zZoneTransition.gap"  r  r$   c                4    | j         j        | j        j        z
  S r(   )r   r   r   r/   s    r%   deltazZoneTransition.delta'  s     *T-?-IIIr$   c                <    | j         r| j        | j        z   S | j        S r(   rP   r^   r  r/   s    r%   r   zZoneTransition.anomaly_start+  s#    9 	#?TZ//?"r$   c                <    | j         s| j        | j        z   S | j        S r(   r  r/   s    r%   r   zZoneTransition.anomaly_end2  s#    y 	#?TZ//?"r$   N)rC   rD   rE   r  rG   r   rP   r   r  r   r   r#   r$   r%   rJ  rJ    s         
 
 X

 J J XJ J J XJ J J XJ # # X# # # X# # #r$   rJ  c                  .    e Zd ZddZd Zd Zd Zd ZdS )	r   Fc                ~    t          j        |          | _        g | _        || _        |                     |           d S r(   )r   r   r1   r   r   _populate_tzpath)r0   source_jsonr1   r   s       r%   __init__zZoneInfoData.__init__;  s;    l6**	k*****r$   c                    | j         |z  S r(   r  rw   s     r%   r   zZoneInfoData.path_from_keyA  s    {S  r$   c                :   t          |d          5 }t          j        |          }d d d            n# 1 swxY w Y   |d         }|                                D ]\  }}| j                            |           |                     |          }| j        r|                     |          }n|}| 	                    |          }	|	j
                            dd           t          |	d          5 }|                    |           d d d            n# 1 swxY w Y   d S )Nr   r   T)r  parentsr  )r   jsonloadr   r   r   _decode_textr   _convert_to_v1r   parentr  r  )
r0   r  r   zoneinfo_dictrp   rb   r  raw_datar   destinations
             r%   r  zZoneInfoData._populate_tzpathD  s   +t$$ 	) IaLLM	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) &f-'--// 	 	JCIS!!!((//Hw  **844,,S11K$$dD$AAAk4(( A              	 	s   266-DD	D	c                    d                     t          t          j        |                    }t	          j        |          }t                              |          S )Nr$   )r  r  r   r  base64	b85decoder   
decompress)r0   contentsr*  decodeds       r%   r&  zZoneInfoData._decode_textX  sA    88C
H5566"8,,w'''r$   c                h   |dd         dk    s
J d            t          |dd                   }d}|dz   }|dk    s
J d	            t          j        d
|||                   \  }}}}}	}
|dz  |	dz  z   |
z   |dz  z   |z   |z   }||z  }d|d|         z   }|||dz            dk    s
J d            |S )Nr   rF  r  zInvalid TZif data found!r     r  r   z-Version 1 file found: no conversion necessaryr  r:  rv  s   TZif z0Version 2 file not truncated at Version 2 header)r  r  unpack)r0   r0  r  header_start
header_endr  r  r  r  r  r  	file_sizer  s                r%   r'  zZoneInfoData._convert_to_v1^  s!   !}''')C'''hqsm$$!B&
!|||L|||@F8L34A
 A
=7GWg
 aKk k 	
  	 	Z	(1Y;"77 Y)a-01W<<<= =<< 
r$   N)F)rC   rD   rE   r   r   r  r&  r'  r#   r$   r%   r   r   :  sd        + + + +! ! !  (( ( (    r$   r   c                      e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	dZ
dZdS )rz   c                N    |                                                                  S r(   )_get_zonedumpr   rX   s    r%   r{   zZoneDumpData.transition_keys|  s       ""'')))r$   c                6    |                                  |         S r(   )r:  )rX   rb   s     r%   r_   z%ZoneDumpData.load_transition_examples  s      ""3''r$   c                j    | j         s|                                  | j                                         S r(   )_FIXED_OFFSET_ZONES_populate_fixed_offsetsr   r;  s    r%   r~   zZoneDumpData.fixed_offset_zones  s4    & 	*'')))&,,...r$   c                F    | j         s|                                  | j         S r(   )_ZONEDUMP_DATA_populate_zonedump_datar;  s    r%   r:  zZoneDumpData._get_zonedump  s(    ! 	*'')))!!r$   c                J    dt          dt          t                    i| _        d S rw  )rI  r   r>  r;  s    r%   r?  z$ZoneDumpData._populate_fixed_offsets  s%     :eT400#
r$   c                   d }d }d }d }d }d }d }d }d	 }	d
 }
 |             |             |             |             |             |             |             |             |	             |
            d
| _         d S )Nc                     t          dt          d                    } t          dt                    }t          t	          ddd          | |          gS )Nr9  rk  r   rl  rm  r   rI  r   r   rJ  r   )r9  rl  s     r%   _Africa_Abidjanz=ZoneDumpData._populate_zonedump_data.<locals>._Africa_Abidjan  sR    UId$;$;$;<<CUD))C xa33S#>> r$   c                 `   t          dt          t                    } t          dt          t                    }t          dt          t                     }t          dt          t                    }t          t	          dddd          | |          t          t	          dddd          ||           t          t	          dd	d
d          | |          t          t	          dddd          ||          t          t	          dddd          ||          t          t	          dd	dd          ||          gS )Nz+00z+01i  rY  r  r   r  r  r:     rB  r  r   r?  )rI  r   r\  rJ  r   )P00_sP01_dP00_dP01_ss       r%   _Africa_Casablancaz@ZoneDumpData._populate_zonedump_data.<locals>._Africa_Casablanca  s   udD11EueU33EudUF33EueT22E xaQ77FFxaQ77FFxaQ77FF xb"a88%GGxaA66uEExaA66uEE
 
r$   c                 2   t          dt          d          t                    } t          dt          d          t                    }t          dt          d          t                    }t          d	t          d          t                    }t          d
t          d          t                    }t	          t          dddddd          | |          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          ddd d          ||          t	          t          ddd!d          ||          gS )"Nr9  i&r   PSTir   PDTiPWTPPTr>  r   rH  rG  rD  r   i~  rY  r;  rB  r  i  r?  i  rv  r@  ru  r  i  r   i	  r  r:  rI  r   r   r\  rJ  r   )r9  rP  rQ  rR  rS  s        r%   _America_Los_AngeleszBZoneDumpData._populate_zonedump_data.<locals>._America_Los_Angeles  s   UIf$=$=$=tDDCUIB$7$7$7>>CUIB$7$7$7??CUIB$7$7$7??CUIB$7$7$7??C xb"b!Q??cJJxaQ77cBBxaQ77cBBxb"a88#sCCxaA66SAAxaR88#sCCxaQ77cBBxaA66SAAxb!Q77cBBxaQ77cBBxb!Q77cBB r$   c                     t          dt          d          t                    } t          dt          d          t                    }t          dt          d          t                    }t          dt          d          t                    }t          d	t          d
          t                    }t	          t          ddd          | |          t	          t          ddd          ||          t	          t          ddd          ||          t	          t          ddd          ||          t	          t          ddd          ||          t	          t          ddd          ||          t	          t          ddd          ||          gS )Nr9  ir   SMTz-05ir  ir  iib  r   iv  rB  |  rD  i  rY  r  rG  rZ  rF  rv  r?  r   rT  )r9  rW  N05N04r  s        r%   _America_Santiagoz?ZoneDumpData._populate_zonedump_data.<locals>._America_Santiago  sW   UIf$=$=$=tDDCUIf$=$=$=tDDCUIf$=$=$=tDDCUIf$=$=$=tDDCUIf$=$=$=uEEC xa33S#>>xa44c3??xa33S#>>xa44c3??xb"55sC@@xa33S#>>xa33S#>> r$   c            
     T   t          dt          d          t                    } t          dt          d          t                    }t	          t          ddd          | |          t	          t          dd	d
d          ||           t	          t          dd	d	d          ||           gS )NJSTi~  r   JDT頌  i  r  r   r?  rG  r   i  rT  )r]  r^  s     r%   _Asia_Tokyoz9ZoneDumpData._populate_zonedump_data.<locals>._Asia_Tokyo  s    UIe$<$<$<dCCCUIe$<$<$<eDDC xa33S#>>xaQ77cBBxaA66SAA r$   c                    t          dt          d          t                    } t          dt          d          t                    }t          dt          d          t                    }t	          t          dd	d
          | |          t	          t          dd
d
dd
          ||          t	          t          dddd	          ||          t	          t          ddd
d          ||          t	          t          dddd	          ||          t	          t          ddd
d          ||          t	          t          dddd	          ||          gS )Nr9  ič  r   r  r_  r  i  ig  r   r   }  r   rY  r  r  rF  rB  rD  rZ  rT  )r9  r  r  s      r%   _Australia_Sydneyz?ZoneDumpData._populate_zonedump_data.<locals>._Australia_Sydney  s-   UIe$<$<$<dCCCfi&>&>&>EEDfi&>&>&>FFD xa33S$??xaAq994FFxaQ77tDDxaA66dCCxb!Q77tDDxaA66dCCxb!Q77tDD r$   c                    t          dt          d          t                    } t          dt          d          t                    }t          dt          d          t                    }t          dt          t                    }t          d	t          t                    }t          dt          t                     }t          dt          t                    }t	          t          d
ddd          | |          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          gS )Nr9  i$r   DMTir  i  rl  r  iX  rv  r   r   rX  r  r  rB  r   rY  rb  rF  i  r  r  i	  r  rT  )r9  re  IST_0GMT_0r  GMT_1IST_1s          r%   _Europe_Dublinz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Dublin  s   UIe$<$<$<dCCCUIe$<$<$<dCCCui&=&=&=uEEEudD11EUE511CudUF33EueT22E xaA66SAAxaQ77eDDxb!Q77FFxaA66sCCxaQ77FFxb"a88%GGxaQ77FFxb"a88%GG	 	r$   c                 p   t          dt          t                    } t          dt          t                    }t          dt          t                    }t          dt          d          t                    }t	          t          ddd	d
          | |          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||          t	          t          dddd          ||           gS )NWETWESTCETCESTi   r   i  rY  r  r   r?  r  r   i  r  r  r_  r;  rB  )rI  r   r\  r   rJ  r   )rl  rm  rn  ro  s       r%   _Europe_Lisbonz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Lisbon  s   UD$//CfeU33DUE400Cfi&=&=&=uEED xaQ77dCCxaQ77sCCxaQ77dCCxaQ77sCCxaQ77dCCxb"a88$DD r$   c                    t          dt          d          t                    } t          dt          t                    }t          dt          t                    }t	          t          ddd          | |          t	          t          d	d
dd          ||          t	          t          d	ddd          ||          t	          t          dd
dd          ||          t	          t          dddd          ||          gS )Nr9  ir   rl  r  i7  rG  r   i  rY  r  rB  r  r   i  r  r  rT  )r9  rl  r  s      r%   _Europe_Londonz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_London  s    UIc$:$:$:DAACUD$//CUE511C xb!44c3??xaQ77cBBxb"a88#sCCxaQ77cBBxb"a88#sCC r$   c            	        t          dt          d          t                    } t          dt          d          t                    }t          dt          d          t                    }t          dt          d	          t                    }t          t	          d
dd          | |          t          t	          ddd          ||          t          t	          ddd          ||          gS )Nr9  ilr   z-1040i jz-10i`sz+14i  im  r   i  rB  i  rG  r;  rF  )r9  N1040N10P14s       r%   _Pacific_KiritimatizAZoneDumpData._populate_zonedump_data.<locals>._Pacific_Kiritimati(  s    UIf$=$=$=tDDCw	&(A(A(A4HHEUIf$=$=$=tDDCUIe$<$<$<dCCC xa33S%@@xb!44eSAAxb"55sC@@	 r$   )
ro  zAfrica/Casablancar$  r  r'  r@  r:  r-  r  zPacific/Kiritimati)rA  )rX   rG  rN  rU  r[  r`  rc  rj  rp  rr  rw  s              r%   rB  z$ZoneDumpData._populate_zonedump_data  s    	 	 		 	 	$	 	 	0	 	 	"	 	 		 	 		 	 	(	 	 		 	 		 	 	 .o//!3!3!5!5#7#7#9#9 1 1 3 3 1 1 3 3%+--+^--+^--+^--"5"5"7"7
 
r$   N)rC   rD   rE   r[   r{   r_   r~   r:  r?  rB  rA  r>  r#   r$   r%   rz   rz   {  s        * * [* ( ( [( / / [/ " " ["
 
 
 [

 i
 i
 [i
V Nr$   rz   __main__)X
__future__r   r-  r7   r`   importlib.metadata	importlibr   r$  r  r   rT  r  r)   r  r   unittestr   r   r   r   r   	functoolsr	   test.test_zoneinfor
   rI  test.test_zoneinfo._supportr   r   r   test.support.import_helperr   r   get_modulesr   r
  metadataHAS_TZDATA_PKGPackageNotFoundErrorr!   r"   r   r   __file__r(  DATA_DIRr    r   r\  r&   r+   r-   rK   rh   r   r  r  r  r   r$  r.  skipIfr0  r5  r7  r  r  r  r  rE  rG  rq  rs  rz  r|  r  r  r  TestCaser  	dataclassrI  rJ  r   rz   rC   mainr#   r$   r%   <module>r     s$   " " " " " "              				  				   				     > > > > > > > > > > > > > > % % % % % % 7 7 7 7 7 7 W W W W W W W W W W 4 4 4 4 4 4}V2,244 Z)))NN.   NNN  7<!!(61// y||	M M M         @       :Z6 Z6 Z6 Z6 Z6?$4 Z6 Z6 Z6z3- 3- 3- 3- 3-L 3- 3- 3-l	 	 	 	 	#8, 	 	 		 	 	 	 	$9= 	 	 	3 3 3 3 3< 3 3 3*    0       \   $    n    N # # # # #, # # #* N     ;   a a a a a$ a a aH    ]   B B B B B  B B BJ       Q" Q" Q" Q" Q")9 Q" Q" Q"h    *   o+ o+ o+ o+ o+*: o+ o+ o+d    ,   , , , , ,, , , ,&    2   v4 v4 v4 v4 v4"2 v4 v4 v4r    *   x3 x3 x3 x3 x3! x3 x3 x3v    *   = = = = =* = = =0 d###       $# d###%# %# %# %# %# %# %# $#%#P> > > > > > > >BI I I I I I I IX zHMOOOOO s   B$ $B87B8