
    daf:                      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"m#Z#  e"d	      Z$ ejJ                         \  Z&Z'	 ejP                  jQ                  d
       dZ)da+da,da- e
j\                  e/      j`                  dz  Z1e1dz  Z2 ed       Z3 ed      Z4d Z5d Z6 G d d      Z7 G d d      Z8 G d de7e       Z9 G d de9      Z: G d de8e9      Z; G d de8e:      Z< G d d e9      Z= G d! d"e=      Z> G d# d$e9      Z? G d% d&e?      Z@ ej                  e) d'       G d( d)e9             ZB ej                  e) d'       G d* d+eB             ZC G d, d-e       ZD G d. d/eD      ZE G d0 d1e       ZF G d2 d3eF      ZG G d4 d5e7e       ZH G d6 d7eH      ZI G d8 d9e7e       ZJ G d: d;eJ      ZK G d< d=e       ZL G d> d?eL      ZM G d@ dAe7e       ZN G dB dCeN      ZO G dD dEe       ZP G dF dGeP      ZQ G dH dIej                        ZS ej                  dJ       G dK dL             ZU ej                  dJ       G dM dN             ZV G dO dP      ZW G dQ dR      ZXeYdSk(  r ej                          yy# ejP                  jT                  $ r dZ)Y 0w xY w)T    )annotationsN)datedatetimetime	timedeltatimezone)cached_property)MISSING_C_DOCSTRINGS)_support)OS_ENV_LOCKTZPATH_TEST_LOCKZoneInfoTestBase)import_moduleCleanImportlzmatzdataTFdatazzoneinfo_data.json   hoursc                     t        j                  t        j                  d            at        t        t        dz        at        t        t        dz  d      ay )Nzoneinfo)prefixv2v1T)r   )	pathlibPathtempfilemkdtempTEMP_DIRZoneInfoDataZONEINFO_JSONZONEINFO_DATAZONEINFO_DATA_V1     ;/root/Python-3.12.4/Lib/test/test_zoneinfo/test_zoneinfo.pysetUpModuler(   -   s@    
 ||H,,J?@H 4@M#M8d?tLr&   c                 6    t        j                  t               y N)shutilrmtreer    r%   r&   r'   tearDownModuler-   7   s    
MM(r&   c                  B     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                     y r*   r%   selfs    r'   tzpathzTzPathUserMixin.tzpathE       r&   c                     y)NTr%   r1   s    r'   block_tzdatazTzPathUserMixin.block_tzdataI   r4   r&   c                <   t        j                         5 }|j                  | j                  | j                  | j
                  t                     | j                  |j                         j                         d d d        t        | -          y # 1 sw Y   xY w)N)r6   lock)
contextlib	ExitStackenter_contexttzpath_contextr3   r6   r   
addCleanuppop_allclosesupersetUpr2   stack	__class__s     r'   rA   zTzPathUserMixin.setUpM   s    !!# 	3u##KK!%!2!2) $  OOEMMO112	3 		3 	3s   A%BB)	__name__
__module____qualname____doc__propertyr3   r6   rA   __classcell__rD   s   @r'   r/   r/   ;   s:         r&   r/   c                  8     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y)&DatetimeSubclassMixin.DatetimeSubclassc                     | |j                   |j                  |j                  |j                  |j                  |j
                  |j                  |j                  |j                  	      S )N)tzinfofold)	yearmonthdayhourminutesecondmicrosecondrQ   rR   )clsdts     r'   from_datetimez4DatetimeSubclassMixin.DatetimeSubclass.from_datetimea   sN    				yyWW
 
r&   N)rE   rF   rG   classmethodr\   r%   r&   r'   DatetimeSubclassrO   `   s    		 
	r&   r^   c              #     K   t         |   |      }|D ]D  }|j                  }| j                  j	                  |      }t        j                  ||      }| F y w)N)
transition)r@   load_transition_examplesr`   r^   r\   dataclassesreplace)r2   keytransition_examplesztr[   new_dtnew_ztrD   s          r'   ra   z.DatetimeSubclassMixin.load_transition_exampleso   s\     #g>sC% 	BB**88<F ((?FL		s   AA)rE   rF   rG   rH   r   r^   ra   rJ   rK   s   @r'   rM   rM   [   s    8  r&   rM   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                V    t         |           | j                  j                          y r*   )r@   rA   klassclear_cacher2   rD   s    r'   rA   zZoneInfoTest.setUp|   s     	

 r&   c                    t         S r*   r#   r1   s    r'   zoneinfo_datazZoneInfoTest.zoneinfo_data       r&   c                0    | j                   j                  gS r*   rr   r3   r1   s    r'   r3   zZoneInfoTest.tzpath       ""))**r&   c                $    | j                  |      S r*   rm   r2   rd   s     r'   zone_from_keyzZoneInfoTest.zone_from_key   s    zz#r&   c                *    t         j                         S r*   )ZoneDumpDatatransition_keysr1   s    r'   zoneszZoneInfoTest.zones   s    ++--r&   c                *    t         j                         S r*   )r|   fixed_offset_zonesr1   s    r'   r   zZoneInfoTest.fixed_offset_zones   s    ..00r&   c                ,    t         j                  |      S r*   )r|   ra   ry   s     r'   ra   z%ZoneInfoTest.load_transition_examples   s    44S99r&   c                J   | j                         D ]H  }| j                  |      5  | j                  |      }| j                  t	        |      |       d d d        J | j
                  j                  d   }| j
                  j                  |      }t        |d      5 }| j                  d|      5  | j                  j                  |      }| j                  t	        |      t        |             d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rbz	Repr test)	test_namepath)r~   subTestrz   assertEqualstrrr   keyspath_from_keyopenrm   	from_filerepr)r2   rd   zifile_key	file_pathfzi_ffs          r'   test_strzZoneInfoTest.test_str   s   ::< 	/Cc" /'',  R#./ /	/ %%**1-&&44X>	)T" 	:a)D :

,,Q/  UT%[9:	: 	:/ /: :	: 	:s0   -DD0A D0DD
	D	DD"c                l   t        t        | j                                     }| j                  |      }| j                  }| j                  d      5  | j                  t        |      |       d d d        | j                  j                  d   }| j                  j                  |      }t        |d      5 }| j                  j                  ||      }d d d        | j                  d      5  | j                  t              |       d d d        t        |d      5 }| j                  j                  |      }d d d        | j                  d      5  | j                  t              |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   y xY w)Nzfrom key)namer   r   rd   zfrom file with keyzfrom file without key)nextiterr~   rm   
class_namer   assertRegexr   rr   r   r   r   r   )	r2   rd   r   r   r   r   r   r   zi_ff_nks	            r'   	test_reprzZoneInfoTest.test_repr   s~    4

%&ZZ___
\\z\* 	3T"Xz2	3 %%**1-&&44X>	)T" 	:aJJ(((9E	: \\3\4 	6T%[*5	6 )T" 	/azz++A.H	/ \\6\7 	9T(^Z8	9 	9	3 	3
	: 	:	6 	6	/ 	/	9 	9s<   E96F.FFF*9FFFF'*F3c                
    t        t         j                                     } fd}d j                  |fd j                  j                  |fd|d ff}|D ]  \  }}} ||      } j                  |      5   j                  |j                  |       d d d         j                  | d      5   j                  t              5  d|_        d d d        d d d         y # 1 sw Y   NxY w# 1 sw Y    xY w# 1 sw Y   xY w)Nc                    t        j                  j                  |       d      5 }j                  j	                  |      cd d d        S # 1 sw Y   y xY w)Nr   )r   rr   r   rm   r   )rd   r   r2   s     r'   from_file_nokeyz8ZoneInfoTest.test_key_attribute.<locals>.from_file_nokey   sG    d((66s;TB /azz++A./ / /s   AAzPrimary constructorno_cacher   z
: readonlyz
Some/Value)
r   r   r~   rm   r   r   r   rd   assertRaisesAttributeError)r2   rd   r   constructorsmsgconstructorexpectedr   s   `       r'   test_key_attributezZoneInfoTest.test_key_attribute   s   4

%&	/
 #DJJ4,,c2/40
 +7 
	*&ChS!B c" 3  23 Z01 *&&~6 *)BF** *
	*3 3
* ** *s0   7C!0C9C-C9!C*	-C62C99D	c                    g d}|D ]A  }| j                  | j                  j                        5  | j                  |       d d d        C y # 1 sw Y   NxY w)N)zEurasia/BadzoneBZQzAmerica.Los_Angelesu   🇨🇦u   America/NewYork)r   moduleZoneInfoNotFoundErrorrm   r2   bad_keysbad_keys      r'   test_bad_keyszZoneInfoTest.test_bad_keys   sX    
   	$G""4;;#D#DE $

7#$ $	$$ $s   AA	c                    g d}|D ]1  }| j                  t              5  | j                  |       d d d        3 y # 1 sw Y   >xY w)N)z/America/Los_AngeleszAmerica/Los_Angeles/z../zoneinfo/America/Los_AngeleszAmerica/../America/Los_AngeleszAmerica/./Los_Angeles)r   
ValueErrorrm   r   s      r'   test_bad_keys_pathsz ZoneInfoTest.test_bad_keys_paths   sN    
   	$G"":. $

7#$ $	$$ $s	   <A	c                    ddg}|D ]P  }t        j                  |      }| j                  t              5  | j                  j                  |       d d d        R y # 1 sw Y   ]xY w)Nr&   s   AAAA3               )ioBytesIOr   r   rm   r   )r2   	bad_zonesbad_zonefobjs       r'   test_bad_zoneszZoneInfoTest.test_bad_zones   sh     
	
 " 	+H::h'D"":. +

$$T*+ +	++ +s   AA$	c                   t        t        | j                                     }| j                  |      }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 ]K  \  }}| j                  |      5  | j                  |      5  |j                  |       d d d        d d d        M y # 1 sw Y   xY w# 1 sw Y   dxY w)N  r   rQ   r   z
2019-01-01)val)r   r   r~   rz   r   r   utcr   r   	TypeErrorr   r   r   fromutc)r2   rd   zone
bad_valuesr   exc_types         r'   test_fromutc_errorsz ZoneInfoTest.test_fromutc_errors   s    4

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

 ( 	&MC#& &&&x0 &LL%&& &	&& && &s$   4C7C+C7+C40C77D 	c                   | j                  d      }t        ddd|      }| j                  |j                         t               | j                  |j                         t               | j                  |j                         d       y )NUTC  r   r   )rm   r   r   	utcoffsetZEROdsttzname)r2   r   r[   s      r'   test_utczZoneInfoTest.test_utc  sb    ZZdAq,.4(e,r&   c           	        g }| j                         D ]  }| j                  |      D ]l  }|j                  ||j                  t	        d      z
  |j
                  f       |j                  ||j                  t	        d      z   |j                  f       n  |D ]  \  }}}| j                  |||      5  | j                  |      }|j                  |      }| j                  |j                         |j                  |       | j                  |j                         |j                  |       | j                  |j                         |j                  |       d d d         y # 1 sw Y   xY w)N   )days)rd   r[   offsetr   )r~   ra   appendr`   r   offset_beforeoffset_afterr   rz   rc   r   r   r   r   )r2   
test_casesrd   zone_transitionr[   r   tzis          r'   test_unambiguouszZoneInfoTest.test_unambiguous  sU   
::< 	C#'#@#@#E !!'22YA5FF'55 !!'22YA5FF'44	$  * 	;OCV#"V< ;((-ZZsZ+  fmmR@  1A1A2F  6::r:; ;	;; ;s   5B%E%%E.	c                   g }| j                         D ]X  }g g d}| j                  |      D ]  }|j                  r|d   }n|j                  r|d   }nd }+|j                  t        d      z
  }|j                  |d|j                  f       |j                  |d|j                  f       |j                  }|j                  |d|j                  f       |j                  |d|j                  f       |j                  t        d      z   }|j                  |d|j                  f       |j                  |d|j                  f       |j                  t        d      z
  }|j                  |d|j                  f       |j                  |d|j                  f       |j                  }|j                  |d|j                  f       |j                  |d|j                  f       |j                  t        d      z   }|j                  |d|j                  f       |j                  |d|j                  f        |j                         D ]  \  }}|j                  ||f|f        [ |D ]  \  \  }}}| j                  ||      5  | j                  |      }	|D ]  \  }}
}|j                  |
|	      }| j                  |j                         |j                  |       | j                  |j!                         |j                   |       | j                  |j#                         |j"                  |        	 d d d         y # 1 sw Y   xY w)	N)foldsgapsr   r   r   secondsr   )rd   grprR   rQ   )r~   ra   rR   gapanomaly_startr   r   r   r   anomaly_enditemsr   rz   rc   r   r   r   r   )r2   r   rd   testsrf   
test_groupno_peephole_optr[   r   r   rR   r   s               r'   test_folds_and_gapsz ZoneInfoTest.test_folds_and_gaps5  s   
::< (	<C "-E33C8 #<77!&wJVV!&vJ
 '+O %%	!(<<!!2q"*:*:";<!!2q"*:*:";<%%!!2q"*:*:";<!!2q"//":;%%	!(<<!!2q"*:*:";<!!2q"//":;^^i&::!!2q"*:*:";<!!2q"//":;^^!!2q"//":;!!2q"//":;^^i&::!!2q"//":;!!2q"//":;G#<J $);;= <Z!!C:z":;<O(	<T ", 		?JS##3/ ?((-(- ?$Bfc:B$$RYY[&--D$$R\\^V5E5ErJ$$RVVXvzz2>?? ?		?? ?s   B1M

M	c           	        | j                         D ]  }| j                  |      }| j                  |      5  | j                  |      D ]  }|j                  s|j
                  }|t        d      z
  }|t        d      z   }|j                  |      }| j                  |j                  d||f       |j                  |      }| j                  |j                  d||f        	 d d d         y # 1 sw Y   xY w)Nr   r   r   r   )	r~   rz   r   ra   rR   transition_utcr   
astimezoner   )	r2   rd   r   rf   dt_utcdt_before_utcdt_after_utc	dt_beforedt_afters	            r'   test_folds_from_utcz ZoneInfoTest.test_folds_from_utcl  s    ::< 	KC##C(B#& K77< KB77 ..F$*Yq-A$AM#)Ia,@#@L - 8 8 <I$$Y^^QF8KL+66r:H$$X]]A&7IJKK K	KK Ks   B.C11C:	c                ~   | j                         D ]  }| j                  |      }t        dddd|      }| j                  |      5  | j	                  |j                         d        | j	                  |j                         d        | j	                  |j                         d        d d d         y # 1 sw Y   xY wN      r   i  r   r   )r~   rz   r   r   assertIsr   r   r   )r2   rd   r   ts       r'   test_time_variable_offsetz&ZoneInfoTest.test_time_variable_offset~  s    ::< 	-C##C(BRQb1A#& -ahhj$/akkmT2aeegt,- -		-- -s   A!B33B<	c                   | j                         D ]  \  }}| j                  |      }t        dddd|      }| j                  |      5  | j	                  |j                         |j
                         | j	                  |j                         |j                         | j	                  |j                         |j                         d d d         y # 1 sw Y   xY wr   )r   rz   r   r   r   r   r   r   )r2   rd   r   r   r   s        r'   test_time_fixed_offsetz#ZoneInfoTest.test_time_fixed_offset  s    224 	6KC##C(BRQb1A#& 6  V]];  0@0@A  &**56 6	6
6 6s   
A?CC	)rE   rF   rG   py_zoneinfor   r   rA   rI   rr   r3   rz   r~   r   ra   r   r   r   r   r   r   r   r   r   r   r   r   r   rJ   rK   s   @r'   rj   rj   x   s    FJ!   + +.1::"90*2$$	+&$-;:5?nK$	-	6r&   rj   c                  H    e Zd ZeZ ej                  ed      d        Zd Z	y)CZoneInfoTestz6Signature information for builtins requires docstringsc                    ddl }| j                  j                  | j                  j                  | j                  j                  f}|D ]8  }| j                  |      5  |j                  j                  |       ddd       : y# 1 sw Y   ExY w)z1Ensure that C module has valid method signatures.r   N)method)inspectrm   rn   r   r   r   	Signaturefrom_callable)r2   r   must_have_signaturesr   s       r'   test_signatureszCZoneInfoTest.test_signatures  s     	 JJ""JJJJ   

 + 	8FV, 8!!//78 8	88 8s   BB	c                   d }ddg}d}| j                  |      }| j                  |      D ]J  }|j                  s|j                  j                  t
        k(  s.|j                  j                  |      } n dD ]s  }|r	 |      }n}| j                  |      5  |j                  |      }| j                  |j                  d       | j                  |j                  d	       d
d
d
       u y
# 1 sw Y   xY w)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                B    |t        d      k(  r| S t        | 	  |      S Nr   )r   r@   __add__)r2   otherrD   s     r'   r	  zTCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclass.__add__  s#    	!,# 7?511r&   )rE   rF   rG   r	  rJ   rK   s   @r'   SameAddSubclassr    s    2 2r&   r  r   )
typerS   rT   rU   rV   rW   rX   rY   rR   rQ   )r[   r  s     r'   to_subclassz3CZoneInfoTest.test_fold_mutate.<locals>.to_subclass  s`    2$r( 2 #				WWyy
 
r&   FTEurope/Londonr   )FT)subclassr   r   N)rz   ra   rR   r   r   r   r   rc   r   r   r   )	r2   r  r  rd   r   rf   exampler[   
dt_fromutcs	            r'   test_fold_mutatezCZoneInfoTest.test_fold_mutate  s    	( 4=$//4 	Bww2??44<++3323>	
 & 
	-H )x0 -ZZ^
  !4  !,	- -
	-- -s   A
C22C;	N)
rE   rF   rG   
c_zoneinfor   unittestskipIfr
   r  r  r%   r&   r'   r   r     s1    FX__)MO8O80-r&   r   c                      e Zd Zy)ZoneInfoDatetimeSubclassTestNrE   rF   rG   r%   r&   r'   r  r        r&   r  c                      e Zd Zy)CZoneInfoDatetimeSubclassTestNr  r%   r&   r'   r  r    r  r&   r  c                  .     e Zd Ze fd       Zd Z xZS )ZoneInfoSubclassTestc                    t         |            G d d| j                        }d| _        | j                  | _        || _        y )Nc                      e Zd Zy)3ZoneInfoSubclassTest.setUpClass.<locals>.ZISubclassNr  r%   r&   r'   
ZISubclassr     s    r&   r!  )r@   
setUpClassrm   r   parent_klass)rZ   r!  rD   s     r'   r"  zZoneInfoSubclassTest.setUpClass  s:    	 	 &99	r&   c                    | j                  d      }| j                  d      }| j                  ||       | j                  || j                          | j                  || j                         y )Nr  )r#  rm   assertIsNotassertIsInstance)r2   base_objsub_objs      r'   test_subclass_own_cachez,ZoneInfoSubclassTest.test_subclass_own_cache  sZ    $$_5**_-7+h(9(9:gtzz2r&   )rE   rF   rG   r]   r"  r)  rJ   rK   s   @r'   r  r    s     3r&   r  c                      e Zd ZeZy)CZoneInfoSubclassTestNrE   rF   rG   r  r   r%   r&   r'   r+  r+        Fr&   r+  c                  "    e Zd Zed        Zd Zy)ZoneInfoV1Testc                    t         S r*   )r$   r1   s    r'   rr   zZoneInfoV1Test.zoneinfo_data  s    r&   c              #     K   t        ddd      }t        d      }||z
  }||z   }t        j                  |      D ]  }||j                  cxk  r|k  sn | ! y w)N  r           r   )r   r   r|   ra   r`   )r2   rd   epochmax_offset_32min_dtmax_dtrf   s          r'   ra   z'ZoneInfoV1Test.load_transition_examples   sd      q!$!'2&&77< 	B0&0	s   AA
AN)rE   rF   rG   rI   rr   ra   r%   r&   r'   r/  r/    s       
r&   r/  c                      e Zd ZeZy)CZoneInfoV1TestNr,  r%   r&   r'   r9  r9    r-  r&   r9  z4Skipping tzdata-specific tests: tzdata not installedc                  6    e Zd ZdZed        Zed        Zd Zy)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%   r1   s    r'   r3   zTZDataTests.tzpath  s    	r&   c                     y)NFr%   r1   s    r'   r6   zTZDataTests.block_tzdata!  s    r&   c                &    | j                  |      S )Nr   rx   ry   s     r'   rz   zTZDataTests.zone_from_key%  s    zzcz""r&   N)rE   rF   rG   rH   rI   r3   r6   rz   r%   r&   r'   r;  r;    s4        #r&   r;  c                      e Zd ZeZy)CTZDataTestsNr,  r%   r&   r'   r@  r@  )  s	     Fr&   r@  c                  B    e Zd ZeZd Zd Zd Zd Zd Z	d Z
d Zd
d	Zy)WeirdZoneTestc           
     l   t        dt        ddd             }t        dt        d             }t        t        ddd	d
      ||      g}d}| j	                  ||      }| j
                  j                  |      }t        ddd	d|      }t        dddd|      }||f||ffD ]  \  }	}
| j                  d|	      5  | j                  |	j                         |
j                         | j                  |	j                         |
j                         | j                  |	j                         |
j                         d d d         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 ]u  \  }}| j                  d|      5  |j                  |      }| j                  ||       |j                  t        j                        }| j                  ||       d d d        w y # 1 sw Y   xY w# 1 sw Y   xY w)NLMT      r   )r   minutesr   STDr   [  	      STD6r   r   
   local)r   r[                 r   )
ZoneOffsetr   ZoneTransitionr   construct_zonerm   r   r   r   r   r   r   r   r   r   )r2   rD  rH  transitionsafterzfr   dt0dt1r[   r   dtsdt_localr   	dt_actualdt_utc_actuals                   r'   test_one_transitionz!WeirdZoneTest.test_one_transition3  s   B!J JK!3 34 8D!Q3S#>
   e4ZZ!!"%tQ1R0tQAb1:Sz2 	7JB7r2 7  fmm<  1A1AB  6::67 7	7 q!Qr2q!QAhllC
 q!R3q!R=	
 !$ 	8Hf9: 8"--b1	  H5 ( 3 3HLL A  78 8	8!7 7"8 8s   ;A?H=AH*H'	*H3	c           	        t        dt        t              }t        t        ddd      ||      g}d}| j	                  ||      }| j
                  j                  |      }t        ddd      t        ddd	      t        ddd      t        d
dd      t        ddd      g}|D ]  }|j                  |      }| j                  |      5  | j                  |j                         |j                         | j                  |j                         |j                         | j                  |j                         |j                         d d d         y # 1 sw Y   xY w)NDSTr2  r   zSTD0DST-1,0/0,J365/25l     i  rJ  rR  rP  r     r   r[   )rT  ONE_HrU  r   rV  rm   r   rc   r   r   r   r   r   )r2   rb  rW  rX  rY  r   r\  r[   s           r'   test_one_zone_dstzWeirdZoneTest.test_one_zone_dst\  s5   u-8D!Q/c:
 (  e4ZZ!!"% T1a T1b!T1a T2q!T1a 
  	4B2&B$ 4  cjj9  ?  37734 4	44 4s   A?EE	c                   t        dt        t              }t        ddt        z  t              }g }t        dd      D ]R  }|j	                  t        t        |ddd      ||             |j	                  t        t        |ddd      ||             T d	}| j                  ||      }| j                  j                  |      }t        d
dd      |ft        ddd      |ft        ddd      |ft        ddd      |fg}|D ]  \  }	}
|	j                  |      }	| j                  |	      5  | j                  |	j                         |
j                         | j                  |	j                         |
j                         | j                  |	j                         |
j                         d d d         t!        d|      }| j                  d      5  | j#                  |j                         d        | j#                  |j                         d        | j#                  |j                         d        d d d        y # 1 sw Y   ExY w# 1 sw Y   y xY w)NrH  rb  r       rd  r   r    i  rQ  i  r   rf  r   zTesting datetime.time)rT  rg  r   ranger   rU  r   rV  rm   r   rc   r   r   r   r   r   r   r   )r2   rH  rb  rW  rS   rX  rY  r   casesr[   r   r   s               r'   test_no_tz_strzWeirdZoneTest.test_no_tz_strv  s   t,E	51$% 	DxaA6SA xb!Q7cB		   e4
 ZZ!!"% dAq!3'dAq!3'dB"C(dAq!3'	
   	7JB2&B$ 7  fmm<  1A1AB  6::67 7	7 2\\12 	)MM!((*d+MM!++-.MM!%%'4(	) 	)7 7	) 	)s   &A?H7A!I7I	Ic                   t        dt        t              t        dt        t              g}|D ]  }t        d ||      g}d}| j	                  ||      }| j
                  j                  |      }t        ddd      t        ddd      t        ddd      g}|D ]  }|j                  |      }| j                  ||	      5  | j                  |j                         |j                         | j                  |j                         |j                         | j                  |j                         |j                         d d d          y # 1 sw Y   xY w)
NrH  rb  rl  rc  r   r2  rk  r   )r   r[   )rT  r   rg  rU  rV  rm   r   r   rc   r   r   r   r   r   )	r2   offsetsr   rW  rX  rY  r   r\  r[   s	            r'   test_tz_before_onlyz!WeirdZoneTest.test_tz_before_only  s>    udD)ueU+

  	;F tVV4K E$$[%8B%%b)B q!$q!$q!$C  ;ZZrZ*\\B\7 ;$$RYY[&--@$$R\\^V5E5EF$$RVVXvzz:; ;;#	;&; ;s   >A?EEc                    | j                  g d      }| j                  t              5  | j                  j	                  |       d d d        y # 1 sw Y   y xY w)Nrl  )rV  r   r   rm   r   )r2   rY  s     r'   test_empty_zonezWeirdZoneTest.test_empty_zone  sI      R(z* 	%JJ  $	% 	% 	%s   AAc                ^   t        dt        d            }t        dt              }d||ft        t	        ddd      ||      d||fg}d	}| j                  ||      }| j                  j                  |d
      }t        j                  |ft        j                  |ft	        ddd      |ft	        ddd      |fg}|D ]  \  }}	|j                  |      }
| j                  d|
|	      5  | j                  |
j                         |	j                         | j                  |
j                         |	j                         | j                  |
j                         |	j                         ddd        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 ]j  \  }}|j                  |      }
|j                  t         j"                        }| j                  |j%                  |      |
       | j                  |
|       l y# 1 sw Y   xY w)!a  Test when a transition is in the far past or future.

        Particularly, this is a concern if something:

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

        This actually occurs "in the wild", as some time zones on Ubuntu (at
        least as of 2020) have an initial transition added at ``-2**58``.
        rD  8r   GMTl         x  r   l            GMT0Africa/Abidjanr   iw  rR  rF  r   r   r   )r   r[   r   Ni  ij     +   4   ik  ;   ?B r      rO     r2  )rT  r   r   rU  r   rV  rm   r   minmaxrc   r   r   r   r   r   r   r   r   )r2   rD  rw  rW  rX  rY  r   offset_casesdt_naiver   r[   	utc_casesnaive_dtnaive_dt_utcr   s                  r'   test_zone_very_large_timestampz,WeirdZoneTest.test_zone_very_large_timestamp  s    	$ 78% c"8D!Q/c:S!
   e4ZZ!!"*:!; \\3\\3dB#S)dAq!3'	
 !- 	7Hf!!!,B86B 7  fmm<  1A1AB  6::67 7	7 \\8<<)C*@@AdBBB/$11EFr2r2r6:q!QAv6 dAq!R+XdAq!R-KLdAq!8D!Q#78\\8<<(

	 '0 	)"Hl!!!,B!)))>FV..r2B7R(	)#7 7s   'A?J""J,	c                   t        dt        t              }t        t        ddd      ||      g}d}| j	                  ||      }| j
                  j                  |d      }t        ddd|      }| j                  d      5  | j                  |j                         |j                         | j                  |j                         |j                         | j                  |j                         |j                         d d d        t        d	|      }| j                  d
      5  | j                  |j                         |j                         | j                  |j                         |j                         | j                  |j                         |j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r2  r   UTC0r   r   r   zdatetime.datetimer   zdatetime.time)rT  r   rU  r   rV  rm   r   r   r   r   r   r   r   )r2   r   rW  rX  rY  r   r[   r   s           r'   $test_fixed_offset_phantom_transitionz2WeirdZoneTest.test_fixed_offset_phantom_transition  s\   d+%htQ&:CEF  e4ZZ!!"%!0dAq,\\-. 	0RYY[#**5R\\^S]];RVVXsww/	0
 2\\/* 	/QXXZ4Q[[]CMM:QUUWcgg.	/ 	/	0 	0	/ 	/s    A?F-%A?F9-F69GNc                   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 (||vr|j                  |       ||vr|j                  |       |U|j                  |       |j                  |j	                  |               t        |      }t        |      }t        |      }t        j                         }d}t        t        |df            D ]  }||   }||   }|	|   }||   }t               }g }|D ]z  } t        | j                  j                               }!t        | j                        }"t        |      }#|j                  |!|"|#f       || j                   j#                  d      d	z   z  }| t%        |      }t        |      }$t        |      }%t        |      }&|j'                  d
       |j'                  d|z         |j'                  d       |j'                  t)        j*                  d||||%|$|&             |j'                  t)        j*                  d|% | g|        |j'                  t)        j*                  d|% dg|        |D ]'  }'|j'                  t)        j*                  dg|'        ) |j'                  t%        |             |j'                  t)        j*                  | dg|        |j'                  t)        j*                  | dg|        |j'                  t)        j*                  d| dg|        |dkD  sH|j'                  d       |j'                  |j#                  d             |j'                  d        |j-                  d       |S )N)i   r3  )l         l            c                    t        | t              r| S | j                  r$t        | j                  j                               }nd }|| j                  | j                  fS r*   )
isinstancetupler`   intr   	timestampr   r   )rf   
trans_times     r'   zt_as_tuplez1WeirdZoneTest.construct_zone.<locals>.zt_as_tuple,  sO    
 "e$	}} !2!2!<!<!>?
!
 0 0"//BBr&   c                    | 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   rm  r  	bytearrayr  r   total_secondsboolr   r   encodebyteswritestructpackseek)(r2   rW  rX  versionisutcisstdleap_secondsoffset_liststrans_times_liststrans_idx_listsv1_rangev2_rangerangesr  rf   r  r   r   vdt_mindt_maxrq  trans_times	trans_idxisutcntisstdcntleapcntzonefile
time_types	time_typeabbrstrttinfosr   utcoffisdstabbrindtypecnttimecntcharcntttinfos(                                           r'   rV  zWeirdZoneTest.construct_zone  s    BxHr(((H%	C Sk:O 	BB683J|'0'8 B##FF&q//2+A.	)j2F2 /NN=1w.NN<0)&&z2$$W]]<%@A%B	B. e*u:l#::<
sGQ<() 3	(A"1oG+A.K'*I"1I  kGG! CV--;;=>VZZ(g,w786==//87BBC GnG'lG+&G'lG NN7#NN57?+NN9%NN7Hgw NN6;;7)I;'?N+NONN6;;7)1~B	BC! =v{{6;F;<= NN5>* NN6;;'!}=u=>NN6;;(1~>>?NN6;;7)1~EEF 1uw'u||G45w'g3	(j 	ar&   )Nrd  )rE   rF   rG   r   r   r`  rh  ro  rr  rt  r  r  rV  r%   r&   r'   rB  rB  0  s4    F'8R44))V";H%;)z/*tr&   rB  c                      e Zd ZeZy)CWeirdZoneTestNr,  r%   r&   r'   r  r    r-  r&   r  c                  v     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                b    t         |           | j                          | j                          y r*   )r@   r"  _populate_test_casespopulate_tzstr_header)rZ   rD   s    r'   r"  zTZStrTest.setUpClass  s&      "!!#r&   c                    t               }t        d      D ]/  }|dz  }|dz  }|dz  }|t        j                  ddddddd      z  }1 t	        |      | _        y )Nr   r     3r  r  r   )r  rm  r  r  r  _tzif_header)rZ   out_s      r'   r  zTZStrTest.populate_tzstr_header  si    k
 q 	8A7NC4KC9C 6;;uaAq!Q77C	8 !:r&   c                D   t        j                  | j                        }|j                  dd       |j	                  d       |j	                  |j                  d             |j	                  d       |j                  d       | j                  j                  ||      S )z/Creates a zoneinfo file following a POSIX rule.r   r   r  r  r   )r   r   r  r  r  r  rm   r   )r2   tzstrr  s      r'   zone_from_tzstrzTZStrTest.zone_from_tzstr  sy    ::d//0a 	wu||G,-wazz##H%#88r&   c                @   | j                   j                         D ]  \  }}| j                  |      5  | j                  |      }d d d        |D ]  \  }}}|j	                        }| j                  |||      5  | j                  |j                         |j                         | j                  |j                         |j                         | j                  |j                         |j                         d d d          y # 1 sw Y   xY w# 1 sw Y   xY w)Nr  r   )r  r[   r   )	r   r   r   r  rc   r   r   r   r   )r2   r  rn  r   r  r   r  r[   s           r'   test_tzstr_localizedzTZStrTest.test_tzstr_localized  s     OO113 
	;LE5E* 1))%01 (- ;#&!%%R%0\\"V\D ;$$RYY[&--@$$R\\^V5E5EF$$RVVXvzz:; ;;	
	;1 1; ;s   D<A?DD	Dc                   | j                   j                         D ]3  \  }}| j                  |      5  | j                  |      }d d d        |D ]  \  }}}|| j                  k(  r||j
                  z
  j                  t        j                        }|j                        }|j                  |      }	| j                  ||	       || j                  k(  r(| j                  |j                  |j                  |       n| j                  |j                  d       |	j                  t        j                        }| j                  ||        6 y # 1 sw Y   xY w)Nr  r   r   )r   r   r   r  GAPr   rc   r   r   r   r   FOLDrR   )
r2   r  rn  r   r  r   dt_typer   dt_actdt_exps
             r'   test_tzstr_from_utczTZStrTest.test_tzstr_from_utc  s8    OO113 	1LE5E* 1))%01 .3 1)&'dhh&"V%5%55>>#<< ? 
  **2.!)))4  0dii'$$V[[(--J$$V[[!4  **8<<8  0-1		11 1s   EE	c                    g d}|D ].  }| j                  |      5  | j                  |       d d d        0 y # 1 sw Y   ;xY w)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  )r2   tzstrsr  s      r'   test_extreme_tzstrzTZStrTest.test_extreme_tzstr  sR    C
J  	,EE* ,$$U+, ,	,, ,s	   9A	c                
   g d}|D ]b  }| j                  |      5  t        j                  |      }| j                  t        |      5  | j                  |       d d d        d d d        d y # 1 sw Y   xY w# 1 sw Y   {xY w)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  )r2   invalid_tzstrsinvalid_tzstrtzstr_regexs       r'   test_invalid_tzstrzTZStrTest.test_invalid_tzstr9  s    H
T , 	8MM2 8 !ii6++JD 8((78	8 8	8
8 8	8 8s#   ,A9A-A9-A62A99B	c                f   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       }| _        y )Nc                T    t              } |         t              |kD  sJ d       y)zDecorator to call the addition methods.

            This will call a function which adds at least one new entry into
            the `cases` dictionary. The decorator will also assert that
            something was added to the dictionary.
            z!Function did not add a test case!N)r  )r   prev_lenrn  s     r'   callz,TZStrTest._populate_test_cases.<locals>.call  s+     5zHCu:(M*MM(r&   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      |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| <   y )Nz EST5EDT,M3.2.0/4:00,M11.1.0/3:00ESTr   EDTr   rd  rJ  rM  r~  rQ  r   rR   r   r   r   r   r  rT  r   r   rg  r   )r  r  r  r  r  NORMALrn  s      r'   _addz,TZStrTest._populate_test_cases.<locals>._add  s    7EUIB$7>CUIB$7?C $1%sF3$2q"-sF;$2q!!4c3?$2q!!4c3?$2q!!4c3?$2q!!4c3?$A&V4$Aq"15sFC$Aq!!4c4@$Aq!!4c4@$1a,c6:$1a3S#>$1a3S#>$Aq"15sFC$Aq!!4c4@$Aq!!4c4@!E%Lr&   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| <   y )Nz"GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00rw  BSTr   rd     rF  r   r~  r   rM        r   r   r         rT  r   rg  r   )r  rw  r  r  r  r  rn  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._add  sK    9EUD$/CUE51C $2&V4$2q"-sF;$2q!,c6:$B'f5$B2A6VD$B115sC@$B115sC@$2q"-sF;$2q!,c6:$B2A6VD$B115sDA$B115sFCE%Lr&   c                 z   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| <   y )NzAEST-10AEDT,M10.1.0/2,M4.1.0/3AESTrM  r   AEDTr   r   rQ  rE  rO  r   r~  r   r   r   rd     r  )r  r  r  r  r  r  rn  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._add  s    5Efib&94@Dfib&95AD $1%tV4$1a,dF;$1a!4dFC$1a3T4@$1a3T4@$1a3T4@$1a3T4@$1a3T6B$1a3T6B$Aq)48$Aq"-tV<$Aq!!4dC@$Aq!!4dC@$Aq!,dF;E%Lr&   c                 8   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| <   y )NzIST-1GMT0,M10.5.0,M3.5.0/1rw  ISTr   rd  r  rF  r   r~  r   rM  r  r  r   r   r   r	  r
  r  )r  rw  r  r  r  rn  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._add  sf    1EUD5&1CUE40C $2&V4$2q"-sF;$2q!,c6:$B'f5$B2A6VD$B115sDA$B115sDA$B115sFC$2q"-sF;$2q!,c6:$B2A6VD$B115sDA$B115sFCE%Lr&   c                 Z    d} t        ddd      t        dt        d            ff| <   y )Nz<+11>-11r   r   r  r   r   )r   rT  r   )r  r  rn  s    r'   r  z,TZStrTest._populate_test_cases.<locals>._add  s:     E T1a(uib&9:E%Lr&   c                     d} t        dt        d            }t        dt        d      t              }t        ddd	      |ft        dd
d	      |ff| <   y )Nz<-04>4<-03>,M9.1.6/24,M4.1.6/24-04r  r   -03r   r  r   r   rT  r   rg  r   )r  M04M03r  rn  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._add  sa     6EUIB$78CUIB$7?C $1%sF3$A&V4E%Lr&   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
| <   y )NzEST5EDT,0/0,J365/25r  r  r   r   r   rE  rR  rF  r{  r~  r  r   rd  i`	  r  )r  r  r  rn  s     r'   r  z,TZStrTest._populate_test_cases.<locals>._add)  s     *EUIB$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%Lr&   c                 b   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| <   y )NzAAA3BBB,J60/12,J305/12AAAr  r   BBBr   r   r      rd  r   r~  rR  r   r      rM  rF  r{  r  r   r	  r  r  r  r  r  r  r  rn  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._add>  s%    -EUIB$78CUIB$7?C $1%sF3$2&V4$1b"-sF;$1bq13<$1bq13<$1b)37$Ar2.V<$Ar2C>$Ar2C>$Ar*C8$BBF;S&I$1%sF3$2&V4$1b"-sF;$1bq13<$1bq13<$1b)37$Ar2.V<$Ar2C>$Ar2C>$Ar*C8$BBF;S&I-E%Lr&   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	| <   y )Nz <-03>3<-02>,M3.5.0/-2,M10.5.0/-1r  r  r   z-02r  r   rd  r  r     r~     r   r   r   r{  rM     r  )r  N03N02r  r  r  rn  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._add_  s    7EUIB$78CUIB$7?C $2&V4$2r2r2C@$2r2C=$2r2C=$2r*C8$B+S&9$B3S$?$B3S$?$B+S&9
E%Lr&   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| <   y )Nz%AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45r  r  r   r  r    rd  r   r   r   r  r   r   rQ  r   ,   r  -   r  r!  s      r'   r  z,TZStrTest._populate_test_cases.<locals>._addv  s    <EUIB$78CUIB$7?C $2q!,c6:$2q"15sC@$2q"15sC@$2q"-sF;$Aq"b&93G$Aq"bq93E$Aq"bq93E$Aq"b13?	E%Lr&   )r  r  r  r   )rZ   r  r  r  r  r  rn  s      @@@@r'   r  zTZStrTest._populate_test_cases  s    		N xxgg		 
	6 
	 
	. 
	 
	0 
	 
	. 

	 

	 

	 

	 
	 
	( 
	 
	@ 
	 
	, 
	 
	$ r&   )rE   rF   rG   r   r   r  r  r  r]   r"  r  r  r  r  r  r  r  rJ   rK   s   @r'   r  r    sp    FFD
C$ $ & & 9;1:H,TQ8f | |r&   r  c                      e Zd ZeZy)
CTZStrTestNr,  r%   r&   r'   r-  r-    r-  r&   r-  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d	 Zd
 Z xZS )ZoneInfoCacheTestc                V    | j                   j                          t        |           y r*   )rm   rn   r@   rA   ro   s    r'   rA   zZoneInfoCacheTest.setUp  s    

 r&   c                    t         S r*   rq   r1   s    r'   rr   zZoneInfoCacheTest.zoneinfo_data  rs   r&   c                0    | j                   j                  gS r*   ru   r1   s    r'   r3   zZoneInfoCacheTest.tzpath  rv   r&   c                d    | j                  | j                  d      | j                  d             y )NAmerica/Los_Angeles)r   rm   r1   s    r'   test_ephemeral_zonesz&ZoneInfoCacheTest.test_ephemeral_zones  s'    JJ,-tzz:O/P	
r&   c                l    | j                  d      }| j                  d      }| j                  ||       y )NAustralia/Sydney)rm   r   r2   tz0tz1s      r'   test_strong_refsz"ZoneInfoCacheTest.test_strong_refs  s.    jj+,jj+,c3r&   c                    | j                  d      }| j                   j                  d      }| j                  ||       y )NEurope/Lisbon)rm   r   r%  r8  s      r'   test_no_cachezZoneInfoCacheTest.test_no_cache  s4    jj)jj!!/2c"r&   c                    | j                  d      }| j                  g       5  | j                  d      }ddd       | j                  |       y# 1 sw Y   xY w)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.
        r4  N)rm   r<   r   )r2   zi0zi1s      r'   test_cache_reset_tzpathz)ZoneInfoCacheTest.test_cache_reset_tzpath  sU     jj./  $ 	4**23C	4 	c3	4 	4s   AAc                    | j                  d      }| j                   j                  d        | j                  d      }| j                  ||       y )Nr4  	only_keys)rm   rn   r%  )r2   la0la1s      r'   test_clear_cache_explicit_nonez0ZoneInfoCacheTest.test_clear_cache_explicit_none  sE    jj./

.jj./c"r&   c                   | j                  d      }| j                  d      }| j                   j                  dg       | j                  d      }| j                  d      }| j                  ||       | j                  ||       y)z5Tests that you can clear a single key from the cache.r4  Europe/DublinrD  Nrm   rn   r%  r   )r2   rF  dub0rG  dub1s        r'   test_clear_cache_one_keyz*ZoneInfoCacheTest.test_clear_cache_one_key  ss    jj./zz/*

*?)@Ajj./zz/*c"dD!r&   c                x   | j                  d      }| j                  d      }| j                  d      }| j                   j                  ddg       | j                  d      }| j                  d      }| j                  d      }| j                  ||       | j                  ||       | j                  ||       y )Nr4  rJ  
Asia/TokyorD  rK  )r2   rF  rL  tok0rG  rM  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&   )rE   rF   rG   r   r   rA   rI   rr   r3   r5  r;  r>  rB  rH  rN  rS  rJ   rK   s   @r'   r/  r/    sX    F   + +

 # #""r&   r/  c                      e Zd ZeZy)CZoneInfoCacheTestNr,  r%   r&   r'   rU  rU    r-  r&   rU  c                  `     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                V   | j                   j                          t        j                         5 }|j	                  t        j                  | j                               | j                  |j                         j                         d d d        t        | 1          y # 1 sw Y   xY wr*   )rm   rn   r9   r:   r;   test_supportset_zoneinfo_moduler   r=   r>   r?   r@   rA   rB   s     r'   rA   zZoneInfoPickleTest.setUp  sv    

 !!# 	3u @ @ MNOOEMMO112	3 			3 	3s   ABB(c                    t         S r*   rq   r1   s    r'   rr   z ZoneInfoPickleTest.zoneinfo_data  rs   r&   c                0    | j                   j                  gS r*   ru   r1   s    r'   r3   zZoneInfoPickleTest.tzpath  rv   r&   c                   t        t        j                  dz         D ]  }| j                  |      5  | j	                  d      }t        j
                  ||      }t        j                  |      }| j                  d      5  | j                  ||       d d d        t        j                  |      }| j                  d      5  | j                  ||       d d d        d d d         y # 1 sw Y   VxY w# 1 sw Y    xY w# 1 sw Y   xY w)Nr   protorJ  protocolzIs non-pickled ZoneInfotestzIs unpickled ZoneInfo)rm  pickleHIGHEST_PROTOCOLr   rm   dumpsloadsr   r2   r_  zi_inpklzi_rtzi_rt2s         r'   test_cache_hitz!ZoneInfoPickleTest.test_cache_hit  s    622Q67 	1EE* 
1

?3ll559S)\\'@\A 0MM%/0  c*\\'>\? 1MM%01
1 
1	10 01 1
1 
1s<   ADC*/DC6D*C3/D6C?;DD	c                   t        t        j                  dz         D ]  }| j                  |      5  | j	                  d      }t        j
                  ||      }~| j                  j                          t        j                  |      }t        j                  |      }| j                  ||       d d d         y # 1 sw Y   xY w)Nr   r^  rJ  r`  )	rm  rd  re  r   rm   rf  rn   rg  r   rh  s         r'   test_cache_missz"ZoneInfoPickleTest.test_cache_miss
  s    622Q67 
	-EE* 	-

?3ll559

&&(S)c*eV,	- 	-
	-	- 	-s   B B==C	c                   t        t        j                  dz         D ]  }| j                  |      5  | j                  j                  d      }t        j                  ||      }t        j                  |      }| j                  d      5  | j                  ||       d d d        t        j                  |      }| j                  d      5  | j                  ||       d d d        | j	                  d      }| j                  d      5  | j                  ||       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   -xY w# 1 sw Y   ExY w)	Nr   r^  rJ  r`  zNot the pickled objectrb  zNot a second unpickled objectzNot a cached object)	rm  rd  re  r   rm   r   rf  rg  r%  )r2   r_  zi_no_cacherj  rk  rl  zi_caches          r'   r>  z ZoneInfoPickleTest.test_no_cache  s7   622Q67 	6EE* 6"jj11/Bll;?S)\\'?\@ 9$$UK89  c*\\'F\G 4$$UF34  ::o6\\'<\= 6$$UH566 6	69 94 46 66 6sT   AED4 /EE "+EE E4D=9E E	EEEE"	c           	     Z   d}t        | j                  j                  |      d      5 }| j                  j	                  |      }|j                  d       | j                  j	                  ||      }d d d        dfdfg}|D ]  \  }}t        t        j                  dz         D ]]  }| j                  ||      5  | j                  t        j                        5  t        j                  ||	       d d d        d d d        _  y # 1 sw Y   xY w# 1 sw Y   "xY w# 1 sw Y   xY w)
NrJ  r   r   r   zZoneInfo with keyzZoneInfo without keyr   )r   r_  r`  )r   rr   r   rm   r   r  rm  rd  re  r   r   PicklingErrorrf  )	r2   rd   r   zi_nokeyzi_keyr   r   r   r_  s	            r'   test_from_filez!ZoneInfoPickleTest.test_from_file*  s!   $$$2237> 	6!zz++A.HFF1IZZ))!)5F		6 ()-.


 ( 	9MB	v66:; 9\\IU\C 9**6+?+?@ 9R%899 99	9	6 	69 99 9s0   A
D	< D!D	4D!	DDD!!D*c                x   t        t        j                  dz         D ]u  }| j                  |      5  d}| j	                  |      }t        j
                  ||      }t        j                  |      }| j                  ||       t        | j                  j                  |      d      5 }| j                  j                  ||      }d d d        t        j
                  ||      }t        j                  |      }	| j                  ||	       | j                  t        j                        5  t        j
                  |       d d d        t        j
                  ||      }
t        j                  |
      }| j                  ||       d d d        x y # 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   xY w)Nr   r^  rJ  r`  r   r   )rm  rd  re  r   rm   rf  rg  r   r   rr   r   r   r   rt  )r2   r_  rd   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=  sg   
 622Q67 	+EE* +%ZZ_R%8 ,,u-b'*$,,::3?F =! JJ000<E= R%8 ,,u-b'*&&v';';< 8LL78 R%8 ,,u-b'*)+ +	+= =8 8+ +s>   A7F/*FA%F/-F#AF/F F/#F,(F//F9	)rE   rF   rG   r   r   rA   rI   rr   r3   rm  ro  r>  rw  r  rJ   rK   s   @r'   rW  rW    sN    F   + +1-6&9&+r&   rW  c                      e Zd ZeZy)CZoneInfoPickleTestNr,  r%   r&   r'   r  r  Z  r-  r&   r  c                  0    e Zd ZdZeZed        Zd Zd Z	y)CallingConventionTestz8Tests for functions with restricted calling conventions.c                    t         S r*   rq   r1   s    r'   rr   z#CallingConventionTest.zoneinfo_datac  rs   r&   c                   t        | j                  j                  d      d      5 }| j                  t              5  | j
                  j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   )r   )r   rr   r   r   r   rm   r   )r2   r   s     r'   rw  z$CallingConventionTest.test_from_fileg  sq    $$$22594@ 	-A""9- -

$$!$,-	- 	-- -	- 	-s"   A6A*A6*A3	/A66A?c                    | j                  t              5  | j                  j                  dg       d d d        y # 1 sw Y   y xY wNr   )r   r   rm   rn   r1   s    r'   test_clear_cachez&CallingConventionTest.test_clear_cachel  s9    y) 	,JJ""E7+	, 	, 	,s	   <AN)
rE   rF   rG   rH   r   r   rI   rr   rw  r  r%   r&   r'   r  r  ^  s&    BF -
,r&   r  c                      e Zd ZeZy)CCallingConventionTestNr,  r%   r&   r'   r  r  q  r-  r&   r  c                  h    e Zd ZeZeej                  d               Zd Z	d Z
d Zd Zd Zd Zd Zy	)

TzPathTestc              #    K   d}t               }|}	 t        5  t        j                  j	                  |d       }| t        j                  |<   d  d d d        ||u ry |t        j                  |= y |t        j                  |<   y # 1 sw Y   6xY w# ||u rw |t        j                  |= w |t        j                  |<   w xY ww)NPYTHONTZPATH)objectr   osenvironget)valuepath_varunset_env_sentinelold_envs       r'   python_tzpath_contextz TzPathTest.python_tzpath_contextx  s      "#X$	/ **..48',

8$
 ,, JJx('.

8$ 
 ,, JJx('.

8$s3   CB 8BB -CB
B .B??Cc                v   dg fddgfdt         j                   dddgfg}|D ]|  \  }}| j                  |      5  | j                  |      5  | j                  j                          | j                  j                  }| j                  ||       ddd       ddd       ~ y# 1 sw Y   xY w# 1 sw Y   xY w)z<Tests that the environment variable works with reset_tzpath.rl  z/etc/zoneinfo/a/b/cz/d/e/fr3   N)r  pathsepr  r   r   reset_tzpathTZPATHassertSequenceEqual)r2   	new_pathsnew_path_varexpected_resultr3   s        r'   test_env_variablezTzPathTest.test_env_variable  s     H/0bjj\(8X*>?
	 .7 	F)L/++L9 F\\\6 FKK,,.![[//F,,V_EFF F	FF FF Fs$   B/AB#B/#B,(B//B8	c           	        ddgddgddgddgddgddgg}|D ]  \  }}t         j                  j                  |      }| j                  |      5  | j	                  d	|
      5  | j                  | j                  j                        5 }| j                  j                          d d d        | j                  j                  d   j                  t               d d d        | j                  j                  }| j	                  d|
      5  | j                  ||       d d d        d d d         y # 1 sw Y   xY w# 1 sw Y   exY w# 1 sw Y   -xY w# 1 sw Y   GxY w)Npath/to/somewherer%   /usr/share/zoneinfor  )r  ../relative/pathr  r  r  r  r  r  r  warning)r  r   filtered)r  r  joinr  r   assertWarnsr   InvalidTZPathWarningr  r   warningsfilename__file__r  r  )r2   r   input_pathsexpected_pathsr  wr3   s          r'    test_env_variable_relative_pathsz+TzPathTest.test_env_variable_relative_paths  ss   #R(=( #B'<( 8<
 )

, ,6 	E'Kzz{3H++H5 
E\\)h\? G ))$++*J*JK 3q0023$$QZZ]%;%;XFG ++\\*x\@ E,,V^DE
E 
E	E3 3G GE E
E 
EsT   E"&D<D0	#5D<1E	EE0D95D<<EEEEE	c                   d}| j                  |      5  t        dd      5  | j                  t              5 }dd l}d d d        j
                  }d d d        | j                  j                  d   j                         | j                  |j                  d   j                  t               d d d        y # 1 sw Y   |xY w# 1 sw Y   txY w# 1 sw Y   y xY w)Nr  r   zzoneinfo._tzpathr   )r  r   r  RuntimeWarningr   r  r&  r  messager   r  r  )r2   r  r  r   r  s        r'   1test_env_variable_relative_paths_warning_locationz<TzPathTest.test_env_variable_relative_paths_warning_location  s    &''1 	?Z);< E%%n5 $#$'/'D'D$E !!!**Q-"7"79MNQZZ]33X>	? 	?$ $E E	? 	?s9   CCB7CAC7C <CC	CCc                    | j                   j                  dg       | j                  | j                   j                  d       y )Nr  to)r  )r   r  r  r  r1   s    r'   test_reset_tzpath_kwargz"TzPathTest.test_reset_tzpath_kwarg  s3      XJ /  !3!3[Ar&   c                    g d}|D ]W  }| j                  |      5  | j                  t              5  | j                  j	                  |       d d d        d d d        Y y # 1 sw Y   xY w# 1 sw Y   pxY w)N)r  r  r  r  r  r  )r  r  )r   r   r   r   r  )r2   r   r  s      r'    test_reset_tzpath_relative_pathsz+TzPathTest.test_reset_tzpath_relative_paths  sz    

 & 	=K+6 =&&z2 =KK,,,<== =	== == =s"   A.A"A."A+'A..A7	c                    g d}|D ]V  }| j                  |      5  | j                  t              5  | j                  j	                  |       d d d        d d d        X y # 1 sw Y   xY w# 1 sw Y   oxY w)N)z!/etc/zoneinfo:/usr/share/zoneinfos!   /etc/zoneinfo:/usr/share/zoneinfor   )r  )r   r   r   r   r  )r2   r   	bad_values      r'   test_tzpath_type_errorz!TzPathTest.test_tzpath_type_error  sw    

 $ 	8II. 8&&y1 8KK,,Y788 8	88 88 8s"   A-A!A-!A*&A--A6	c                J   ddg}dg}| j                  |      5  | j                  j                  }d d d        | j                  |      5  | j                  j                  }d d d        | j                  |       | j                  |       y # 1 sw Y   ^xY w# 1 sw Y   :xY w)Nz/onez/twoz/three)r<   r   r  r  )r2   tzpath_0tzpath_1query_0query_1s        r'   test_tzpath_attributez TzPathTest.test_tzpath_attribute  s    F#:  * 	)kk((G	)   * 	)kk((G	) 	  73  73	) 	)	) 	)s   B	BBB"N)rE   rF   rG   r   r   staticmethodr9   contextmanagerr  r  r  r  r  r  r  r  r%   r&   r'   r  r  u  sN    F/  /(F#EJ
?B
=
84r&   r  c                      e Zd ZeZy)CTzPathTestNr,  r%   r&   r'   r  r    r-  r&   r  c                  `    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y)
TestModulec                    t         S r*   rq   r1   s    r'   rr   zTestModule.zoneinfo_data  rs   r&   c                    | j                   j                  d      }t        |d      5 }|j                         cd d d        S # 1 sw Y   y xY w)Nr   r   )rr   r   r   read)r2   	zone_filer   s      r'   
_UTC_byteszTestModule._UTC_bytes  sB    &&44U;	)T" 	a668	 	 	s   AAc                   t         j                  j                  |      st        | d      |j	                  dd      ^}}|r5t        j
                  t         j                  j                  ||      d       t         j                  j                  ||      }t        |d      5 }|j                  | j                         ddd       y# 1 sw Y   yxY w)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  )r2   rd   tz_rootroot_dirtailzonefile_pathr   s          r'   
touch_zonezTestModule.touch_zone  s    
 ww~~g&#wi/?$@AA**S!,4KKWh7$GWc2-& 	%!GGDOO$	% 	% 	%s   %C

Cc                    | j                  t              5  | j                  j                   d d d        y # 1 sw Y   y xY wr*   )r   r   r   NOATTRIBUTEr1   s    r'   test_getattr_errorzTestModule.test_getattr_error  s2    ~. 	$KK##	$ 	$ 	$s   6?c                    t        | j                  j                        }t        t        | j                              }||z
  }| j	                  |       y)z?dir(self.module) should at least contain everything in __all__.N)setr   __all__dirassertFalse)r2   module_all_setmodule_dir_set
differences       r'   test_dir_contains_allz TestModule.test_dir_contains_all   sA    T[[001S-.#n4
$r&   c                h    t        | j                        }t        |      }| j                  ||       y)z5Test that there are no duplicates in dir(self.module)N)r  r   r  assertCountEqual)r2   
module_dirmodule_uniques      r'   test_dir_uniquezTestModule.test_dir_unique)  s)    %
Jj-8r&   c                d   | j                  | j                  j                  g      5  | j                  | j                  j                         | j
                  j                         }t        | j                  j                        }||z  }| j                  ||       d d d        y # 1 sw Y   y xY wr*   )	r<   rr   r3   
assertTruer   r   available_timezonesr  r   )r2   available_keyszoneinfo_keysunions       r'   test_available_timezonesz#TestModule.test_available_timezones0  s      $"4"4";";!<= 		3OOD..334![[<<>N 2 2 7 78M "N2E]E2		3 		3 		3s   A6B&&B/c                    t        j                         5 }| j                  d|       | j                  |g      5  | j                  j                         }| j                  d|       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NzMars/Olympus_Mons)r   TemporaryDirectoryr  r<   r   r  assertIn)r2   tdr  s      r'   "test_available_timezones_weirdzonez-TestModule.test_available_timezones_weirdzone<  s    ((* 	CbOO/4$$bT* C!%!@!@!B1>BC		C 	CC C		C 	Cs"   %B-A8'B8B	=BBc           	        h d}t        |      }|D cg c]  }d| 	 }}|D cg c]  }d| 	 }}d|fd||z   fd||z   fd||z   |z   fg}t        j                         5 }|D ]  \  }}	t        j                  j                  ||      }
t        j                  |
       |	D ]  }| j                  ||
        | j                  |
g      5  | j                  |      5  | j                  j                         }| j                  ||       d d d        d d d         	 d d d        y c c}w c c}w # 1 sw Y   'xY w# 1 sw Y   xY w# 1 sw Y   y xY w)N>   Europe/ParisAmerica/Indiana/Indianapolisr   rP  r  America/Santiagor7  r4  zposix/zright/	base_treebase_and_posixbase_and_right	all_trees)listr   r  r  r   r  mkdirr  r<   r   r   r  r   )r2   r   r  r  
posix_tree
right_treern  r  	case_nametreer  rd   actuals                r'   test_folder_exclusionsz!TestModule.test_folder_exclusionsE  st   	
 N	,56qqcl6
6,56qqcl6
6 )$y:56y:56)j0:=>	
 ((* 	;b#( 
;	4'',,r95! 2COOC12 (('3 ;i0 ;!%!@!@!B((:;; ;
;	; 	; 76$; ;; ;	; 	;sG   D&D+"A)ED<-D0	
D<
E0D95D<<EEEc                T   ddh}t        |      dgz   }t        j                         5 }|D ]  }| j                  ||        | j	                  |g      5  | j
                  j                         }| j                  ||       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NzAmerica/New_Yorkr  
posixrules)r	  r   r  r  r<   r   r  r   )r2   r   r  r  rd   r  s         r'   test_exclude_posixrulesz"TestModule.test_exclude_posixrulesi  s    

 H~.((* 	3b )R() $$bT* 388:  23		3 	33 3		3 	3s#   ,B-BBB	BB'N)rE   rF   rG   r   r   rI   rr   r	   r  r  r  r  r  r  r   r  r  r%   r&   r'   r  r    sW    F   
% $%9
3C";H3r&   r  c                      e Zd ZeZy)CTestModuleNr,  r%   r&   r'   r  r  z  r-  r&   r  c                      e Zd ZdZd Zd Zy)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                    | j                  t        t        j                  d             | j	                  t        t
        j                  d             y )N_weak_cache)r  hasattrr  rk   r  r   r1   s    r'   test_cache_locationz&ExtensionBuiltTest.test_cache_location  s8     	!4!4mDE 4 4mDEr&   c                    dd l }| j                  |j                  t        j                               | j                  |j                  t
        j                               y r  )gcr  
is_trackedr   rk   r  )r2   r  s     r'   test_gc_trackedz"ExtensionBuiltTest.test_gc_tracked  s;    k&:&:;<j&9&9:;r&   N)rE   rF   rG   rH   r  r  r%   r&   r'   r  r  ~  s    F<r&   r  )frozenc                  0    e Zd ZU ded<   ded<   eZded<   y)rT  r   r   r   r   r   N)rE   rF   rG   __annotations__r   r   r%   r&   r'   rT  rT    s    KCr&   rT  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
y)rU  r   r`   rT  r   r   c                    | j                   | j                  j                  z
  j                  t        j
                        S )Nr   )r`   r   r   rc   r   r   r1   s    r'   r   zZoneTransition.transition_utc  s7    $"4"4">">>GG<< H 
 	
r&   c                \    | j                   j                  | j                  j                  kD  S )zWhether this introduces a foldr   r   r   r1   s    r'   rR   zZoneTransition.fold  '     !!++d.?.?.I.IIIr&   c                \    | j                   j                  | j                  j                  k  S )zWhether this introduces a gapr&  r1   s    r'   r   zZoneTransition.gap  r'  r&   c                \    | j                   j                  | j                  j                  z
  S r*   )r   r   r   r1   s    r'   deltazZoneTransition.delta  s%      **T-?-?-I-IIIr&   c                d    | j                   r| j                  | j                  z   S | j                  S r*   rR   r`   r*  r1   s    r'   r   zZoneTransition.anomaly_start  s&    99??TZZ//??"r&   c                d    | j                   s| j                  | j                  z   S | j                  S r*   r,  r1   s    r'   r   zZoneTransition.anomaly_end  s&    yy??TZZ//??"r&   N)rE   rF   rG   r"  rI   r   rR   r   r*  r   r   r%   r&   r'   rU  rU    s    
 

 J J J J J J # # # #r&   rU  c                  ,    e Zd ZddZd Zd Zd Zd Zy)r!   c                v    t        j                  |      | _        g | _        || _        | j                  |       y r*   )r   r   r3   r   r   _populate_tzpath)r2   source_jsonr3   r   s       r'   __init__zZoneInfoData.__init__  s.    ll6*	k*r&   c                     | j                   |z  S r*   r  ry   s     r'   r   zZoneInfoData.path_from_key  s    {{S  r&   c                   t        |d      5 }t        j                  |      }d d d        d   }|j                         D ]  \  }}| j                  j                  |       | j                  |      }| j                  r| j                  |      }n|}| j                  |      }	|	j                  j                  dd       t        |	d      5 }|j                  |       d d d         y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   T)r  parentsr  )r   jsonloadr   r   r   _decode_textr   _convert_to_v1r   parentr
  r  )
r2   r1  r   zoneinfo_dictrr   rd   r  raw_datar   destinations
             r'   r0  zZoneInfoData._populate_tzpath  s    +t$ 	) IIaLM	) &f-'--/ 	JCIIS!((/Hww**84,,S1K$$dD$Ak4( A 		) 	)  s   C)C5)C25C>	c                    dj                  t        t        j                  |            }t	        j
                  |      }t        j                  |      S )Nr&   )r  r  r   r  base64	b85decoder   
decompress)r2   contentsr<  decodeds       r'   r8  zZoneInfoData._decode_text  s:    88C

H56""8,w''r&   c                   |dd dk(  sJ d       t        |dd       }d}|dz   }|dk\  sJ d	       t        j                  d
|||       \  }}}}}	}
|dz  |	dz  z   |
z   |dz  z   |z   |z   }||z  }d|d| z   }|||dz    dk(  sJ d       |S )Nr   rQ  r  zInvalid TZif data found!r     r%  r   z-Version 1 file found: no conversion necessaryr  rE  r  s   TZif z0Version 2 file not truncated at Version 2 header)r  r  unpack)r2   rB  r  header_start
header_endr  r  r  r  r  r  	file_sizer  s                r'   r9  zZoneInfoData._convert_to_v1  s   !}'C)CC'hqm$!B&
!|LLL|@F8L4A
=7GWg
 aKk k 	
  	 	Z	(1Y"77 Y)a-1W<	>=	>< 
r&   N)F)rE   rF   rG   r2  r   r0  r8  r9  r%   r&   r'   r!   r!     s    +!((r&   r!   c                  t    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y)r|   c                >    | j                         j                         S r*   )_get_zonedumpr   rZ   s    r'   r}   zZoneDumpData.transition_keys  s      "''))r&   c                (    | j                         |   S r*   )rL  )rZ   rd   s     r'   ra   z%ZoneDumpData.load_transition_examples
  s      "3''r&   c                n    | j                   s| j                          | j                   j                         S r*   )_FIXED_OFFSET_ZONES_populate_fixed_offsetsr   rM  s    r'   r   zZoneDumpData.fixed_offset_zones  s,    &&'')&&,,..r&   c                R    | j                   s| j                          | j                   S r*   )_ZONEDUMP_DATA_populate_zonedump_datarM  s    r'   rL  zZoneDumpData._get_zonedump  s#    !!'')!!!r&   c                <    dt        dt        t              i| _        y r  )rT  r   rP  rM  s    r'   rQ  z$ZoneDumpData._populate_fixed_offsets  s     :eT40#
r&   c                    d }d }d }d }d }d }d }d }d	 }	d
 }
 |        |        |        |        |        |        |        |        |	        |
       d
| _         y )Nc                     t        dt        d            } t        dt              }t        t	        ddd      | |      gS )NrD  rv  r   rw  rx  r   rT  r   r   rU  r   )rD  rw  s     r'   _Africa_Abidjanz=ZoneDumpData._populate_zonedump_data.<locals>._Africa_Abidjan#  s@    UId$;<CUD)C xa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  rd  r
  r   r  r   rE     rM  r  r   rJ  )rT  r   rg  rU  r   )P00_sP01_dP00_dP01_ss       r'   _Africa_Casablancaz@ZoneDumpData._populate_zonedump_data.<locals>._Africa_Casablanca+  s    udD1EueU3EudUF3EueT2E xaQ7FxaQ7FxaQ7F xb"a8%GxaA6uExaA6uE
 
r&   c                 (   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 )"NrD  i&r   PSTir   PDTiPWTPPTrI  r   rS  rR  rO  r   i~  rd  rF  rM  r  i  rJ  i  r  rK  r  r  i  r   i	  r   rE  rT  r   r   rg  rU  r   )rD  rb  rc  rd  re  s        r'   _America_Los_AngeleszBZoneDumpData._populate_zonedump_data.<locals>._America_Los_Angeles=  sn   UIf$=tDCUIB$7>CUIB$7?CUIB$7?CUIB$7?C xb"b!Q?cJxaQ7cBxaQ7cBxb"a8#sCxaA6SAxaR8#sCxaQ7cBxaA6SAxb!Q7cBxaQ7cBxb!Q7cB r&   c                 V   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 )NrD  ir   SMTz-05ir  ir  iib  r   iv  rM  |  rO  i  rd  r  rR  re  rQ  r  rJ  r   rf  )rD  ri  N05N04r&  s        r'   _America_Santiagoz?ZoneDumpData._populate_zonedump_data.<locals>._America_SantiagoU  s    UIf$=tDCUIf$=tDCUIf$=tDCUIf$=tDCUIf$=uEC xa3S#>xa4c3?xa3S#>xa4c3?xb"5sC@xa3S#>xa3S#> r&   c            
         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   rJ  rR  r   i  rf  )ro  rp  s     r'   _Asia_Tokyoz9ZoneDumpData._populate_zonedump_data.<locals>._Asia_Tokyof  sw    UIe$<dCCUIe$<eDC xa3S#>xaQ7cBxaA6S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 )NrD  ič  r   r  rq  r  i  ig  r   r   }  r   rd  r
  r)  rQ  rM  rO  re  rf  )rD  r  r  s      r'   _Australia_Sydneyz?ZoneDumpData._populate_zonedump_data.<locals>._Australia_Sydneys  s    UIe$<dCCfi&>EDfi&>FD xa3S$?xaAq94FxaQ7tDxaA6dCxb!Q7tDxaA6dCxb!Q7tD r&   c                    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 )NrD  i$r   DMTir  i  rw  r  iX  r  r   r   rj  r  r#  rM  r   rd  rt  rQ  i  r  r  i	  r  rf  )rD  rw  IST_0GMT_0r  GMT_1IST_1s          r'   _Europe_Dublinz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Dublin  s9   UIe$<dCCUIe$<dCCui&=uEEudD1EUE51CudUF3EueT2E xaA6SAxaQ7eDxb!Q7FxaA6sCxaQ7Fxb"a8%GxaQ7Fxb"a8%G	 	r&   c                    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  rd  r	  r   rJ  r  r   i  r  r  rj  rF  rM  )rT  r   rg  r   rU  r   )r~  r  r  r  s       r'   _Europe_Lisbonz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Lisbon  s    UD$/CfeU3DUE40Cfi&=uED xaQ7dCxaQ7sCxaQ7dCxaQ7sCxaQ7dCxb"a8$D r&   c                 ~   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 )NrD  ir   rw  r  i7  rR  r   i  rd  r  rM  r  r   i  r	  r
  rf  )rD  rw  r  s      r'   _Europe_Londonz<ZoneDumpData._populate_zonedump_data.<locals>._Europe_London  s    UIc$:DACUD$/CUE51C xb!4c3?xaQ7cBxb"a8#sCxaQ7cBxb"a8#sC r&   c            	     h   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 )NrD  ilr   z-1040i jz-10i`sz+14i  im  r   i  rM  i  rR  rF  rX  )rD  N1040N10P14s       r'   _Pacific_KiritimatizAZoneDumpData._populate_zonedump_data.<locals>._Pacific_Kiritimati  s    UIf$=tDCw	&(A4HEUIf$=tDCUIe$<dCC xa3S%@xb!4eSAxb"5sC@	 r&   )
rz  zAfrica/Casablancar4  r  r7  rP  rJ  r=  r  zPacific/Kiritimati)rS  )rZ   rY  r`  rg  rm  rr  ru  r|  r  r  r  s              r'   rT  z$ZoneDumpData._populate_zonedump_data!  s{    		$	0	"			(			 ./!3!5#7#9 1 3 1 3%-+-+-+-"5"7
r&   N)rE   rF   rG   r]   r}   ra   r   rL  rQ  rT  rS  rP  r%   r&   r'   r|   r|     s    * * ( ( / / " "
 
 

 i
 i
V Nr&   r|   __main__)[
__future__r   r?  r9   rb   importlib.metadata	importlibr   r6  r  r   rd  r  r+   r  r   r  r   r   r   r   r   	functoolsr	   test.supportr
   test.test_zoneinfor   rY  test.test_zoneinfo._supportr   r   r   test.support.import_helperr   r   r   get_modulesr   r  metadataHAS_TZDATA_PKGPackageNotFoundErrorr#   r$   r    r   r  r:  DATA_DIRr"   r   rg  r(   r-   r/   rM   rj   r   r  r  r  r+  r/  r9  r  r;  r@  rB  r  r  r-  r/  rU  rW  r  r  r  r  r  r  r  TestCaser  	dataclassrT  rU  r!   r|   rE   mainr%   r&   r'   <module>r     sA   "     	  	   	     > > % - 7 W W AV2,224 Z)N  7<<!((61// |M @ :Z6?$4 Z6zB-L B-J	#8, 		$9= 	3< 3*0 \ $n  N#, ##* N; a$ aH] q  qh Q")9 Q"h* o+*: o+d, ,, ,&2 C4"2 C4L* x3! x3v* <** <, d#  $ d#%# %# $%#P> >BI IX zHMMO eE .. Ns   J= =KK