
    9\h5                   ^   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 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  Z0e0dz  Z1 ed           Z2 ed          Z3d Z4d Z5 G d d          Z6 G d d          Z7 G d de6e           Z8 G d de8          Z9 G d de7e8          Z: G d de7e9          Z; G d d e8          Z< G d! d"e<          Z= G d# d$e8          Z> G d% d&e>          Z? ej@        e( d'           G d( d)e8                      ZA ej@        e( d'           G d* d+eA                      ZB G d, d-e           ZC G d. d/eC          ZD G d0 d1e           ZE G d2 d3eE          ZF G d4 d5e6e           ZG G d6 d7eG          ZH G d8 d9e6e           ZI G d: d;eI          ZJ G d< d=e           ZK G d> d?eK          ZL G d@ dAe6e           ZM G dB dCeM          ZN G dD dEe           ZO G dF dGeO          ZP G dH dIejQ                  ZR ejS        dJ           G dK dL                      ZT ejS        dJ           G dM dN                      ZU G dO dP          ZV G dQ dR          ZWeXdSk    r ejY                     dS dS )T    )annotationsN)datedatetimetime	timedeltatimezone)cached_property)MISSING_C_DOCSTRINGS)_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     J/opt/python-3.11.14/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,   7   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.tzpathE       tr%   c                    dS )NTr$   r0   s    r&   block_tzdatazTzPathUserMixin.block_tzdataI   r3   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)r5   lock)
contextlib	ExitStackenter_contexttzpath_contextr2   r5   r   
addCleanuppop_allclosesupersetUpr1   stack	__class__s     r&   r@   zTzPathUserMixin.setUpM   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__propertyr2   r5   r@   __classcell__rC   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microsecondrP   rQ   )clsdts     r&   from_datetimez4DatetimeSubclassMixin.DatetimeSubclass.from_datetimea   sH    3		yW
 
 
 
r%   N)rD   rE   rF   classmethodr[   r$   r%   r&   DatetimeSubclassrN   `   s-        		 	 
	 	 	r%   r]   c              #     K   t                                          |          }|D ]=}|j        }| j                            |          }t          j        ||          }|V  >d S )N)
transition)r?   load_transition_examplesr_   r]   r[   dataclassesreplace)r1   keytransition_examplesztrZ   new_dtnew_ztrC   s          r&   r`   z.DatetimeSubclassMixin.load_transition_exampleso   su      #gg>>sCC% 	 	BB*88<<F (???FLLLL		 	r%   )rD   rE   rF   rG   r   r]   r`   rI   rJ   s   @r&   rL   rL   [   sl             8           r%   rL   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r1   rC   s    r&   r@   zZoneInfoTest.setUp|   s0     	
     r%   c                    t           S r)   r"   r0   s    r&   zoneinfo_datazZoneInfoTest.zoneinfo_data       r%   c                    | j         j        gS r)   rq   r2   r0   s    r&   r2   zZoneInfoTest.tzpath       ")**r%   c                ,    |                      |          S r)   rl   r1   rc   s     r&   zone_from_keyzZoneInfoTest.zone_from_key   s    zz#r%   c                4    t                                           S r)   )ZoneDumpDatatransition_keysr0   s    r&   zoneszZoneInfoTest.zones   s    ++---r%   c                4    t                                           S r)   )r{   fixed_offset_zonesr0   s    r&   r   zZoneInfoTest.fixed_offset_zones   s    ..000r%   c                6    t                               |          S r)   )r{   r`   rx   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}   subTestry   assertEqualstrrq   keyspath_from_keyopenrl   	from_filerepr)r1   rc   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   rc   zfrom file with keyzfrom file without key)nextiterr}   rl   
class_namer   assertRegexr   rq   r   r   r   r   )	r1   rc   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   rq   r   rl   r   )rc   r   r1   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}   rl   r   r   r   rc   assertRaisesAttributeError)r1   rc   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ZoneInfoNotFoundErrorrl   r1   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   
ValueErrorrl   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   rl   r   )r1   	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   rP   r   z
2019-01-01)val)r   r   r}   ry   r   r   utcr   r   	TypeErrorr   r   r   fromutc)r1   rc   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   )rl   r   r   	utcoffsetZEROdsttzname)r1   r   rZ   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)rc   rZ   offsetr   )r}   r`   appendr_   r   offset_beforeoffset_afterr   ry   rb   r   r   r   r   )r1   
test_casesrc   zone_transitionrZ   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   )rc   grprQ   rP   )r}   r`   rQ   gapanomaly_startr   r   r   r   anomaly_enditemsr   ry   rb   r   r   r   r   )r1   r   rc   testsre   
test_groupno_peephole_optrZ   r   r   rQ   r   s               r&   test_folds_and_gapsz ZoneInfoTest.test_folds_and_gaps5  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}   ry   r   r`   rQ   transition_utcr   
astimezoner   )	r1   rc   r   re   dt_utcdt_before_utcdt_after_utc	dt_beforedt_afters	            r&   test_folds_from_utcz ZoneInfoTest.test_folds_from_utcl  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}   ry   r   r   assertIsr   r   r   )r1   rc   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   ry   r   r   r   r   r   r   )r1   rc   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	)rD   rE   rF   py_zoneinfor   r   r@   rH   rq   r2   ry   r}   r   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   rJ   s   @r&   ri   ri   x   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%   ri   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__)r1   otherrC   s     r&   r  zTCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclass.__add__  s/    	!,,# 77??5111r%   )rD   rE   rF   r  rI   rJ   s   @r&   SameAddSubclassr     s8        2 2 2 2 2 2 2 2 2r%   r  r   )
typerR   rS   rT   rU   rV   rW   rX   rQ   rP   )rZ   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)ry   r`   rQ   r   r   r   r   rb   r   r   r   )	r1   r  r  rc   r   re   examplerZ   
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)rD   rE   rF   
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rD   rE   rF   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?   
setUpClassrl   r   parent_klass)rY   r  rC   s     r&   r  zZoneInfoSubclassTest.setUpClass  sc    	 	 	 	 	 	 	 	 &9			r%   c                    |                      d          }|                     d          }|                     ||           |                     || j                    |                     || j                   d S )Nr  )r  rl   assertIsNotassertIsInstance)r1   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%   )rD   rE   rF   r\   r  r  rI   rJ   s   @r&   r  r    sQ            [3 3 3 3 3 3 3r%   r  c                      e Zd ZeZdS )CZoneInfoSubclassTestNrD   rE   rF   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#   r0   s    r&   rq   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   r{   r`   r_   )r1   rc   epochmax_offset_32min_dtmax_dtre   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)rD   rE   rF   rH   rq   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$   r0   s    r&   r2   zTZDataTests.tzpath  s    	r%   c                    dS )NFr$   r0   s    r&   r5   zTZDataTests.block_tzdata  s    ur%   c                .    |                      |          S )Nr   rw   rx   s     r&   ry   zTZDataTests.zone_from_key  s    zzcz"""r%   N)rD   rE   rF   rG   rH   r2   r5   ry   r$   r%   r&   r1  r1    sc            X   X# # # # #r%   r1  c                      e Zd ZeZdS )CTZDataTestsNr"  r$   r%   r&   r6  r6    s         FFFr%   r6  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   rZ                 r   )
ZoneOffsetr   ZoneTransitionr   construct_zonerl   r   r   r   r   r   r   r   r   r   )r1   r:  r>  transitionsafterzfr   dt0dt1rZ   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@  rH  rF  r     r   rZ   )rJ  ONE_HrK  r   rL  rl   r   rb   r   r   r   r   r   )r1   rX  rM  rN  rO  r   rR  rZ   s           r&   test_one_zone_dstzWeirdZoneTest.test_one_zone_dstM  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>  rX  r       rZ  r   r    i  rG  i  r   r\  r   zTesting datetime.time)rJ  r]  r   ranger   rK  r   rL  rl   r   rb   r   r   r   r   r   r   r   )r1   r>  rX  rM  rR   rN  rO  r   casesrZ   r   r   s               r&   test_no_tz_strzWeirdZoneTest.test_no_tz_strg  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>  rX  rb  rY  r   r(  ra  r   )r   rZ   )rJ  r   r]  rK  rL  rl   r   r   rb   r   r   r   r   r   )	r1   offsetsr   rM  rN  rO  r   rR  rZ   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 )Nrb  )rL  r   r   rl   r   )r1   rO  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``.
        r:  8r   GMTl         x  r   l            GMT0Africa/Abidjanr   iw  rH  r<  r   r   r   )r   rZ   r   Ni  ij     +   4   ik  ;   ?B r      rE     r(  )rJ  r   r   rK  r   rL  rl   r   minmaxrb   r   r   r   r   r   r   r   r   )r1   r:  rm  rM  rN  rO  r   offset_casesdt_naiver   rZ   	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)rJ  r   rK  r   rL  rl   r   r   r   r   r   r   r   )r1   r   rM  rN  rO  r   rZ   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NrZ  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   )re   
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   rc  rx  	bytearrayr  r   total_secondsboolr   r   encodebyteswritestructpackseek)(r1   rM  rN  versionisutcisstdleap_secondsoffset_liststrans_times_liststrans_idx_listsv1_rangev2_rangerangesr  re   r  r   r   vdt_mindt_maxrg  trans_times	trans_idxisutcntisstdcntleapcntzonefile
time_types	time_typeabbrstrttinfosr   utcoffisdstabbrindtypecnttimecntcharcntttinfos(                                           r&   rL  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%   )NrZ  )rD   rE   rF   r   r   rV  r^  re  rh  rj  r  r  rL  r$   r%   r&   r8  r8  !  s        F'8 '8 '8R4 4 44)) )) ))V"; "; ";H% % %;) ;) ;)z/ / /*t t t t t tr%   r8  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d
 Zed             Z xZS )	TZStrTestr   r   r   c                    t                                                       |                                  |                                  d S r)   )r?   r  _populate_test_casespopulate_tzstr_header)rY   rC   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  rc  r  r  r  _tzif_header)rY   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  rl   r   )r1   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  rZ   r   )	r   r   r   r  rb   r   r   r   r   )r1   r  rd  r   r{  r   r  rZ   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   rb   r   r   r   r   FOLDrQ   )
r1   r  rd  r   r{  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 ]E}|                      |          5  |                     |           d d d            n# 1 swxY w Y   Fd S )N)5AAA24zAAA+24zAAA-24zAAA24BBB,J60/2,J300/2zAAA+24BBB,J60/2,J300/2zAAA-24BBB,J60/2,J300/2zAAA4BBB24,J60/2,J300/2zAAA4BBB+24,J60/2,J300/2zAAA4BBB-24,J60/2,J300/2zAAA4:00BBB,J60/2,J300/2zAAA4:59BBB,J60/2,J300/2zAAA4BBB5:00,J60/2,J300/2zAAA4BBB5:59,J60/2,J300/2zAAA4:00:00BBB,J60/2,J300/2zAAA4:00:59BBB,J60/2,J300/2zAAA4BBB5:00:00,J60/2,J300/2zAAA4BBB5:00:59,J60/2,J300/2zAAA24:59:59BBB5,J60/2,J300/2zAAA-24:59:59BBB5,J60/2,J300/2zAAA4BBB24:59:59,J60/2,J300/2zAAA4BBB-24:59:59,J60/2,J300/2zAAA4BBB,M12.1.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M12.1.1/2zAAA4BBB,M1.5.1/2,M1.1.1/2zAAA4BBB,M1.1.1/2,M1.5.1/2zAAA4BBB,M1.1.6/2,M2.1.1/2zAAA4BBB,M1.1.1/2,M2.1.6/2zAAA4BBB,0/2,20/2zAAA4BBB,0/2,0/14zAAA4BBB,20/2,365/2zAAA4BBB,365/2,365/14zAAA4BBB,J1/2,J20/2zAAA4BBB,J1/2,J1/14zAAA4BBB,J20/2,J365/2zAAA4BBB,J365/2,J365/14zAAA4BBB,J60/167,J300/2zAAA4BBB,J60/+167,J300/2zAAA4BBB,J60/-167,J300/2zAAA4BBB,J60/2,J300/167zAAA4BBB,J60/2,J300/+167zAAA4BBB,J60/2,J300/-167zAAA4BBB,J60/2:00,J300/2zAAA4BBB,J60/2:59,J300/2zAAA4BBB,J60/2,J300/2:00zAAA4BBB,J60/2,J300/2:59zAAA4BBB,J60/2:00:00,J300/2zAAA4BBB,J60/2:00:59,J300/2zAAA4BBB,J60/2,J300/2:00:00zAAA4BBB,J60/2,J300/2:00:59zAAA4BBB,J60/167:59:59,J300/2zAAA4BBB,J60/-167:59:59,J300/2zAAA4BBB,J60/2,J300/167:59:59zAAA4BBB,J60/2,J300/-167:59:59r  )r   r  )r1   tzstrsr  s      r&   test_extreme_tzstrzTZStrTest.test_extreme_tzstr  s    C
 C
 C
J  	, 	,EE** , ,$$U+++, , , , , , , , , , , , , , ,	, 	,s   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/2AAA168zAAA+168zAAA-168zAAA168BBB,J60/2,J300/2zAAA+168BBB,J60/2,J300/2zAAA-168BBB,J60/2,J300/2zAAA4BBB168,J60/2,J300/2zAAA4BBB+168,J60/2,J300/2zAAA4BBB-168,J60/2,J300/2zAAA4:0BBB,J60/2,J300/2zAAA4:100BBB,J60/2,J300/2zAAA4BBB5:0,J60/2,J300/2zAAA4BBB5:100,J60/2,J300/2zAAA4:00:0BBB,J60/2,J300/2zAAA4:00:100BBB,J60/2,J300/2zAAA4BBB5:00:0,J60/2,J300/2zAAA4BBB5:00:100,J60/2,J300/2zAAA4BBB,M1443339,M11.1.0/3zAAA4BBB,M3.2.0/2,0349309483959czAAA4BBB,,J300/2zAAA4BBB,z,J300/2zAAA4BBB,J60/2,zAAA4BBB,J60/2,zz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/2zAAA4BBB,J60/2/3,J300/2zAAA4BBB,J60/2,J300/2/3zAAA4BBB,J60/168,J300/2zAAA4BBB,J60/+168,J300/2zAAA4BBB,J60/-168,J300/2zAAA4BBB,J60/2,J300/168zAAA4BBB,J60/2,J300/+168zAAA4BBB,J60/2,J300/-168zAAA4BBB,J60/2:0,J300/2zAAA4BBB,J60/2:100,J300/2zAAA4BBB,J60/2,J300/2:0zAAA4BBB,J60/2,J300/2:100zAAA4BBB,J60/2:00:0,J300/2zAAA4BBB,J60/2:00:100,J300/2zAAA4BBB,J60/2,J300/2:00:0zAAA4BBB,J60/2,J300/2:00:100r  )r   reescapeassertRaisesRegexr   r  )r1   invalid_tzstrsinvalid_tzstrtzstr_regexs       r&   test_invalid_tzstrzTZStrTest.test_invalid_tzstr*  s,   H
 H
 H
T , 	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                    } |              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.
            N)r  )r   prev_lenrd  s     r&   callz,TZStrTest._populate_test_cases.<locals>.call  s     5zzHACCCCCr%   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   rZ  r@  rC  rt  rG  r   rQ   r   r   r   r   rw  rJ  r   r   r]  r   )r  r  r  r  r  NORMALrd  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:00rm  BSTr   rZ     r<  r   rt  r   rC        r   r  r         rJ  r   r]  r   )r  rm  r  r  r  r  rd  s      r&   r  z,TZStrTest._populate_test_cases.<locals>._add  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AESTrC  r   AEDTr   r   rG  r;  rE  r   rt  r  r   r   rZ     r  )r  r  r  r  r  r  rd  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/1rm  ISTr   rZ  r  r<  r   rt  r   rC  r  r  r   r  r   r  r   r  )r  rm  r  r  r  rd  s      r&   r  z,TZStrTest._populate_test_cases.<locals>._add  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   rJ  r   )r  r  rd  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   rJ  r   r]  r   )r  M04M03r  rd  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;  rH  r<  rq  rt  ru  r   rZ  i`	  r  )r  r  r  rd  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      rZ  r   rt  rH  r   r     rC  r<  rq  ru  r   r  r  r  r  r  r  r  r  rd  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   rZ  r  r     rt     r   r  r   rq  rC     r  )r  N03N02r  r  r  rd  s      r&   r  z,TZStrTest._populate_test_cases.<locals>._addP  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    rZ  r   r   r   r  r  r   rG  r   ,   ru  -   r  r  s      r&   r  z,TZStrTest._populate_test_cases.<locals>._addg  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   )rY   r  r  r  r  r  rd  s      @@@@r&   r  zTZStrTest._populate_test_cases}  s1   		N 		N 		N 		N 		N xg		 	 	 	 	 	 	 
	6 
	 	 	 	 	 	 	 
	. 
	 	 	 	 	 	 	 
	0 
	 	 	 	 	 	 
	. 

	 
	 
	 
	 
	 

	 

	 
	 
	 
	 
	 

	 
	 	 	 	 	 
	( 
	 	 	 	 	 	 	 
	@ 
	 	 	 	 	 	 	 
	, 
	 	 	 	 	 	 	 
	$ r%   )rD   rE   rF   r   r   r  r  r  r\   r  r  r  r  r  r  r  r  rI   rJ   s   @r&   r  r    s        FFD
C$ $ $ $ [$ & & [& 9 9 9; ; ;1 1 1:H, H, H,TQ8 Q8 Q8f | | [| | | | |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)   )rl   rm   r?   r@   rn   s    r&   r@   zZoneInfoCacheTest.setUp  s,    
   r%   c                    t           S r)   rp   r0   s    r&   rq   zZoneInfoCacheTest.zoneinfo_data  rr   r%   c                    | j         j        gS r)   rt   r0   s    r&   r2   zZoneInfoCacheTest.tzpath  ru   r%   c                ~    |                      |                     d          |                     d                     d S )NAmerica/Los_Angeles)r   rl   r0   s    r&   test_ephemeral_zonesz&ZoneInfoCacheTest.test_ephemeral_zones  sA    JJ,--tzz:O/P/P	
 	
 	
 	
 	
r%   c                    |                      d          }|                      d          }|                     ||           d S )NAustralia/Sydney)rl   r   r1   tz0tz1s      r&   test_strong_refsz"ZoneInfoCacheTest.test_strong_refs  s@    jj+,,jj+,,c3r%   c                    |                      d          }| j                             d          }|                     ||           d S )NEurope/Lisbon)rl   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)rl   r;   r   )r1   zi0zi1s      r&   test_cache_reset_tzpathz)ZoneInfoCacheTest.test_cache_reset_tzpath  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)rl   rm   r  )r1   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/Dublinr:  Nrl   rm   r  r   )r1   r<  dub0r=  dub1s        r&   test_clear_cache_one_keyz*ZoneInfoCacheTest.test_clear_cache_one_key  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/Tokyor:  rA  )r1   r<  rB  tok0r=  rC  tok1s          r&   test_clear_cache_two_keysz+ZoneInfoCacheTest.test_clear_cache_two_keys  s    jj.//zz/**zz,''
,o> 	 	
 	
 	
 jj.//zz/**zz,''c"""t$$$dD!!!!!r%   )rD   rE   rF   r   r   r@   rH   rq   r2   r+  r1  r4  r8  r>  rD  rI  rI   rJ   s   @r&   r%  r%    s        F       X + + X+
 
 

     # # #     # # #" " "" " " " " " "r%   r%  c                      e Zd ZeZdS )CZoneInfoCacheTestNr"  r$   r%   r&   rK  rK    r#  r%   rK  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)   )rl   rm   r8   r9   r:   test_supportset_zoneinfo_moduler   r<   r=   r>   r?   r@   rA   s     r&   r@   zZoneInfoPickleTest.setUp  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)   rp   r0   s    r&   rq   z ZoneInfoPickleTest.zoneinfo_data  rr   r%   c                    | j         j        gS r)   rt   r0   s    r&   r2   zZoneInfoPickleTest.tzpath  ru   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)rc  pickleHIGHEST_PROTOCOLr   rl   dumpsloadsr   r1   rU  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   rT  r@  rV  )	rc  rZ  r[  r   rl   r\  rm   r]  r   r^  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   rT  r@  rV  zNot the pickled objectrX  zNot a second unpickled objectzNot a cached object)	rc  rZ  r[  r   rl   r   r\  r]  r  )r1   rU  zi_no_cacher`  ra  rb  zi_caches          r&   r4  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   rU  rV  )r   rq   r   rl   r   r  rc  rZ  r[  r   r   PicklingErrorr\  )	r1   rc   r   zi_nokeyzi_keyr   r   r   rU  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   rT  r@  rV  r   r   )rc  rZ  r[  r   rl   r\  r]  r   r   rq   r   r   r   rj  )r1   rU  rc   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	)rD   rE   rF   r   r   r@   rH   rq   r2   rc  re  r4  rm  ru  rI   rJ   s   @r&   rM  rM    s        F       X + + X+1 1 1- - -6 6 6&9 9 9&+ + + + + + +r%   rM  c                      e Zd ZeZdS )CZoneInfoPickleTestNr"  r$   r%   r&   rw  rw  K  r#  r%   rw  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)   rp   r0   s    r&   rq   z#CallingConventionTest.zoneinfo_dataT  rr   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   rq   r   r   r   rl   r   )r1   r   s     r&   rm  z$CallingConventionTest.test_from_fileX  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   rl   rm   r0   s    r&   test_clear_cachez&CallingConventionTest.test_clear_cache]  s    y)) 	, 	,J""E7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   AAAN)
rD   rE   rF   rG   r   r   rH   rq   rm  r~  r$   r%   r&   ry  ry  O  sV        BBF  X- - -
, , , , ,r%   ry  c                      e Zd ZeZdS )CCallingConventionTestNr"  r$   r%   r&   r  r  b  r#  r%   r  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_contexti  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.rb  z/etc/zoneinfo/a/b/cz/d/e/fr2   N)r  pathsepr  r   r   reset_tzpathTZPATHassertSequenceEqual)r1   	new_pathsnew_path_varexpected_resultr2   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  )r1   r   input_pathsexpected_pathsr  r2   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  r0   s    r&   test_reset_tzpath_kwargz"TzPathTest.test_reset_tzpath_kwarg  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  )r1   r   r  s      r&    test_reset_tzpath_relative_pathsz+TzPathTest.test_reset_tzpath_relative_paths  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  )r1   r   	bad_values      r&   test_tzpath_type_errorz!TzPathTest.test_tzpath_type_error  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  )r1   tzpath_0tzpath_1query_0query_1s        r&   test_tzpath_attributez TzPathTest.test_tzpath_attribute  s/   F#:  ** 	) 	)k(G	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)   ** 	) 	)k(G	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	  7333  733333s   6::A//A36A3N)rD   rE   rF   r   r   staticmethodr8   contextmanagerr  r  r  r  r  r  r  r$   r%   r&   r  r  f  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    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)   rp   r0   s    r&   rq   zTestModule.zoneinfo_data  rr   r%   c                    | j                             d          }t          |d          5 }|                                cd d d            S # 1 swxY w Y   d S )Nr   r   )rq   r   r   read)r1   	zone_filer   s      r&   
_UTC_byteszTestModule._UTC_bytes  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  )r1   rc   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   NOATTRIBUTEr0   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)r1   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)r1   
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;   rq   r2   
assertTruer   r   available_timezonesr  r   )r1   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)r1   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   rF  r  America/Santiagor-  r*  c                    g | ]}d | S )zposix/r$   .0r  s     r&   
<listcomp>z5TestModule.test_folder_exclusions.<locals>.<listcomp>6      666qlqll666r%   c                    g | ]}d | S )zright/r$   r  s     r&   r  z5TestModule.test_folder_exclusions.<locals>.<listcomp>7  r  r%   	base_treebase_and_posixbase_and_right	all_trees)listr   r  r  r   r  mkdirr  r;   r   r   r  r   )r1   r   r  
posix_tree
right_treerd  r  	case_nametreer  rc   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   )r1   r   r  r  rc   r  s         r&   test_exclude_posixrulesz"TestModule.test_exclude_posixrulesM  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)rD   rE   rF   r   r   rH   rq   r	   r  r  r  r  r  r  r  r  r  r$   r%   r&   r  r    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  rj   r  r   r0   s    r&   test_cache_locationz&ExtensionBuiltTest.test_cache_locationk  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   rj   r  r  )r1   r  s     r&   test_gc_trackedz"ExtensionBuiltTest.test_gc_trackedq  sW     				k&:;;<<<z':;;<<<<<r%   N)rD   rE   rF   rG   r  r  r$   r%   r&   r  r  b  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 )rJ  r   r   r   r   r   N)rD   rE   rF   __annotations__r   r   r$   r%   r&   rJ  rJ  z  s8         KKKCr%   rJ  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 )rK  r   r_   rJ  r   r   c                f    | j         | j        j        z
                      t          j                  S )Nr   )r_   r   r   rb   r   r   r0   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   r0   s    r&   rQ   zZoneTransition.fold       !+d.?.IIIr%   c                6    | j         j        | j        j        k     S )zWhether this introduces a gapr  r0   s    r&   r   zZoneTransition.gap  r  r%   c                4    | j         j        | j        j        z
  S r)   )r   r   r   r0   s    r&   deltazZoneTransition.delta  s     *T-?-IIIr%   c                <    | j         r| j        | j        z   S | j        S r)   rQ   r_   r  r0   s    r&   r   zZoneTransition.anomaly_start  s#    9 	#?TZ//?"r%   c                <    | j         s| j        | j        z   S | j        S r)   r   r0   s    r&   r   zZoneTransition.anomaly_end  s#    y 	#?TZ//?"r%   N)rD   rE   rF   r  rH   r   rQ   r   r  r   r   r$   r%   r&   rK  rK    s         
 
 X

 J J XJ J J XJ J J XJ # # X# # # X# # #r%   rK  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   r2   r   r   _populate_tzpath)r1   source_jsonr2   r   s       r&   __init__zZoneInfoData.__init__  s;    l6**	k*****r%   c                    | j         |z  S r)   r  rx   s     r&   r   zZoneInfoData.path_from_key  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  )
r1   r%  r   zoneinfo_dictrq   rc   r  raw_datar   destinations
             r&   r$  zZoneInfoData._populate_tzpath  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)r1   contentsr0  decodeds       r&   r,  zZoneInfoData._decode_text  sA    88C
H5566"8,,w'''r%   c                    t          |dd                   }d}|dz   }t          j        d|||                   \  }}}}}	}
|dz  |	dz  z   |
z   |dz  z   |z   |z   }||z  }d|d|         z   }|S )	NrG  r     r  r  r;  rw  s   TZif )r  r  unpack)r1   r6  r  header_start
header_endr  r  r  r  r  r  	file_sizer  s                r&   r-  zZoneInfoData._convert_to_v1  s    hqsm$$!B&
@F8L34A
 A
=7GWg
 aKk k 	
  	 	Z	(1Y;"77 
r%   N)F)rD   rE   rF   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 )r{   c                N    |                                                                  S r)   )_get_zonedumpr   rY   s    r&   r|   zZoneDumpData.transition_keys  s       ""'')))r%   c                6    |                                  |         S r)   )r@  )rY   rc   s     r&   r`   z%ZoneDumpData.load_transition_examples  s      ""3''r%   c                j    | j         s|                                  | j                                         S r)   )_FIXED_OFFSET_ZONES_populate_fixed_offsetsr   rA  s    r&   r   zZoneDumpData.fixed_offset_zones  s4    & 	*'')))&,,...r%   c                F    | j         s|                                  | j         S r)   )_ZONEDUMP_DATA_populate_zonedump_datarA  s    r&   r@  zZoneDumpData._get_zonedump  s(    ! 	*'')))!!r%   c                J    dt          dt          t                    i| _        d S r}  )rJ  r   rD  rA  s    r&   rE  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 )Nr:  rl  r   rm  rn  r   rJ  r   r   rK  r   )r:  rm  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  rZ  r   r   r  r  r;     rC  r  r   r@  )rJ  r   r]  rK  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 )"Nr:  i&r   PSTir   PDTiPWTPPTr?  r   rI  rH  rE  r   i~  rZ  r<  rC  r  i  r@  i  rw  rA  rv  r  i  r   i	  r  r;  rJ  r   r   r]  rK  r   )r:  rV  rW  rX  rY  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 )Nr:  ir   SMTz-05ir
  ir  iib  r   iv  rC  |  rE  i  rZ  r  rH  r[  rG  rw  r@  r   rZ  )r:  r]  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@  rH  r   i  rZ  )rc  rd  s     r&   _Asia_Tokyoz9ZoneDumpData._populate_zonedump_data.<locals>._Asia_TokyoL  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 )Nr:  ič  r   r  re  r  i  ig  r   r   }  r   rZ  r   r  rG  rC  rE  r[  rZ  )r:  r  r  s      r&   _Australia_Sydneyz?ZoneDumpData._populate_zonedump_data.<locals>._Australia_SydneyY  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 )Nr:  i$r   DMTir  i  rm  r  iX  rw  r   r   r^  r  r  rC  r   rZ  rh  rG  i  r  r  i	  r  rZ  )r:  rk  IST_0GMT_0r  GMT_1IST_1s          r&   _Europe_Dublinz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Dublinh  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  rZ  r  r   r@  r  r   i  r  r  r`  r<  rC  )rJ  r   r]  r   rK  r   )rr  rs  rt  ru  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 )Nr:  ir   rm  r  i7  rH  r   i  rZ  r  rC  r  r   i  r  r   rZ  )r:  rm  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 )Nr:  ilr   z-1040i jz-10i`sz+14i  im  r   i  rC  i  rH  r<  rL  )r:  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%   )
rp  zAfrica/Casablancar*  r  r-  rF  r@  r3  r  zPacific/Kiritimati)rG  )rY   rM  rT  r[  ra  rf  ri  rp  rv  rx  r}  s              r&   rH  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)rD   rE   rF   r\   r|   r`   r   r@  rE  rH  rG  rD  r$   r%   r&   r{   r{     s        * * [* ( ( [( / / [/ " " ["
 
 
 [

 i
 i
 [i
V Nr%   r{   __main__)Z
__future__r   r3  r8   ra   importlib.metadata	importlibr   r*  r  r   rZ  r  r*   r  r   unittestr   r   r   r   r   	functoolsr	   test.supportr
   test.test_zoneinfor   rO  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.   rL   ri   r   r  r  r  r!  r%  r/  skipIfr1  r6  r8  r  r  r#  r%  rK  rM  rw  ry  r  r  r  r  r	  TestCaser  	dataclassrJ  rK  r    r{   rD   mainr$   r%   r&   <module>r     s6   " " " " " "              				  				   				     > > > > > > > > > > > > > > % % % % % % - - - - - - 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    ]   q q q q q  q q qh       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* *B>=B>