
    4hhE                   X   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKJrJrJrJrJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S SK J!r!J"r"J#r#  S S	K$J%r%J&r&  S S
K'J(r(  \%" S5      r)\RT                  " 5       u  r+r, \RZ                  R[                  S5        Sr.Sq0Sq1Sq2\
Rf                  " \45      Rj                  S-  r6\6S-  r7\	Rp                  Rs                  S5      S    r:\" S 5      r;\" SS9r<S r=S r> " S S\?5      r@ " S S5      rA " S S5      rB " S S\A\#5      rC " S S\C5      rD " S  S!\B\C5      rE " S" S#\B\D5      rF " S$ S%\C5      rG " S& S'\G5      rH " S( S)\C5      rI " S* S+\I5      rJ\R                  " \.(       + S,5       " S- S.\C5      5       rL\R                  " \.(       + S,5       " S/ S0\L5      5       rM " S1 S2\#5      rN " S3 S4\N5      rO " S5 S6\#5      rP " S7 S8\P5      rQ " S9 S:\A\#5      rR " S; S<\R5      rS " S= S>\A\#5      rT " S? S@\T5      rU " SA SB\#5      rV " SC SD\V5      rW " SE SF\A\#5      rX " SG SH\X5      rY " SI SJ\#5      rZ " SK SL\Z5      r[ " SM SN\R                  5      r] " SO SP\R                  5      r^\R                  " SSQ9 " SR SS5      5       r`\R                  " SSQ9 " ST SU5      5       ra " SV SW5      rb " SX SY5      rc\dSZ:X  a  \R                  " 5         gg! \RZ                  R^                   a    Sr. GNof = f)[    )annotationsN)datedatetimetime	timedeltatimezone)cached_property)MISSING_C_DOCSTRINGSrequires_gil_enabled)FakePath)_support)OS_ENV_LOCKTZPATH_TEST_LOCKZoneInfoTestBase)import_moduleCleanImport)assert_python_oklzmatzdataTFdatazzoneinfo_data.jsonzx:   hoursc                     [         R                  " [        R                  " SS95      q[        [        [        S-  5      q[        [        [        S-  SS9qg )Nzoneinfo)prefixv2v1T)r   )	pathlibPathtempfilemkdtempTEMP_DIRZoneInfoDataZONEINFO_JSONZONEINFO_DATAZONEINFO_DATA_V1     I/opt/python-3.13.8/usr/lib/python3.13/test/test_zoneinfo/test_zoneinfo.pysetUpModuler+   0   s@    
 ||H,,J?@H 4@M#M8d?tLr)   c                 8    [         R                  " [        5        g N)shutilrmtreer#   r(   r)   r*   tearDownModuler0   :   s    
MM(r)   c                      \ rS rSrSrg)CustomError>   r(   N__name__
__module____qualname____firstlineno____static_attributes__r(   r)   r*   r2   r2   >       r)   r2   c                  L   ^  \ rS rSrSr\S 5       r\S 5       rU 4S jrSr	U =r
$ )TzPathUserMixinB   a0  
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                    g r-   r(   selfs    r*   tzpathTzPathUserMixin.tzpathL       r)   c                    gNTr(   r?   s    r*   block_tzdataTzPathUserMixin.block_tzdataP   rC   r)   c           	     B  > [         R                  " 5        nUR                  U R                  U R                  U R
                  [        S95        U R                  UR                  5       R                  5        S S S 5        [        TU ]-  5         g ! , (       d  f       N= f)N)rF   lock)
contextlib	ExitStackenter_contexttzpath_contextrA   rF   r   
addCleanuppop_allclosesupersetUpr@   stack	__class__s     r*   rR   TzPathUserMixin.setUpT   sx    !!#u##KK!%!2!2) $  OOEMMO112 $ 	 $#s   A"B
Br(   )r5   r6   r7   r8   __doc__propertyrA   rF   rR   r9   __classcell__rU   s   @r*   r<   r<   B   s:         r)   r<   c                  B   ^  \ rS rSrSr " S S\5      rU 4S jrSrU =r	$ )DatetimeSubclassMixinb   zH
Replaces all ZoneTransition transition dates with a datetime subclass.
c                  $    \ rS rSr\S 5       rSrg)&DatetimeSubclassMixin.DatetimeSubclassg   c                    U " UR                   UR                  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  S9	$ )N)tzinfofold)	yearmonthdayhourminutesecondmicrosecondrb   rc   )clsdts     r*   from_datetime4DatetimeSubclassMixin.DatetimeSubclass.from_datetimeh   sN    				yyWW
 
r)   r(   N)r5   r6   r7   r8   classmethodrm   r9   r(   r)   r*   DatetimeSubclassr_   g   s    		 
	r)   rp   c              #     >#    [         TU ]  U5      nU HB  nUR                  nU R                  R	                  U5      n[
        R                  " X5S9nUv   MD     g 7f)N)
transition)rQ   load_transition_examplesrr   rp   rm   dataclassesreplace)r@   keytransition_examplesztrl   new_dtnew_ztrU   s          r*   rs   .DatetimeSubclassMixin.load_transition_examplesv   sT     #g>sC%BB**88<F ((?FL	 &s   AAr(   )
r5   r6   r7   r8   rW   r   rp   rs   r9   rY   rZ   s   @r*   r\   r\   b   s    8  r)   r\   c                     ^  \ rS rSr\rSrU 4S jr\S 5       r	\S 5       r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rSrU =r$ )ZoneInfoTest   ZoneInfoc                V   > [         TU ]  5         U R                  R                  5         g r-   )rQ   rR   klassclear_cacher@   rU   s    r*   rR   ZoneInfoTest.setUp   s     	

 r)   c                    [         $ r-   r&   r?   s    r*   zoneinfo_dataZoneInfoTest.zoneinfo_data       r)   c                0    U R                   R                  /$ r-   r   rA   r?   s    r*   rA   ZoneInfoTest.tzpath       ""))**r)   c                $    U R                  U5      $ r-   r   r@   rv   s     r*   zone_from_keyZoneInfoTest.zone_from_key   s    zz#r)   c                *    [         R                  5       $ r-   )ZoneDumpDatatransition_keysr?   s    r*   zonesZoneInfoTest.zones   s    ++--r)   c                *    [         R                  5       $ r-   )r   fixed_offset_zonesr?   s    r*   r   ZoneInfoTest.fixed_offset_zones   s    ..00r)   c                ,    [         R                  U5      $ r-   )r   rs   r   s     r*   rs   %ZoneInfoTest.load_transition_examples   s    44S99r)   c                h   U R                  5        HI  nU R                  U5         U R                  U5      nU R                  [	        U5      U5        S S S 5        MK     U R
                  R                  S   nU R
                  R                  U5      n[        US5       nU R                  SUS9   U R                  R                  U5      nU R                  [	        U5      [        U5      5        S S S 5        S S S 5        g ! , (       d  f       M  = f! , (       d  f       N)= f! , (       d  f       g = f)Nr   rbz	Repr test)	test_namepath)r   subTestr   assertEqualstrr   keyspath_from_keyopenr   	from_filerepr)r@   rv   zifile_key	file_pathfzi_ffs          r*   test_strZoneInfoTest.test_str   s    ::<Cc"'',  R#. #"   %%**1-&&44X>	)T"a)D

,,Q/  UT%[9 E #" #" ED #"s0   -D D#/A D/D# 
D	
D 	D##
D1c                   [        [        U R                  5       5      5      nU R                  U5      nU R                  nU R                  SS9   U R                  [        U5      U5        S S S 5        U R                  R                  S   nU R                  R                  U5      n[        US5       nU R                  R                  XdS9nS S S 5        U R                  SS9   U R                  [        W5      U5        S S S 5        [        US5       nU R                  R                  U5      nS S S 5        U R                  SS9   U R                  [        W5      U5        S S S 5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nv= f! , (       d  f       g = f)Nzfrom key)namer   r   rv   zfrom file with keyzfrom file without key)nextiterr   r   
class_namer   assertRegexr   r   r   r   r   r   )	r@   rv   r   r   r   r   r   r   zi_ff_nks	            r*   	test_reprZoneInfoTest.test_repr   sW    4

%&ZZ___
\\z\*T"Xz2 + %%**1-&&44X>	)T"aJJ(((9E # \\3\4T%[*5 5 )T"azz++A.H # \\6\7T(^Z8 87 +*
 #" 54 #" 87s<   E,3E>$FF F1,
E;>
F
F 
F.1
F?c                .  ^  [        [        T R                  5       5      5      nU 4S jnST R                  U4ST R                  R                  U4SUS 44nU H  u  pEnU" U5      nT R                  U5         T R                  UR                  U5        S S S 5        T R                  U S35         T R                  [        5         SUl        S S S 5        S S S 5        M     g ! , (       d  f       NU= f! , (       d  f       N,= f! , (       d  f       M  = f)Nc                   > [        TR                  R                  U 5      S5       nTR                  R	                  U5      sS S S 5        $ ! , (       d  f       g = f)Nr   )r   r   r   r   r   )rv   r   r@   s     r*   from_file_nokey8ZoneInfoTest.test_key_attribute.<locals>.from_file_nokey   s?    d((66s;TBazz++A. CBBs   A
AzPrimary constructorno_cacher   z
: readonlyz
Some/Value)
r   r   r   r   r   r   r   rv   assertRaisesAttributeError)r@   rv   r   constructorsmsgconstructorexpectedr   s   `       r*   test_key_attributeZoneInfoTest.test_key_attribute   s    4

%&	/
 #DJJ4,,c2/40
 +7&ChS!B c"  2 # Z01&&~6)BF 7 21 +7 #"
 76 21s0   7C#0DC4D#
C1	4
D>D
D	c                    / SQnU HB  nU R                  U R                  R                  5         U R                  U5        S S S 5        MD     g ! , (       d  f       MV  = f)N)zEurasia/BadzoneBZQzAmerica.Los_Angelesu   🇨🇦u   America/NewYorkEurope)r   moduleZoneInfoNotFoundErrorr   r@   bad_keysbad_keys      r*   test_bad_keysZoneInfoTest.test_bad_keys   sI    
  G""4;;#D#DE

7# FE  EEs   A
A	c                    / SQnU H2  nU R                  [        5         U R                  U5        S S S 5        M4     g ! , (       d  f       MF  = f)N)z/America/Los_AngeleszAmerica/Los_Angeles/z../zoneinfo/America/Los_AngeleszAmerica/../America/Los_AngeleszAmerica/./Los_Angeles)r   
ValueErrorr   r   s      r*   test_bad_keys_paths ZoneInfoTest.test_bad_keys_paths   s>    
  G"":.

7# /.  ..s	   >
A	c                    SS/nU HR  n[         R                  " U5      nU R                  [        5         U R                  R                  U5        S S S 5        MT     g ! , (       d  f       Mf  = f)Nr)   s   AAAA3               )ioBytesIOr   r   r   r   )r@   	bad_zonesbad_zonefobjs       r*   test_bad_zonesZoneInfoTest.test_bad_zones   sX     
	
 "H::h'D"":.

$$T* /. "..s   A
A-	c                   [        [        U R                  5       5      5      nU R                  U5      n[	        SSS[
        R                  S9[        4[	        SSS5      [        4[        SSS5      [        4[        S5      [        4S[        4S[        4/nU HH  u  pEU R                  US9   U R                  U5         UR                  U5        S S S 5        S S S 5        MJ     g ! , (       d  f       N= f! , (       d  f       Mm  = f)N  r   rb   r   z
2019-01-01)val)r   r   r   r   r   r   utcr   r   	TypeErrorr   r   r   fromutc)r@   rv   zone
bad_valuesr   exc_types         r*   test_fromutc_errors ZoneInfoTest.test_fromutc_errors  s    4

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

 (MC#&&&x0LL% 1 '& (00 '&s$   -C7?C&C7&
C40C77
D	c                   U R                  S5      n[        SSSUS9nU R                  UR                  5       [        5        U R                  UR                  5       [        5        U R                  UR                  5       S5        g )NUTC  r   r   )r   r   r   	utcoffsetZEROdsttzname)r@   r   rl   s      r*   test_utcZoneInfoTest.test_utc  sb    ZZdAq,.4(e,r)   c           
        / nU R                  5        H  nU R                  U5       Hg  nUR                  UUR                  [	        SS9-
  UR
                  45        UR                  UUR                  [	        SS9-   UR                  45        Mi     M     U H  u  p$nU R                  X$US9   U R                  U5      nUR                  US9nU R                  UR                  5       UR                  U5        U R                  UR                  5       UR                  U5        U R                  UR                  5       UR                  U5        S S S 5        M     g ! , (       d  f       M  = f)N   )days)rv   rl   offsetr   )r   rs   appendrr   r   offset_beforeoffset_afterr   r   ru   r   r   r   r   )r@   
test_casesrv   zone_transitionrl   r   tzis          r*   test_unambiguousZoneInfoTest.test_unambiguous   s8   
::<C#'#@#@#E!!'22YA5FF'55 !!'22YA5FF'44 $F  $  *OCV#V<((-ZZsZ+  fmmR@  1A1A2F  6::r: =<  *<<s   .B"E
E,	c                   / nU R                  5        GHZ  n/ / S.nU R                  U5       GH  nUR                  (       a  US   nOUR                  (       a  US   nOS nM6  UR                  [        SS9-
  nUR                  USUR                  45        UR                  USUR                  45        UR                  nUR                  USUR                  45        UR                  USUR                  45        UR                  [        SS9-   nUR                  USUR                  45        UR                  USUR                  45        UR                  [        SS9-
  nUR                  USUR                  45        UR                  USUR                  45        UR                  nUR                  USUR                  45        UR                  USUR                  45        UR                  [        SS9-   nUR                  USUR                  45        UR                  USUR                  45        GM     UR                  5        H  u  pUR                  X(4U45        M     GM]     U H  u  u  p(nU R                  X(S9   U R                  U5      n	U H  u  pznUR                  XS9nU R                  UR                  5       UR                  U5        U R                  UR!                  5       UR                   U5        U R                  UR#                  5       UR"                  U5        M     S S S 5        M     g ! , (       d  f       M  = f)	N)foldsgapsr   r   r   secondsr   )rv   grprc   rb   )r   rs   rc   gapanomaly_startr   r   r   r   anomaly_enditemsr   r   ru   r   r   r   r   )r@   r   rv   testsrx   
test_groupno_peephole_optrl   r  r   rc   r   s               r*   test_folds_and_gaps ZoneInfoTest.test_folds_and_gaps=  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 9J $);;=!!C:z":; $1O  T ",JS#/((-(-$Bf:B$$RYY[&--D$$R\\^V5E5ErJ$$RVVXvzz2> ). 0/ ",//s   B.M
M	c           	        U R                  5        H  nU R                  U5      nU R                  US9   U R                  U5       H  nUR                  (       d  M  UR
                  nU[        SS9-
  nU[        SS9-   nUR                  U5      nU R                  UR                  SXt45        UR                  U5      nU R                  UR                  SX45        M     S S S 5        M     g ! , (       d  f       M  = f)Nr   r   r  r   )	r   r   r   rs   rc   transition_utcr   
astimezoner   )	r@   rv   r   rx   dt_utcdt_before_utcdt_after_utc	dt_beforedt_afters	            r*   test_folds_from_utc ZoneInfoTest.test_folds_from_utct  s    ::<C##C(B#&77<B77 ..F$*Yq-A$AM#)Ia,@#@L - 8 8 <I$$Y^^Q8KL+66r:H$$X]]A7IJ = '&  &&s   B.C//
C>	c           	        U R                  5        H  nU R                  U5      n[        SSSSUS9nU R                  US9   U R	                  UR                  5       S 5        U R	                  UR                  5       S 5        U R	                  UR                  5       S 5        S S S 5        M     g ! , (       d  f       M  = fN      r   i  r   r   )r   r   r   r   assertIsr   r   r   )r@   rv   r   ts       r*   test_time_variable_offset&ZoneInfoTest.test_time_variable_offset  s    ::<C##C(BRQb1A#&ahhj$/akkmT2aeegt, '&	   '&s   A!B//
B>	c           	        U R                  5        H  u  pU R                  U5      n[        SSSSUS9nU R                  US9   U R	                  UR                  5       UR
                  5        U R	                  UR                  5       UR                  5        U R	                  UR                  5       UR                  5        S S S 5        M     g ! , (       d  f       M  = fr  )r   r   r   r   r   r   r   r   )r@   rv   r   r   r  s        r*   test_time_fixed_offset#ZoneInfoTest.test_time_fixed_offset  s    224KC##C(BRQb1A#&  V]];  0@0@A  &**5 '& 5
 '&s   A?C
C	c                *    " S S[         5      nSnU R                  U5      nU" U5      n U R                  U5      nU R                  UR                  5        U R	                  XC5        g ! [
         a    U R                  UR                  5         g f = f)Nc                  6    \ rS rSrSrS r\R                  rSrg)7ZoneInfoTest.test_cache_exception.<locals>.Incomparablei  Fc                    SU l         [        erE   )	eq_calledr2   )r@   others     r*   __eq__>ZoneInfoTest.test_cache_exception.<locals>.Incomparable.__eq__  s    !%!!r)   )r'  N)	r5   r6   r7   r8   r'  r)  r   __hash__r9   r(   r)   r*   Incomparabler%    s    I" ||Hr)   r,  America/Los_Angeles)r   r   assertFalser'  r  r2   
assertTrue)r@   r,  rv   tz1tz2s        r*   test_cache_exception!ZoneInfoTest.test_cache_exception  s    	$3 	$ $jjo3	$**S/C S]]+MM##	  	+OOCMM*	+s   A* *%BBr(   )r5   r6   r7   r8   py_zoneinfor   r   rR   rX   r   rA   r   r   r   rs   r   r   r   r   r   r   r   r   r   r  r  r  r!  r2  r9   rY   rZ   s   @r*   r}   r}      s    FJ!   + +.1::"90*2$$	+&$-;:5?nK$	-	6$ $r)   r}   c                  P    \ rS rSr\r\R                  " \S5      S 5       r	S r
Srg)CZoneInfoTesti  z6Signature information for builtins requires docstringsc                *   SSK nU R                  R                  U R                  R                  U R                  R                  4nU H6  nU R                  US9   UR                  R                  U5        SSS5        M8     g! , (       d  f       MJ  = f)z1Ensure that C module has valid method signatures.r   N)method)inspectr   r   r   r   r   	Signaturefrom_callable)r@   r9  must_have_signaturesr8  s       r*   test_signaturesCZoneInfoTest.test_signatures  su     	 JJ""JJJJ   

 +FV,!!//7 -, +,,s   B
B	c                   S nSS/nSnU R                  U5      nU R                  U5       HO  nUR                  (       d  M  UR                  R                  [
        :X  d  M6  UR                  R                  US9n  O   S Hv  nU(       a	  U" W5      nOWnU R                  US9   UR                  U5      nU R                  UR                  S5        U R                  UR                  S	5        S
S
S
5        Mx     g
! , (       d  f       M  = f)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                     " S S[        U 5      5      nU" U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  S9	$ )Nc                  (   ^  \ rS rSrU 4S jrSrU =r$ )LCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclassi  c                D   > U[        S5      :X  a  U $ [        TU ]	  U5      $ Nr   )r   rQ   __add__r@   r(  rU   s     r*   rE  TCZoneInfoTest.test_fold_mutate.<locals>.to_subclass.<locals>.SameAddSubclass.__add__  s#    	!,# 7?511r)   r(   )r5   r6   r7   r8   rE  r9   rY   rZ   s   @r*   SameAddSubclassrB    s    2 2r)   rH  r  )
typerd   re   rf   rg   rh   ri   rj   rc   rb   )rl   rH  s     r*   to_subclass3CZoneInfoTest.test_fold_mutate.<locals>.to_subclass  s`    2$r( 2 #				WWyy
 
r)   FTEurope/Londonr   )FT)subclassr   r   N)r   rs   rc   r   r   r   r  ru   r   r   r   )	r@   rJ  rM  rv   r   rx   examplerl   
dt_fromutcs	            r*   test_fold_mutateCZoneInfoTest.test_fold_mutate  s    	( 4=$//4Bwww2??44<++3323> 5
 &H )x0ZZ^
  !4  !,	 10 & 10s   %A
C<<
D	r(   N)r5   r6   r7   r8   
c_zoneinfor   unittestskipIfr
   r=  rP  r9   r(   r)   r*   r6  r6    s/    F__)MO8O80-r)   r6  c                      \ rS rSrSrg)ZoneInfoDatetimeSubclassTesti  r(   Nr4   r(   r)   r*   rV  rV    r:   r)   rV  c                      \ rS rSrSrg)CZoneInfoDatetimeSubclassTesti  r(   Nr4   r(   r)   r*   rX  rX    r:   r)   rX  c                  8   ^  \ rS rSr\U 4S j5       rS rSrU =r$ )ZoneInfoSubclassTesti  c                   > [         TU ]  5          " S SU R                  5      nSU l        U R                  U l        Xl        g )Nc                      \ rS rSrSrg)3ZoneInfoSubclassTest.setUpClass.<locals>.ZISubclassi  r(   Nr4   r(   r)   r*   
ZISubclassr]    s    r)   r^  )rQ   
setUpClassr   r   parent_klass)rk   r^  rU   s     r*   r_  ZoneInfoSubclassTest.setUpClass  s8    	 	 &99	r)   c                    U R                  S5      nU R                  S5      nU R                  X5        U R                  XR                   5        U R                  X R                  5        g )NrL  )r`  r   assertIsNotassertIsInstance)r@   base_objsub_objs      r*   test_subclass_own_cache,ZoneInfoSubclassTest.test_subclass_own_cache	  sT    $$_5**_-+h(9(9:gzz2r)   r(   )	r5   r6   r7   r8   ro   r_  rg  r9   rY   rZ   s   @r*   rZ  rZ    s     3 3r)   rZ  c                      \ rS rSr\rSrg)CZoneInfoSubclassTesti  r(   Nr5   r6   r7   r8   rR  r   r9   r(   r)   r*   rj  rj        Fr)   rj  c                  *    \ rS rSr\S 5       rS rSrg)ZoneInfoV1Testi  c                    [         $ r-   )r'   r?   s    r*   r   ZoneInfoV1Test.zoneinfo_data  s    r)   c              #     #    [        SSS5      n[        SS9nX#-
  nX#-   n[        R                  U5       H#  nXFR                  s=::  a  U::  d  M  O  M  Uv   M%     g 7f)N  r           r  )r   r   r   rs   rr   )r@   rv   epochmax_offset_32min_dtmax_dtrx   s          r*   rs   'ZoneInfoV1Test.load_transition_examples  s[      q!$!'2&&77<B0&00 =s   AAAr(   N)r5   r6   r7   r8   rX   r   rs   r9   r(   r)   r*   rn  rn    s       
r)   rn  c                      \ rS rSr\rSrg)CZoneInfoV1Testi(  r(   Nrk  r(   r)   r*   rz  rz  (  rl  r)   rz  z4Skipping tzdata-specific tests: tzdata not installedc                  >    \ rS rSrSr\S 5       r\S 5       rS rSr	g)TZDataTestsi,  a!  
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                    / $ r-   r(   r?   s    r*   rA   TZDataTests.tzpath8  s    	r)   c                    g)NFr(   r?   s    r*   rF   TZDataTests.block_tzdata<  s    r)   c                     U R                  US9$ )Nr   r   r   s     r*   r   TZDataTests.zone_from_key@  s    zzcz""r)   r(   N)
r5   r6   r7   r8   rW   rX   rA   rF   r   r9   r(   r)   r*   r|  r|  ,  s4        #r)   r|  c                      \ rS rSr\rSrg)CTZDataTestsiD  r(   Nrk  r(   r)   r*   r  r  D  s	     Fr)   r  c                  L    \ rS rSr\rS rS rS rS r	S r
S rS rSS
 jrSrg	)WeirdZoneTestiK  c                @   [        S[        SSSS9* 5      n[        S[        SS9* 5      n[        [        SSS	S
5      X5      /nSnU R	                  X45      nU R
                  R                  U5      n[        SSS	SUS9n[        SSSSUS9nXq4X44 H  u  pU R                  SU	S9   U R                  U	R                  5       U
R                  5        U R                  U	R                  5       U
R                  5        U R                  U	R                  5       U
R                  5        S S S 5        M     [        SSS	SUS9[        SSS	SSS[        R                  S94[        SSSSUS9[        SSSS[        R                  S94/nU Hp  u  pU R                  SUS9   UR                  U5      nU R                  X5        UR                  [        R                  5      nU R                  X5        S S S 5        Mr     g ! , (       d  f       GMy  = f! , (       d  f       M  = f)NLMT      r   )r   minutesr  STDr   [  	      STD6r   r   
   local)r   rl                 r   )
ZoneOffsetr   ZoneTransitionr   construct_zoner   r   r   r   r   r   r   r   r   r  )r@   r  r  transitionsafterzfr   dt0dt1rl   r   dtsdt_localr  	dt_actualdt_utc_actuals                   r*   test_one_transition!WeirdZoneTest.test_one_transitionN  s   B!J JK!3 34 8D!Q3S>
   4ZZ!!"%tQ1R0tQAb1:z2JB7r2  fmm<  1A1AB  6::6 32 3 q!Qr2q!QAhllC
 q!R3q!R=	
 !$H9:"--b1	  5 ( 3 3HLL A  7 ;: !$! 32" ;:s   'A?G;AH;
H	
H	c           	        [        S[        [        5      n[        [        SSS5      X5      /nSnU R	                  X#5      nU R
                  R                  U5      n[        SSS5      [        SSS	5      [        SSS5      [        S
SS5      [        SSS5      /nU H  nUR                  US9nU R                  US9   U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        S S S 5        M     g ! , (       d  f       M  = f)NDSTrr  r   zSTD0DST-1,0/0,J365/25l     i  r  r  r  r    r   rl   )r  ONE_Hr  r   r  r   r   ru   r   r   r   r   r   )r@   r  r  r  r  r   r  rl   s           r*   test_one_zone_dstWeirdZoneTest.test_one_zone_dstw  s!   u-8D!Q/:
 (  4ZZ!!"% T1a T1b!T1a T2q!T1a 
 B2&B$  cjj9  ?  3773 %$ $$s   =A?E		
E	c                   [        S[        [        5      n[        SS[        -  [        5      n/ n[        SS5       HQ  nUR	                  [        [        USSS5      X5      5        UR	                  [        [        USSS5      X!5      5        MS     S	nU R                  X55      nU R                  R                  U5      n[        S
SS5      U4[        SSS5      U4[        SSS5      U4[        SSS5      U4/nU H  u  pU	R                  US9n	U R                  U	S9   U R                  U	R                  5       U
R                  5        U R                  U	R                  5       U
R                  5        U R                  U	R                  5       U
R                  5        S S S 5        M     [!        SUS9nU R                  S5         U R#                  UR                  5       S 5        U R#                  UR                  5       S 5        U R#                  UR                  5       S 5        S S S 5        g ! , (       d  f       GMC  = f! , (       d  f       g = f)Nr  r  r       r  r   r   i  r  i  r   r  r   zTesting datetime.time)r  r  r   ranger   r  r   r  r   r   ru   r   r   r   r   r   r   r  )r@   r  r  r  rd   r  r  r   casesrl   r   r  s               r*   test_no_tz_strWeirdZoneTest.test_no_tz_str  s   t,E	51$%DxaA6A xb!Q7B	 &   4
 ZZ!!"% dAq!3'dAq!3'dB"C(dAq!3'	
  JB2&B$  fmm<  1A1AB  6::6 %$   2\\12MM!((*d+MM!++-.MM!%%'4( 32 %$ 32s   A?H.A!I.
H>	
Ic                   [        S[        [        5      [        S[        [        5      /nU GH  n[        S X"5      /nSnU R	                  X45      nU R
                  R                  U5      n[        SSS5      [        SSS5      [        SSS5      /nU H  nUR                  US9nU R                  X(S	9   U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        S S S 5        M     GM     g ! , (       d  f       M  = f)
Nr  r  r  r  r   rr  r  r   )r   rl   )r  r   r  r  r  r   r   r   ru   r   r   r   r   r   )	r@   offsetsr   r  r  r  r   r  rl   s	            r*   test_tz_before_only!WeirdZoneTest.test_tz_before_only  s%    udD)ueU+

 F tV4K E$$[8B%%b)B q!$q!$q!$C ZZrZ*\\\7$$RYY[&--@$$R\\^V5E5EF$$RVVXvzz: 87 # & 87s   5A?E
Ec                    U R                  / S5      nU R                  [        5         U R                  R	                  U5        S S S 5        g ! , (       d  f       g = f)Nr  )r  r   r   r   r   )r@   r  s     r*   test_empty_zoneWeirdZoneTest.test_empty_zone  s@      R(z*JJ  $ +**s   A
Ac                8   [        S[        SS95      n[        S[        5      nSX4[        [	        SSS5      X5      SX"4/nS	nU R                  X45      nU R                  R                  US
S9n[        R                  U4[        R                  U4[	        SSS5      U4[	        SSS5      U4/nU H  u  pUR                  US9n
U R                  SXS9   U R                  U
R                  5       U	R                  5        U R                  U
R                  5       U	R                  5        U R                  U
R                  5       U	R                  5        SSS5        M     [        R                  [        R                  [        SS9-   4[	        SSSSSS5      [	        SSS5      4[	        SSSSSSS5      [	        SSSSSSS5      4[	        SSSSSS5      [	        SSSSSS5      4[	        S SS5      [	        S SS5      4[        R                  [        R                  4/nU Hc  u  pUR                  US9n
UR                  [         R"                  S9nU R                  UR%                  U5      U
5        U R                  X5        Me     g! , (       d  f       GM  = f)!a  Test when a transition is in the far past or future.

Particularly, this is a concern if something:

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

This actually occurs "in the wild", as some time zones on Ubuntu (at
least as of 2020) have an initial transition added at ``-2**58``.
r  8r  GMTl         x  r   l            GMT0Africa/Abidjanr   iw  r  r  r   r   r   )r   rl   r   Ni  ij     +   4   ik  ;   ?B r      r     rr  )r  r   r   r  r   r  r   r   minmaxru   r   r   r   r   r   r   r   r  )r@   r  r  r  r  r  r   offset_casesdt_naiver   rl   	utc_casesnaive_dtnaive_dt_utcr  s                  r*   test_zone_very_large_timestamp,WeirdZoneTest.test_zone_very_large_timestamp  sz    	$ 78% "8D!Q/:!
   4ZZ!!"*:!; \\3\\3dB#S)dAq!3'	
 !-H!!!,B8B  fmm<  1A1AB  6::6 CB !- \\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"H!!!,B!)))>FV..r2B7R( '0# CBs   A?J		
J	c                   [        S[        [        5      n[        [        SSS5      X5      /nSnU R	                  X#5      nU R
                  R                  USS9n[        SSSUS9nU R                  S5         U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        S S S 5        [        S	US9nU R                  S
5         U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   rr  r   UTC0r   r   r   zdatetime.datetimer   zdatetime.time)r  r   r  r   r  r   r   r   r   r   r   r   r   )r@   r   r  r  r  r   rl   r  s           r*   $test_fixed_offset_phantom_transition2WeirdZoneTest.test_fixed_offset_phantom_transition#  sH   d+%htQ&:CEF  4ZZ!!"%!0dAq,\\-.RYY[#**5R\\^S]];RVVXsww/ /
 2\\/*QXXZ4Q[[]CMM:QUUWcgg. +* /. +*s   8A?F"A?F3"
F03
GNc                   / n/ n/ n/ / /n/ / /n/ / /n	Sn
SnX/nS n[        [        X5      S S9nU H  nUu  nnn[        U5       H  u  nu  nnUU   nUU   nU	U   nUb  UUs=::  a  U::  d  O  M,  UU;  a  UR                  U5        UU;  a  UR                  U5        Uc  M_  UR                  U5        UR                  UR	                  U5      5        M     M     [        U5      n[        U5      n[        U5      n[        R                  " 5       nSn[        [        US45      5       GH  nUU   nUU   nU	U   nUU   n[        5       n/ nU H{  n [        U R                  R                  5       5      n![        U R                  5      n"[        U5      n#UR                  U!U"U#45        UU R                   R#                  S5      S	-   -  nM}     [%        U5      n[        U5      n$[        U5      n%[        U5      n&UR'                  S
5        UR'                  SU-  5        UR'                  S5        UR'                  [(        R*                  " SUUUU%U$U&5      5        UR'                  [(        R*                  " SU% U 3/UQ76 5        UR'                  [(        R*                  " SU% S3/UQ76 5        U H)  n'UR'                  [(        R*                  " S/U'Q76 5        M+     UR'                  [%        U5      5        UR'                  [(        R*                  " U S3/UQ76 5        UR'                  [(        R*                  " U S3/UQ76 5        UR'                  [(        R*                  " SU S3/UQ76 5        US:  d  GMU  UR'                  S5        UR'                  UR#                  S5      5        UR'                  S5        GM     UR-                  S5        U$ )N)i   rs  )l         l            c                    [        U [        5      (       a  U $ U R                  (       a$  [        U R                  R                  5       5      nOS nXR                  U R                  4$ r-   )
isinstancetuplerr   intr  	timestampr   r   )rx   
trans_times     r*   zt_as_tuple1WeirdZoneTest.construct_zone.<locals>.zt_as_tupleG  sP    
 "e$$	}} !2!2!<!<!>?
!
 0 0"//BBr)   c                    U S   $ rD  r(   )xs    r*   <lambda>.WeirdZoneTest.construct_zone.<locals>.<lambda>V  s    !A$r)   r   )lqr   ascii       TZifs   %d                  >6l>Bz>lbbbr  r      
)sortedmap	enumerater   indexlenr   r   r  r  	bytearrayr  r   total_secondsboolr   r   encodebyteswritestructpackseek)(r@   r  r  versionisutcisstdleap_secondsoffset_liststrans_times_liststrans_idx_listsv1_rangev2_rangerangesr  rx   r  r   r   vdt_mindt_maxr  trans_times	trans_idxisutcntisstdcntleapcntzonefile
time_types	time_typeabbrstrttinfosr   utcoffisdstabbrindtypecnttimecntcharcntttinfos(                                           r*   r  WeirdZoneTest.construct_zone8  s    BxHr(((%	C S:OB683J|'0'8##FF&q//2+A.	)j2F2 /NN=1w.NN<0)&&z2$$W]]<%@A% (9 . e*u:l#::<
sGQ<()A"1oG+A.K'*I"1I  kGG!V--;;=>VZZ(g,w786==//87BB " 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 *j 	ar)   r(   )Nr  )r5   r6   r7   r8   r4  r   r  r  r  r  r  r  r  r  r9   r(   r)   r*   r  r  K  s4    F'8R44))V";H%;)z/*tr)   r  c                      \ rS rSr\rSrg)CWeirdZoneTesti  r(   Nrk  r(   r)   r*   r  r    rl  r)   r  c                     ^  \ rS rSr\rSrSrSr\	U 4S j5       r
\	S 5       rS rS rS	 rS
 rS r\	S 5       rSrU =r$ )	TZStrTesti  r   r   r   c                b   > [         TU ]  5         U R                  5         U R                  5         g r-   )rQ   r_  _populate_test_casespopulate_tzstr_header)rk   rU   s    r*   r_  TZStrTest.setUpClass  s&      "!!#r)   c                    [        5       n[        S5       H1  nUS-  nUS-  nUS-  nU[        R                  " SSSSSSS5      -  nM3     [	        U5      U l        g )Nr   r     3r  r  r   )r  r  r  r  r  _tzif_header)rk   out_s      r*   r#  TZStrTest.populate_tzstr_header  sd    k
 qA7NC4KC9C 6;;uaAq!Q77C  !:r)   c                >   [         R                  " U R                  5      nUR                  SS5        UR	                  S5        UR	                  UR                  S5      5        UR	                  S5        UR                  S5        U R                  R                  X!S9$ )z/Creates a zoneinfo file following a POSIX rule.r   r   r  r  r   )r   r   r'  r  r  r  r   r   )r@   tzstrr  s      r*   zone_from_tzstrTZStrTest.zone_from_tzstr  sw    ::d//0a 	wu||G,-wazz##H#88r)   c                F   U R                   R                  5        H  u  pU R                  US9   U R                  U5      nS S S 5        U H  u  pEnUR	                  WS9nU R                  XUS9   U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        U R                  UR                  5       UR                  5        S S S 5        M     M     g ! , (       d  f       N= f! , (       d  f       M  = f)Nr,  r   )r,  rl   r   )	r   r  r   r-  ru   r   r   r   r   )r@   r,  r  r   r  r   r)  rl   s           r*   test_tzstr_localizedTZStrTest.test_tzstr_localized  s     OO113LEE*))%0 + (-#!%%R%0\\V\D$$RYY[&--@$$R\\^V5E5EF$$RVVXvzz: ED (-	 4** EDs   D 0A?D 
D	
D c                   U R                   R                  5        GH)  u  pU R                  US9   U R                  U5      nS S S 5        U H  u  pEnX`R                  :X  a  M  XER
                  -
  R                  [        R                  S9nUR                  W5      nUR                  US9n	U R                  X5        X`R                  :X  a(  U R                  UR                  UR                  U5        OU R                  UR                  S5        U	R                  [        R                  5      nU R                  X5        M     GM,     g ! , (       d  f       GN= f)Nr0  r   r   )r   r  r   r-  GAPr   ru   r   r   r  r   FOLDrc   )
r@   r,  r  r   r  r   dt_typer  dt_actdt_exps
             r*   test_tzstr_from_utcTZStrTest.test_tzstr_from_utc  s    OO113LEE*))%0 + .3)'hh&"%5%55>>#<< ? 
  **2.!)))4  0ii'$$V[[(--J$$V[[!4  **8<<8  0- .3	 4**s   E


E	c                    / SQnU H,  nU R                  US9   U R                  U5        S S S 5        M.     g ! , (       d  f       M@  = f)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:59r0  )r   r-  )r@   tzstrsr,  s      r*   test_extreme_tzstrTZStrTest.test_extreme_tzstr
  sB    C
J EE*$$U+ +* **s	   8
A	c                    / SQnU Ha  nU R                  US9   [        R                  " U5      nU R                  [        U5         U R                  U5        S S S 5        S S S 5        Mc     g ! , (       d  f       N= f! , (       d  f       M  = f)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:100r0  )r   reescapeassertRaisesRegexr   r-  )r@   invalid_tzstrsinvalid_tzstrtzstr_regexs       r*   test_invalid_tzstrTZStrTest.test_invalid_tzstrT  st    H
T ,MM2 !ii6++JD((7 E	 32 ,
 ED	 32s#   -A>A-A>-
A;7A>>
B	c                |  ^^^^ U4S jnU R                   mU R                  mU R                  m0 mUUUUU4S j5       nUUUUU4S j5       nUUUUU4S j5       nUUUU4S j5       nUUU4S j5       nUUU4S j5       nUUU4S j5       nUUUUU4S	 j5       nUUUUU4S
 j5       nUUUUU4S j5       nTU l        g )Nc                V   > [        T5      nU " 5         [        T5      U:  d   S5       eg)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_lenr  s     r*   call,TZStrTest._populate_test_cases.<locals>.call  s+     5zHCu:(M*MM(r)   c                 t  > Sn [        S[        SS9[        5      n[        S[        SS9[        5      n[	        SSS	5      UT4[	        SSS
SS5      UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS5      UT4[	        SSSSSSS9UT4[	        SSSSSSS9UT4[	        SSSSSSS9UT4[	        SSSSS5      UT4[	        SSSSSSS9UT4[	        SSSSSSS9UT4[	        SSSSSSS9UT4[	        SSSSSSS9UT4[	        SSSSSSS9UT44TU '   g )Nz EST5EDT,M3.2.0/4:00,M11.1.0/3:00ESTr   EDTr   r  r  r  r  r  r   rc   r   r  r   r   r  r  r   r   r  r   )r,  rR  rT  r5  r4  NORMALr  s      r*   _add,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                   > Sn [        S[        [        5      n[        S[        [        5      n[        SSS5      UT4[        SSSSS	5      UT4[        SSSS
S5      UT4[        SSS5      UT4[        SSSSS	SS9UT4[        SSSSSSS9UT4[        SSSS
SSS9UT4[        SSSSS	5      UT4[        SSSS
S5      UT4[        SSSSS	SS9UT4[        SSSSSSS9UT4[        SSSS
SSS9UT44TU '   g )Nz"GMT0BST-1,M3.5.0/1:00,M10.5.0/2:00r  BSTr   r     r  r   r  r   r        r   rV  r         r  r   r  r   )r,  r  r\  r5  r4  rX  r  s      r*   rY  rZ    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                 8  > Sn [        S[        SS9[        5      n[        S[        SS9[        5      n[	        SSS	5      UT4[	        SSS
SS5      UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSS
SSSS9UT4[	        SSSS5      UT4[	        SSS	SS5      UT4[	        SSS	SSSS9UT4[	        SSS	SSSS9UT4[	        SSS	SS5      UT44TU '   g )NzAEST-10AEDT,M10.1.0/2,M4.1.0/3AESTr  r   AEDTr  r   r  r  r  r   r  rV  r   r   r     rW  )r,  rd  re  r5  r4  rX  r  s      r*   rY  rZ    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                   > Sn [        S[        [        * 5      n[        S[        [        5      n[        SSS5      UT4[        SSSSS	5      UT4[        SSSS
S5      UT4[        SSS5      UT4[        SSSSS	SS9UT4[        SSSSSSS9UT4[        SSSSSSS9UT4[        SSSS
SSS9UT4[        SSSSS	5      UT4[        SSSS
S5      UT4[        SSSSS	SS9UT4[        SSSSSSS9UT4[        SSSS
SSS9UT44TU '   g )NzIST-1GMT0,M10.5.0,M3.5.0/1r  ISTr   r  r]  r  r   r  r   r  r^  r_  r   rV  r   r`  ra  rb  )r,  r  rh  r5  rX  r  s      r*   rY  rZ    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                 T   > Sn [        SSS5      [        S[        SS95      T44TU '   g )Nz<+11>-11r   r   rB  r  r   )r   r  r   )r,  rX  r  s    r*   rY  rZ  *  s:     E T1a(uib&9:E%Lr)   c                    > Sn [        S[        SS95      n[        S[        SS9[        5      n[        SSS	5      UT4[        SS
S	5      UT44TU '   g )Nz<-04>4<-03>,M9.1.6/24,M4.1.6/24-04rU  r   -03r   rf  r   r  r  r   r  r   )r,  M04M03rX  r  s      r*   rY  rZ  7  sa     6EUIB$78CUIB$7?C $1%sF3$A&V4E%Lr)   c                   > Sn [        S[        SS9[        5      n[        SSS5      UT4[        SSS5      UT4[        SSS	S
SSS5      UT4[        SSS5      UT4[        SSS5      UT4[        SSS5      UT4[        SSS	S
SSS5      UT4[        SSS5      UT4[        SSS5      UT4[        SSS	S
SSS5      UT44
TU '   g )NzEST5EDT,0/0,J365/25rT  rU  r   r   r   r  r  r  r  r  r  r   r  i`	  rn  )r,  rT  rX  r  s     r*   rY  rZ  D  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                 &  > Sn [        S[        SS95      n[        S[        SS9[        5      n[        SSS5      UT4[        SS	S
5      UT4[        SSSSS5      UT4[        SSSSSS9UT4[        SSSSSS9UT4[        SSSS5      UT4[        SSSSS5      UT4[        SSSSSS9UT4[        SSSSSS9UT4[        SSSS5      UT4[        SSSSSSS5      UT4[        SSS5      UT4[        SS	S5      UT4[        SSSSS5      UT4[        SSSSSS9UT4[        SSSSSS9UT4[        SSSS5      UT4[        SSSSS5      UT4[        SSSSSS9UT4[        SSSSSS9UT4[        SSSS5      UT4[        SSSSSSS5      UT44TU '   g )NzAAA3BBB,J60/12,J305/12AAArm  r   BBBr   r   r      r  r  r  r  r   rV     r  r  r  r  r   r`  rn  r,  rs  rt  r5  r4  rX  r  s      r*   rY  rZ  Y  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                   > Sn [        S[        SS95      n[        S[        SS9[        5      n[        SSS	5      UT4[        SSS
SSS5      UT4[        SSS
SSS9UT4[        SSS
SSS9UT4[        SSS
S5      UT4[        SSSS5      UT4[        SSSSSS9UT4[        SSSSSS9UT4[        SSSS5      UT44	TU '   g )Nz <-03>3<-02>,M3.5.0/-2,M10.5.0/-1rl  rm  r   z-02ru  r   r  r_  rv     r     r   rV  r   r  r     rn  )r,  N03N02r5  r4  rX  r  s      r*   rY  rZ  z  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                 |  > Sn [        S[        SS95      n[        S[        SS9[        5      n[        SSS	S
S5      UT4[        SSS	S
SSS9UT4[        SSS	S
SS
S9UT4[        SSS	SS5      UT4[        SS	SS
SSS5      UT4[        SS	SS
SSSS9UT4[        SS	SS
SSS
S9UT4[        SS	SSSS5      UT44TU '   g )Nz%AAA3BBB,M3.2.0/01:30,M11.1.0/02:15:45rs  rm  r   rt  ru    r  r  r   r   r]  rV  r   r  r  ,   r  -   rn  rx  s      r*   rY  rZ    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)   )rX  r5  r4  r   )rk   rO  rY  r5  r4  rX  r  s      @@@@r*   r"  TZStrTest._populate_test_cases  s    		N xxgg		 
	6 
	 
	. 
	 
	0 
	 
	. 

	 

	 

	 

	 
	 
	( 
	 
	@ 
	 
	, 
	 
	$ r)   r(   )r5   r6   r7   r8   r4  r   rX  r5  r4  ro   r_  r#  r-  r1  r9  r>  rJ  r"  r9   rY   rZ   s   @r*   r   r     sp    FFD
C$ $ & & 9;1:H,TQ8f | |r)   r   c                      \ rS rSr\rSrg)
CTZStrTesti  r(   Nrk  r(   r)   r*   r  r    rl  r)   r  c                  |   ^  \ rS rSr\rU 4S jr\S 5       r\S 5       r	S r
S rS rS rS	 rS
 rS rS rSrU =r$ )ZoneInfoCacheTesti  c                V   > U R                   R                  5         [        TU ]  5         g r-   )r   r   rQ   rR   r   s    r*   rR   ZoneInfoCacheTest.setUp  s    

 r)   c                    [         $ r-   r   r?   s    r*   r   ZoneInfoCacheTest.zoneinfo_data  r   r)   c                0    U R                   R                  /$ r-   r   r?   s    r*   rA   ZoneInfoCacheTest.tzpath  r   r)   c                d    U R                  U R                  S5      U R                  S5      5        g )Nr-  )r  r   r?   s    r*   test_ephemeral_zones&ZoneInfoCacheTest.test_ephemeral_zones  s'    JJ,-tzz:O/P	
r)   c                j    U R                  S5      nU R                  S5      nU R                  X5        g )NAustralia/Sydney)r   r  r@   tz0r0  s      r*   test_strong_refs"ZoneInfoCacheTest.test_strong_refs  s,    jj+,jj+,cr)   c                ~    U R                  S5      nU R                   R                  S5      nU R                  X5        g )NEurope/Lisbon)r   r   rc  r  s      r*   test_no_cacheZoneInfoCacheTest.test_no_cache  s2    jj)jj!!/2"r)   c                    U R                  S5      nU R                  / 5         U R                  S5      nSSS5        U R                  UW5        g! , (       d  f       N!= f)zTest that the cache persists when tzpath has been changed.

The PEP specifies that as long as a reference exists to one zone
with a given key, the primary constructor must continue to return
the same object.
r-  N)r   rM   r  )r@   zi0zi1s      r*   test_cache_reset_tzpath)ZoneInfoCacheTest.test_cache_reset_tzpath  sN     jj./  $**23C % 	c3 %$s   A
Ac                    U R                  S5      nU R                   R                  S S9  U R                  S5      nU R                  X5        g )Nr-  	only_keys)r   r   rc  )r@   la0la1s      r*   test_clear_cache_explicit_none0ZoneInfoCacheTest.test_clear_cache_explicit_none  sC    jj./

.jj./"r)   c                   U R                  S5      nU R                  S5      nU R                   R                  S/S9  U R                  S5      nU R                  S5      nU R                  X5        U R                  X$5        g)z5Tests that you can clear a single key from the cache.r-  Europe/Dublinr  Nr   r   rc  r  )r@   r  dub0r  dub1s        r*   test_clear_cache_one_key*ZoneInfoCacheTest.test_clear_cache_one_key  so    jj./zz/*

*?)@Ajj./zz/*"d!r)   c                l   U R                  S5      nU R                  S5      nU R                  S5      nU R                   R                  SS/S9  U R                  S5      nU R                  S5      nU R                  S5      nU R                  X5        U R                  X%5        U R                  X65        g )Nr-  r  
Asia/Tokyor  r  )r@   r  r  tok0r  r  tok1s          r*   test_clear_cache_two_keys+ZoneInfoCacheTest.test_clear_cache_two_keys  s    jj./zz/*zz,'

,o> 	 	
 jj./zz/*zz,'"$d!r)   c                     " S S[         5      nU" S5      nU R                  U5        SUl         U R                  R                  SS9  g ! [         a     g f = f)Nc                  D   ^  \ rS rSrSrU 4S jr\R                  rSrU =r	$ );ZoneInfoCacheTest.test_clear_cache_refleak.<locals>.Stringyi  Tc                P   > U R                   (       d  [        e[        TU ]  U5      $ r-   )allow_comparisonsr2   rQ   r)  rF  s     r*   r)  BZoneInfoCacheTest.test_clear_cache_refleak.<locals>.Stringy.__eq__  s!    --%%w~e,,r)   r(   )
r5   r6   r7   r8   r  r)  r   r+  r9   rY   rZ   s   @r*   Stringyr    s     $- ||Hr)   r  r-  Fr  )r   r   r  r   r2   )r@   r  rv   s      r*   test_clear_cache_refleak*ZoneInfoCacheTest.test_clear_cache_refleak  s]    	$c 	$ +,

3 %	 JJ""-B"C 		s   A 
AAr(   )r5   r6   r7   r8   r4  r   rR   rX   r   rA   r  r  r  r  r  r  r  r  r9   rY   rZ   s   @r*   r  r    sb    F   + +

 # #""" r)   r  c                      \ rS rSr\rSrg)CZoneInfoCacheTesti  r(   Nrk  r(   r)   r*   r  r    rl  r)   r  c                  j   ^  \ rS rSr\rU 4S jr\S 5       r\S 5       r	S r
S rS rS rS	 rS
rU =r$ )ZoneInfoPickleTesti  c                d  > U R                   R                  5         [        R                  " 5        nUR	                  [
        R                  " U R                  5      5        U R                  UR                  5       R                  5        S S S 5        [        TU ]1  5         g ! , (       d  f       N= fr-   )r   r   rJ   rK   rL   test_supportset_zoneinfo_moduler   rN   rO   rP   rQ   rR   rS   s     r*   rR   ZoneInfoPickleTest.setUp  so    

 !!#u @ @ MNOOEMMO112 $ 		 $#s   AB!!
B/c                    [         $ r-   r   r?   s    r*   r    ZoneInfoPickleTest.zoneinfo_data#  r   r)   c                0    U R                   R                  /$ r-   r   r?   s    r*   rA   ZoneInfoPickleTest.tzpath'  r   r)   c                (   [        [        R                  S-   5       H  nU R                  US9   U R	                  S5      n[        R
                  " X!S9n[        R                  " U5      nU R                  SS9   U R                  X$5        S S S 5        [        R                  " U5      nU R                  SS9   U R                  XE5        S S S 5        S S S 5        M     g ! , (       d  f       NZ= f! , (       d  f       N,= f! , (       d  f       M  = f)Nr   protor  protocolzIs non-pickled ZoneInfotestzIs unpickled ZoneInfo)r  pickleHIGHEST_PROTOCOLr   r   dumpsloadsr  r@   r  zi_inpklzi_rtzi_rt2s         r*   test_cache_hit!ZoneInfoPickleTest.test_cache_hit+  s    622Q67EE*

?3ll59S)\\'@\AMM%/ B  c*\\'>\?MM%0 @ +* 8 BA @? +*s<   AD:C -D9C1D 
C.*D1
C?;D
D	c                   [        [        R                  S-   5       H  nU R                  US9   U R	                  S5      n[        R
                  " X!S9nAU R                  R                  5         [        R                  " U5      n[        R                  " U5      nU R                  XE5        S S S 5        M     g ! , (       d  f       M  = f)Nr   r  r  r  )	r  r  r  r   r   r  r   r  r  r  s         r*   test_cache_miss"ZoneInfoPickleTest.test_cache_miss9  s    622Q67EE*

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

&&(S)c*e, +* 8**s   A>B::
C		c                   [        [        R                  S-   5       GH  nU R                  US9   U R                  R                  S5      n[        R                  " X!S9n[        R                  " U5      nU R                  SS9   U R                  XB5        S S S 5        [        R                  " U5      nU R                  SS9   U R                  XE5        S S S 5        U R	                  S5      nU R                  SS9   U R                  XF5        S S S 5        S S S 5        GM     g ! , (       d  f       N= f! , (       d  f       Ng= f! , (       d  f       N>= f! , (       d  f       GML  = f)	Nr   r  r  r  zNot the pickled objectr  zNot a second unpickled objectzNot a cached object)	r  r  r  r   r   r   r  r  rc  )r@   r  zi_no_cacher  r  r  zi_caches          r*   r   ZoneInfoPickleTest.test_no_cacheF  s   622Q67EE*"jj11/Bll;?S)\\'?\@$$U8 A  c*\\'F\G$$U3 H  ::o6\\'<\=$$U5 > +* 8 A@ HG >= +*sT   AED&-ED7(E>EE&
D40E7
EE
EE
E)	c           	     j   Sn[        U R                  R                  U5      S5       nU R                  R	                  U5      nUR                  S5        U R                  R	                  X!S9nS S S 5        WS4WS4/nU H|  u  pg[        [        R                  S-   5       HW  nU R                  XxS9   U R                  [        R                  5         [        R                  " XhS	9  S S S 5        S S S 5        MY     M~     g ! , (       d  f       N= f! , (       d  f       N0= f! , (       d  f       M  = f)
Nr  r   r   r   zZoneInfo with keyzZoneInfo without keyr   )r   r  r  )r   r   r   r   r   r  r  r  r  r   r   PicklingErrorr  )	r@   rv   r   zi_nokeyzi_keyr   r   r   r  s	            r*   test_from_file!ZoneInfoPickleTest.test_from_fileY  s    $$$2237>!zz++A.HFF1IZZ))!)5F	 ? ()-.


 (MBv66:;\\I\C**6+?+?@R8 A DC < ( ?> A@ DCs0   AD3 D#D	(D#
D
D D##
D2c                x   [        [        R                  S-   5       GHd  nU R                  US9   SnU R	                  U5      n[        R
                  " X1S9n[        R                  " U5      nU R                  X55        [        U R                  R                  U5      S5       nU R                  R                  XbS9nS S S 5        [        R
                  " X1S9n[        R                  " U5      n	U R                  X95        U R                  [        R                  5         [        R
                  " WUS9  S S S 5        [        R
                  " X1S9n
[        R                  " U
5      nU R                  X;5        S S S 5        GMg     g ! , (       d  f       N= f! , (       d  f       Nh= f! , (       d  f       GM  = f)Nr   r  r  r  r   r   )r  r  r  r   r   r  r  r  r   r   r   r   r   r  )r@   r  rv   r   pkl_0zi_rt_0r   r   pkl_1zi_rt_1pkl_2zi_rt_2s               r*   test_pickle_after_from_file.ZoneInfoPickleTest.test_pickle_after_from_filel  s?   
 622Q67EE*%ZZ_R8 ,,u-b*$,,::3?F! JJ000<E G R8 ,,u-b*&&v';';<LL7 = R8 ,,u-b*) +* 8 GF =< +*s>   A4F)$F>A"F) F6AF)
FF)
F&"F))
F9	r(   )r5   r6   r7   r8   r4  r   rR   rX   r   rA   r  r  r  r  r  r9   rY   rZ   s   @r*   r  r    sS    F   + +1-6&9&+ +r)   r  c                      \ rS rSr\rSrg)CZoneInfoPickleTesti  r(   Nrk  r(   r)   r*   r  r    rl  r)   r  c                  8    \ rS rSrSr\r\S 5       rS r	S r
Srg)CallingConventionTesti  z8Tests for functions with restricted calling conventions.c                    [         $ r-   r   r?   s    r*   r   #CallingConventionTest.zoneinfo_data  r   r)   c                   [        U R                  R                  S5      S5       nU R                  [        5         U R
                  R                  US9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   r   )r   )r   r   r   r   r   r   r   )r@   r   s     r*   r  $CallingConventionTest.test_from_file  sa    $$$22594@A""9-

$$!$, . A@-- A@s"   A8A'A8'
A5	1A88
Bc                    U R                  [        5         U R                  R                  S/5        S S S 5        g ! , (       d  f       g = fNr   )r   r   r   r   r?   s    r*   test_clear_cache&CallingConventionTest.test_clear_cache  s0    y)JJ""E7+ *))s	   <
A
r(   N)r5   r6   r7   r8   rW   r4  r   rX   r   r  r  r9   r(   r)   r*   r  r    s&    BF -
,r)   r  c                      \ rS rSr\rSrg)CCallingConventionTesti  r(   Nrk  r(   r)   r*   r  r    rl  r)   r  c                  p    \ rS rSr\r\\R                  S 5       5       r	S r
S rS rS rS rS rS	 rS
rg)
TzPathTesti  c              #    #    Sn[        5       nUn [           [        R                  R	                  US 5      nU [        R                  U'   S v   S S S 5        X2L a  g Uc  [        R                  U	 g U[        R                  U'   g ! , (       d  f       N<= f! X2L a  f Uc  [        R                  U	 f U[        R                  U'   f = f7f)NPYTHONTZPATH)objectr   osenvironget)valuepath_varunset_env_sentinelold_envs       r*   python_tzpath_context TzPathTest.python_tzpath_context  s      "#X$	/**..48',

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

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

8$s3   C	B 8BB .C	
BB /CC	c                   S/ 4[          S3[          S3/4[          S[        R                   [          S3[          S3[          S3/4/nU Hx  u  p#U R                  U5         U R	                  US9   U R
                  R                  5         U R
                  R                  nU R                  XC5        SSS5        SSS5        Mz     g! , (       d  f       N= f! , (       d  f       M  = f)z<Tests that the environment variable works with reset_tzpath.r  z/etc/zoneinfo/a/b/cz/d/e/frA   N)	DRIVEr  pathsepr  r   r   reset_tzpathTZPATHassertSequenceEqual)r@   	new_pathsnew_path_varexpected_resultrA   s        r*   test_env_variableTzPathTest.test_env_variable  s     Hwm$%'>&?@wfRZZLv6E7&9IeWTZK[8\]
	 .7)L++L9\\\6KK,,.![[//F,,VE 7 :9 .766 :9s%   !C1AC3C
CC
C(	c           	     H   SS/[          S3S4[          S34/SS/[          S3S4[          S34/SS/[          S3SS4[          S34//nU GH  u  p#[        R                  R                  U5      nU R	                  U5         U R                  SUS	9   U R                  U R                  R                  5       nU R                  R                  5         S S S 5        U R                  WR                  S
   R                  [        5        S S S 5        U R                  R                  nU R                  SUS	9   U R                  Xc5        S S S 5        S S S 5        GM     g ! , (       d  f       N= f! , (       d  f       Nm= f! , (       d  f       N>= f! , (       d  f       GMV  = f)Npath/to/somewherer(   /usr/share/zoneinfor  ../relative/pathr  r  r  warning)r  r   filtered)r  r  r  joinr  r   assertWarnsr   InvalidTZPathWarningr  r   warningsfilename__file__r  r  )r@   r   input_pathsexpected_pathsr  wrA   s          r*    test_env_variable_relative_paths+TzPathTest.test_env_variable_relative_paths  s   #R(7-.0CE7-.0 #B'7-.0BD7-.0 8< g01'&
 7-.0

, ,6'Kzz{3H++H5\\)h\? ))$++*J*JKq002 L$$QZZ]%;%;XF @ ++\\*x\@,,VD A 65 ,6 LK @? A@ 65sT   F&E/8E	5E/.F6F F
E,(E//
E=9F 
F
F
F!	c                   SnU R                  U5         [        SS5         U R                  [        5       nSS KnS S S 5        WR
                  nS S S 5        U R                  WR                  S   R                  W5        U R                  UR                  S   R                  [        5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N~= f! , (       d  f       g = f)Nr  r   zzoneinfo._tzpathr   )r  r   r$  RuntimeWarningr   r%  rd  r&  messager   r'  r(  )r@   r  r+  r   r%  s        r*   1test_env_variable_relative_paths_warning_location<TzPathTest.test_env_variable_relative_paths_warning_location  s    &''1Z);<%%n5# 6'/'D'D$ = !!!**Q-"7"79MNQZZ]33X> 2155 =< 21s9   CCB7CAC7
CC
C	C
C'c                    U R                   R                  [         S3/S9  U R                  U R                   R                  [         S345        g )Nr  to)r   r  r  r  r  r?   s    r*   test_reset_tzpath_kwarg"TzPathTest.test_reset_tzpath_kwarg  sE      wf%5$6 7  !3!3v6F5HIr)   c           	         SSSSSS[        S5      4/nU HR  nU R                  US9   U R                  [        5         U R                  R                  US	9  S S S 5        S S S 5        MT     g ! , (       d  f       N= f! , (       d  f       Mw  = f)
Nr  )r  r  r  )r  r  r   )r  r  r  r  )r)  r4  )r   r   r   r   r   r  )r@   r   r)  s      r*    test_reset_tzpath_relative_paths+TzPathTest.test_reset_tzpath_relative_paths  s    "9!86M)*,

 &K+6&&z2KK,,,< 3 76 &22 76s"   A>A-A>-
A;7A>>
B	c                "   SSSS[        S5      4S/nU HT  nU R                  US9   U R                  [        5         U R                  R                  U5        S S S 5        S S S 5        MV     g ! , (       d  f       N= f! , (       d  f       My  = f)Nz!/etc/zoneinfo:/usr/share/zoneinfos!   /etc/zoneinfo:/usr/share/zoneinfor   )   /bytes/pathz/valid/pathr<  )r   )r  )r   r   r   r   r   r  )r@   r   	bad_values      r*   test_tzpath_type_error!TzPathTest.test_tzpath_type_error  sz    /0+n%'

 $II.&&y1KK,,Y7 2 /. $11 /.s"   A?A.A?.
A<8A??
B	c           
        [          S3[          S3/n[          S3/n[        [          S35      4nU R                  U5         U R                  R                  nS S S 5        U R                  U5         U R                  R                  nS S S 5        U R                  U5         U R                  R                  nS S S 5        U R                  UW5        U R                  UW5        U R                  [        U Vs/ s H  n[        R                  " U5      PM     sn5      W5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= fs  snf )Nz/onez/twoz/threer  )	r  r   rM   r   r  r  r  r  fspath)r@   tzpath_0tzpath_1tzpath_pathlikequery_0query_1query_pathlikeps           r*   test_tzpath_attribute TzPathTest.test_tzpath_attribute   s   gTNugTN3gV$%#ug-@$ABD  *kk((G +   *kk((G +   1![[//N 2 	  73  73  o'No		!o'N!OQ_` +* +* 21
 (Os*   D%1D6!E8 E%
D36
E
Er(   N)r5   r6   r7   r8   r4  r   staticmethodrJ   contextmanagerr  r  r,  r1  r6  r9  r>  rI  r9   r(   r)   r*   r   r     sO    F/  /(F#EJ
?J
=8ar)   r   c                      \ rS rSr\rSrg)CTzPathTesti3  r(   Nrk  r(   r)   r*   rN  rN  3  rl  r)   rN  c                  h    \ rS rSr\r\S 5       r\S 5       r	S r
S rS rS rS rS	 rS
 rS rSrg)
TestModule7  c                    [         $ r-   r   r?   s    r*   r   TestModule.zoneinfo_data:  r   r)   c                    U R                   R                  S5      n[        US5       nUR                  5       sS S S 5        $ ! , (       d  f       g = f)Nr   r   )r   r   r   read)r@   	zone_filer   s      r*   
_UTC_bytesTestModule._UTC_bytes>  s9    &&44U;	)T"a668 #""s   A
Ac                   [         R                  R                  U5      (       d  [        U S35      eUR	                  SS5      tp4U(       a2  [         R
                  " [         R                  R                  X#5      SS9  [         R                  R                  X!5      n[        US5       nUR                  U R                  5        SSS5        g! , (       d  f       g= f)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  rW  )r@   rv   tz_rootroot_dirtailzonefile_pathr   s          r*   
touch_zoneTestModule.touch_zoneD  s    
 ww~~g&&#wi/?$@AA**S!,KKW7$GW2-&!GGDOO$ '&&s   *C
Cc                    U R                  [        5         U R                  R                    S S S 5        g ! , (       d  f       g = fr-   )r   r   r   NOATTRIBUTEr?   s    r*   test_getattr_errorTestModule.test_getattr_errorT  s)    ~.KK## /..s	   6
Ac                    [        U R                  R                  5      n[        [        U R                  5      5      nX-
  nU R	                  U5        g)z?dir(self.module) should at least contain everything in __all__.N)setr   __all__dirr.  )r@   module_all_setmodule_dir_set
differences       r*   test_dir_contains_all TestModule.test_dir_contains_allX  s?    T[[001S-.#4
$r)   c                f    [        U R                  5      n[        U5      nU R                  X5        g)z5Test that there are no duplicates in dir(self.module)N)rn  r   rl  assertCountEqual)r@   
module_dirmodule_uniques      r*   test_dir_uniqueTestModule.test_dir_uniquea  s'    %
Jj8r)   c                j   U R                  U R                  R                  /5         U R                  U R                  R                  5        U R
                  R                  5       n[        U R                  R                  5      nX!-  nU R                  X#5        S S S 5        g ! , (       d  f       g = fr-   )	rM   r   rA   r/  r   r   available_timezonesrl  r   )r@   available_keyszoneinfo_keysunions       r*   test_available_timezones#TestModule.test_available_timezonesh  s      $"4"4";";!<=OOD..334![[<<>N 2 2 7 78M "2E]2 >==s   A4B$$
B2c                6   [         R                  " 5        nU R                  SU5        U R                  U/5         U R                  R                  5       nU R                  SU5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NzMars/Olympus_Mons)r!   TemporaryDirectoryre  rM   r   r{  assertIn)r@   tdr|  s      r*   "test_available_timezones_weirdzone-TestModule.test_available_timezones_weirdzonet  so    ((*bOO/4$$bT*!%!@!@!B1>B +	 +* +*	 +*s"   %B
-A9(B
9
B	B


Bc           	        1 Skn[        U5      nU Vs/ s H  nSU 3PM
     nnU Vs/ s H  nSU 3PM
     nnSU4SX$-   4SX%-   4SX%-   U-   4/n[        R                  " 5        nU H  u  p[        R                  R                  Xx5      n
[        R                  " U
5        U	 H  nU R                  X5        M     U R                  U
/5         U R                  U5         U R                  R                  5       nU R                  X5        S S S 5        S S S 5        M     S S S 5        g s  snf s  snf ! , (       d  f       N-= f! , (       d  f       M  = f! , (       d  f       g = f)N>   r   r  Europe/ParisrL  America/Santiagor  r-  America/Indiana/Indianapoliszposix/zright/	base_treebase_and_posixbase_and_right	all_trees)listr!   r  r  r   r#  mkdirre  rM   r   r   r{  r   )r@   r   r  r  
posix_tree
right_treer  r  	case_nametreera  rv   actuals                r*   test_folder_exclusions!TestModule.test_folder_exclusions}  sE   	
 N	,56IqqclI
6,56IqqclI
6 )$y56y56)0:=>	
 ((*b#(	'',,r5!COOC1   (('3i0!%!@!@!B((: 1 43 $) +* 76$ 10 43 +*sG   D*D/&A)EE!,D4	EE4
E>E
EE
E%c                j   SS1n[        U5      S/-   n[        R                  " 5        nU H  nU R                  XC5        M     U R	                  U/5         U R
                  R                  5       nU R                  XQ5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NzAmerica/New_YorkrL  
posixrules)r  r!   r  re  rM   r   r{  r   )r@   r   r  r  rv   r  s         r*   test_exclude_posixrules"TestModule.test_exclude_posixrules  s    

 H~.((*b(  $$bT*88:  2 +	 +* +*	 +*s#   -B$,BB$
B!	B$$
B2r(   N)r5   r6   r7   r8   r4  r   rX   r   r	   rW  re  ri  rr  rx  r  r  r  r  r9   r(   r)   r*   rP  rP  7  sW    F   
% $%9
3C";H3r)   rP  c                      \ rS rSr\rSrg)CTestModulerr  r(   Nrk  r(   r)   r*   r  r    rl  r)   r  c                      \ rS rSrS rSrg)	MiscTestsi  c                H    [        SS[        [        R                  5      S9  g )Nz-ca  if 1:
            import sys
            sys.modules['_datetime'] = None
            import datetime
            import zoneinfo
            tzinfo = zoneinfo.ZoneInfo('Europe/London')
            datetime.datetime(2025, 10, 26, 2, 0, tzinfo=tzinfo)
            )r  )r   r   r&   rA   r?   s    r*   test_pydatetimeMiscTests.test_pydatetime  s#     	   ]112	4r)   r(   N)r5   r6   r7   r8   r  r9   r(   r)   r*   r  r    s    4r)   r  c                  :    \ rS rSrSrS r\" S5      S 5       rSrg)ExtensionBuiltTest  aq  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                    U R                  [        [        R                  S5      5        U R	                  [        [
        R                  S5      5        g )N_weak_cache)r.  hasattrrR  r   r/  r4  r?   s    r*   test_cache_location&ExtensionBuiltTest.test_cache_location  s8     	!4!4mDE 4 4mDEr)   z$gh-117783: types may be immortalizedc                    SS K nU R                  UR                  [        R                  5      5        U R                  UR                  [
        R                  5      5        g rD  )gcr/  
is_trackedr4  r   rR  )r@   r  s     r*   test_gc_tracked"ExtensionBuiltTest.test_gc_tracked  s;    k&:&:;<j&9&9:;r)   r(   N)	r5   r6   r7   r8   rW   r  r   r  r9   r(   r)   r*   r  r    s(    F @A< B<r)   r  )frozenc                  8    \ rS rSr% S\S'   S\S'   \rS\S'   Srg)	r  i  r   r   r   r   r   r(   N)r5   r6   r7   r8   __annotations__r   r   r9   r(   r)   r*   r  r    s    KCr)   r  c                      \ rS rSr% S\S'   S\S'   S\S'   \S 5       r\S 5       r\S	 5       r\S
 5       r	\S 5       r
\S 5       rSrg)r  i  r   rr   r  r   r   c                ~    U R                   U R                  R                  -
  R                  [        R
                  S9$ )Nr   )rr   r   r   ru   r   r   r?   s    r*   r  ZoneTransition.transition_utc  s7    $"4"4">">>GG<< H 
 	
r)   c                \    U R                   R                  U R                  R                  :  $ )zWhether this introduces a foldr   r   r   r?   s    r*   rc   ZoneTransition.fold  '     !!++d.?.?.I.IIIr)   c                \    U R                   R                  U R                  R                  :  $ )zWhether this introduces a gapr  r?   s    r*   r  ZoneTransition.gap  r  r)   c                \    U R                   R                  U R                  R                  -
  $ r-   )r   r   r   r?   s    r*   deltaZoneTransition.delta  s%      **T-?-?-I-IIIr)   c                n    U R                   (       a  U R                  U R                  -   $ U R                  $ r-   rc   rr   r  r?   s    r*   r  ZoneTransition.anomaly_start  s&    99??TZZ//??"r)   c                n    U R                   (       d  U R                  U R                  -   $ U R                  $ r-   r  r?   s    r*   r  ZoneTransition.anomaly_end	  s&    yy??TZZ//??"r)   r(   N)r5   r6   r7   r8   r  rX   r  rc   r  r  r  r  r9   r(   r)   r*   r  r    s    
 

 J J J J J J # # # #r)   r  c                  6    \ rS rSrS	S jrS rS rS rS rSr	g)
r$   i  c                v    [         R                  " U5      U l        / U l        X0l        U R                  U5        g r-   )r   r    rA   r   r   _populate_tzpath)r@   source_jsonrA   r   s       r*   __init__ZoneInfoData.__init__  s,    ll6*	k*r)   c                     U R                   U-  $ r-   r  r   s     r*   r   ZoneInfoData.path_from_key  s    {{S  r)   c                    [        US5       n[        R                  " U5      nS S S 5        WS   nUR                  5        H  u  pVU R                  R                  U5        U R                  U5      nU R                  (       a  U R                  U5      nOUnU R                  U5      n	U	R                  R                  SSS9  [        U	S5       nUR                  U5        S S S 5        M     g ! , (       d  f       N= f! , (       d  f       M  = f)Nr   r   T)r[  parentsr\  )r   jsonloadr  r   r   _decode_textr   _convert_to_v1r   parentr  r  )
r@   r  r   zoneinfo_dictr   rv   r  raw_datar   destinations
             r*   r  ZoneInfoData._populate_tzpath  s    +t$ IIaLM % &f-'--/JCIIS!((/Hww**84,,S1K$$dD$Ak4(A )( 0 %$  )(s   C-C>-
C;>
D	c                    SR                  [        [        R                  U5      5      n[        R
                  " U5      n[        R                  U5      $ )Nr)   )r#  r  r   r  base64	b85decoder   
decompress)r@   contentsr  decodeds       r*   r  ZoneInfoData._decode_text/  s:    88C

H56""8,w''r)   c                   USS S:X  d   S5       e[        USS 5      nSnUS-   nUS:  d   S	5       e[        R                  " S
XU 5      u  pVpxpUS-  U	S-  -   U
-   US-  -   U-   U-   nX-  nSUSU -   nXUS-    S:X  d   S5       eU$ )Nr   r  r  zInvalid TZif data found!rf     r|  r   z-Version 1 file found: no conversion necessaryr  r  r  s   TZif z0Version 2 file not truncated at Version 2 header)r  r  unpack)r@   r  r  header_start
header_endr  r  r  r  r  r  	file_sizer(  s                r*   r  ZoneInfoData._convert_to_v15  s    !}'C)CC'hqm$!B&
!|LLL|@F84A
=7W
 aKk k 	
  	 		(1Y"77 )a-1W<	>=	>< 
r)   )r   rA   r   N)F)
r5   r6   r7   r8   r  r   r  r  r  r9   r(   r)   r*   r$   r$     s    +!((r)   r$   c                  |    \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
SrSrS	rg)
r   iR  c                >    U R                  5       R                  5       $ r-   )_get_zonedumpr   rk   s    r*   r   ZoneDumpData.transition_keysS  s      "''))r)   c                (    U R                  5       U   $ r-   )r  )rk   rv   s     r*   rs   %ZoneDumpData.load_transition_examplesW  s      "3''r)   c                x    U R                   (       d  U R                  5         U R                   R                  5       $ r-   )_FIXED_OFFSET_ZONES_populate_fixed_offsetsr  r  s    r*   r   ZoneDumpData.fixed_offset_zones[  s,    &&'')&&,,..r)   c                \    U R                   (       d  U R                  5         U R                   $ r-   )_ZONEDUMP_DATA_populate_zonedump_datar  s    r*   r  ZoneDumpData._get_zonedumpb  s#    !!'')!!!r)   c                <    S[        S[        [        5      0U l        g r  )r  r   r  r  s    r*   r  $ZoneDumpData._populate_fixed_offsetsh  s     :eT40#
r)   c                    S nS nS nS nS nS nS nS nS	 n	S
 n
U" 5       U" 5       U" 5       U" 5       U" 5       U" 5       U" 5       U" 5       U	" 5       U
" 5       S.
U l         g )Nc                 x    [        S[        SS95      n [        S[        5      n[        [	        SSS5      X5      /$ )Nr  r  r  r  r  r   r  r   r   r  r   )r  r  s     r*   _Africa_Abidjan=ZoneDumpData._populate_zonedump_data.<locals>._Africa_Abidjanp  s>    UId$;<CUD)C xa3S> r)   c                    [        S[        [        5      n [        S[        [        5      n[        S[        [        * 5      n[        S[        [        5      n[        [	        SSSS5      X5      [        [	        SSSS5      X5      [        [	        SS	S
S5      X5      [        [	        SSSS5      X5      [        [	        SSSS5      X25      [        [	        SS	SS5      X#5      /$ )Nz+00z+01i  r  ra  r   rf  rw  r     r  rv  r   r  )r  r   r  r  r   )P00_sP01_dP00_dP01_ss       r*   _Africa_Casablanca@ZoneDumpData._populate_zonedump_data.<locals>._Africa_Casablancax  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ExaA6E
 
r)   c                    [        S[        SS9[        5      n [        S[        SS9[        5      n[        S[        SS9[        5      n[        S	[        SS9[        5      n[        S
[        SS9[        5      n[	        [        SSSSSS5      X5      [	        [        SSSS5      X5      [	        [        SSSS5      X5      [	        [        SSSS5      X!5      [	        [        SSSS5      X5      [	        [        SSSS5      X45      [	        [        SSSS5      XA5      [	        [        SSSS5      X5      [	        [        SSSS5      X!5      [	        [        SSS S5      X5      [	        [        SSS!S5      X!5      /$ )"Nr  i&r  PSTir   PDTiPWTPPTr  r  r  r  r  r   i~  r  r  r  r_  i  r  i  r  r  r  r]  i  r   i	  rw  r  r  r   r   r  r  r   )r  r  r  r  r  s        r*   _America_Los_AngelesBZoneDumpData._populate_zonedump_data.<locals>._America_Los_Angeles  sX   UIf$=tDCUIB$7>CUIB$7?CUIB$7?CUIB$7?C xb"b!Q?JxaQ7BxaQ7Bxb"a8#CxaA6AxaR8#CxaQ7BxaA6Axb!Q7BxaQ7Bxb!Q7B r)   c                 *   [        S[        SS9[        5      n [        S[        SS9[        5      n[        S[        SS9[        5      n[        S[        SS9[        5      n[        S	[        S
S9[        5      n[	        [        SSS5      X5      [	        [        SSS5      X5      [	        [        SSS5      X!5      [	        [        SSS5      XC5      [	        [        SSS5      X45      [	        [        SSS5      XC5      [	        [        SSS5      X45      /$ )Nr  ir  SMTz-05irk  irl  iib  r   iv  r  |  r  i  r  r]  r  r  r  r  r  r   r  )r  r  N05N04r}  s        r*   _America_Santiago?ZoneDumpData._populate_zonedump_data.<locals>._America_Santiago  s    UIf$=tDCUIf$=tDCUIf$=tDCUIf$=tDCUIf$=uEC xa3S>xa4c?xa3S>xa4c?xb"5s@xa3S>xa3S> r)   c            
         [        S[        SS9[        5      n [        S[        SS9[        5      n[	        [        SSS5      X5      [	        [        SS	S
S5      X5      [	        [        SS	S	S5      X5      /$ )NJSTi~  r  JDT頌  i  rf  r   r  r  r   i  r  )r  r  s     r*   _Asia_Tokyo9ZoneDumpData._populate_zonedump_data.<locals>._Asia_Tokyo  sq    UIe$<dCCUIe$<eDC xa3S>xaQ7BxaA6A r)   c                    [        S[        SS9[        5      n [        S[        SS9[        5      n[        S[        SS9[        5      n[	        [        SS	S
5      X5      [	        [        SS
S
SS
5      X5      [	        [        SSSS	5      X!5      [	        [        SSS
S5      X!5      [	        [        SSSS	5      X5      [	        [        SSS
S5      X!5      [	        [        SSSS	5      X5      /$ )Nr  ič  r  rd  r  re  i  ig  r   r   }  r   r  ra  r  r  r  r  r  r  )r  rd  re  s      r*   _Australia_Sydney?ZoneDumpData._populate_zonedump_data.<locals>._Australia_Sydney  s    UIe$<dCCfi&>EDfi&>FD xa3S?xaAq94FxaQ7DxaA6Cxb!Q7DxaA6Cxb!Q7D r)   c                    [        S[        SS9[        5      n [        S[        SS9[        5      n[        S[        SS9[        5      n[        S[        [        5      n[        S	[        [        5      n[        S[        [        * 5      n[        S[        [        5      n[	        [        S
SSS5      X5      [	        [        SSSS5      X5      [	        [        SSSS5      X#5      [	        [        SSSS5      X45      [	        [        SSSS5      XV5      [	        [        SSSS5      Xe5      [	        [        SSSS5      XV5      [	        [        SSSS5      Xe5      /$ )Nr  i$r  DMTirh  i  r  r\  iX  r  r   r   r  rf  rz  r  r   r  r  r  i  r_  r]  i	  r^  r  )r  r  IST_0GMT_0r\  GMT_1IST_1s          r*   _Europe_Dublin<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Dublin  s)   UIe$<dCCUIe$<dCCui&=uEEudD1EUE51CudUF3EueT2E xaA6AxaQ7Dxb!Q7FxaA6CxaQ7Fxb"a8%GxaQ7Fxb"a8%G	 	r)   c                    [        S[        [        5      n [        S[        [        5      n[        S[        [        5      n[        S[        SS9[        5      n[	        [        SSS	S
5      X5      [	        [        SSSS5      X5      [	        [        SSSS5      X#5      [	        [        SSSS5      X25      [	        [        SSSS5      X!5      [	        [        SSSS5      X5      /$ )NWETWESTCETCESTi   r  i  r  r`  r   r  r_  r   i  rv  r^  r  r  r  )r  r   r  r   r  r   )r%  r&  r'  r(  s       r*   _Europe_Lisbon<ZoneDumpData._populate_zonedump_data.<locals>._Europe_Lisbon  s    UD$/CfeU3DUE40Cfi&=uED xaQ7CxaQ7CxaQ7CxaQ7CxaQ7Cxb"a8$D r)   c                 n   [        S[        SS9[        5      n [        S[        [        5      n[        S[        [        5      n[	        [        SSS5      X5      [	        [        S	S
SS5      X5      [	        [        S	SSS5      X!5      [	        [        SS
SS5      X5      [	        [        SSSS5      X!5      /$ )Nr  ir  r  r\  rQ  r  r   i  r  r_  r  r]  r   i  r`  ra  r  )r  r  r\  s      r*   _Europe_London<ZoneDumpData._populate_zonedump_data.<locals>._Europe_London  s    UIc$:DACUD$/CUE51C xb!4c?xaQ7Bxb"a8#CxaQ7Bxb"a8#C r)   c            	     J   [        S[        SS9[        5      n [        S[        SS9[        5      n[        S[        SS9[        5      n[        S[        S	S9[        5      n[        [	        S
SS5      X5      [        [	        SSS5      X5      [        [	        SSS5      X#5      /$ )Nr  ilr  z-1040i jz-10i`sz+14i  im  r   i  r  r  r  r  r  )r  N1040N10P14s       r*   _Pacific_KiritimatiAZoneDumpData._populate_zonedump_data.<locals>._Pacific_Kiritimati  s    UIf$=tDCw	&(A4HEUIf$=tDCUIe$<dCC xa3S@xb!4eAxb"5s@	 r)   )
r  zAfrica/Casablancar-  r  r  r  r  r  rL  zPacific/Kiritimati)r  )rk   r  r  r	  r  r  r  r"  r)  r,  r2  s              r*   r  $ZoneDumpData._populate_zonedump_datan  s{    		$	0	"			(			 ./!3!5#7#9 1 3 1 3%-+-+-+-"5"7
r)   Nr(   )r5   r6   r7   r8   ro   r   rs   r   r  r  r  r  r  r9   r(   r)   r*   r   r   R  s    * * ( ( / / " "
 
 

 i
 i
V Nr)   r   __main__)f
__future__r   r  rJ   rt   importlib.metadata	importlibr   r  r  r   r  rD  r.   r  r!   rS  r   r   r   r   r   	functoolsr	   test.supportr
   r   test.support.os_helperr   test.test_zoneinfor   r  test.test_zoneinfo._supportr   r   r   test.support.import_helperr   r   test.support.script_helperr   r   get_modulesr4  rR  metadataHAS_TZDATA_PKGPackageNotFoundErrorr&   r'   r#   r    r(  r  DATA_DIRr%   r   
splitdriver  r   r  r+   r0   	Exceptionr2   r<   r\   r}   r6  rV  rX  rZ  rj  rn  rz  rT  r|  r  r  r  r   r  r  r  r  r  r  r  r   rN  rP  r  TestCaser  r  	dataclassr  r  r$   r   r5   mainr(   r)   r*   <module>rJ     sr   "     	  	   	     > > % C + 7 W W A 7V&224 Z)N  <<!((61//
4 # |M	) 	 @ :n$?$4 n$b	B-L B-J	#8, 		$9= 	3< 3*0 \ $n  
N#, ##* 
N; a$ aH] q  qh e)9 eP* o+*: o+d, ,, ,&2 La"2 La^* x3! x3v* 4!! 4(<** <. d#  $ d#%# %# $%#P> >BI IX zMMO {G .. Ns   L	 	L)(L)