+
    ¾¾jy@  ã                   óª  € R t ^ RIt^ RIHtHtHt ^ RIHt ^ RIt^ RIH	t	 ^ RI
HtHtHtHt ^ RIHtHt ]P$                  P'                  R. R:O4      tR R lt]R 4       t]R 4       t]R 4       tR tR tR t]R 4       t]P$                  P'                  R;. R	]! R^^4      R3NR	]! R^^4      R3NR	]! R^^^^
4      R3NR	]! R^^^^"4      R3NR	]! R^^^^;^;4      R3NR	]! R^^4      R3NR	]! R^^^ ^4      R3NR	]! R^^^ ^"4      R3NR	]! R^^^^ 4      R3NR	]! R^^^^4      R3NR]! R^^4      R3NR]! R^^^ ^ 4      R3NR]! R^^^^ 4      R3NR]! R^^^^ 4      R3NR]! R^^^^;^;4      R3NR]! R^^^^ 4      R3NR]! R^^^^ ^4      R3NR]! R^^^^ 4      R3NR]! R^
^^ ^ 4      R3NR]! R^
^^^ 4      R3NR]! R^
^^^ 4      R3NR]! R^
^^^4      R3NR]! R^
^^^;^;4      R3NR]! R^
^^^ 4      R3NR]! R^
^^^ ^4      R3NR]! R^
^^^ 4      R3NR
]! R^^4      R3NR
]! R^^^ ^ 4      R3NR
]! R^^^^ 4      R3NR
]! R^^^^;^;4      R3NR
]! R^^^^ ^4      R3NR
]! R^^^^ 4      R3NR
]! R^^	^^ 4      R3NR
]! R^^	^^;^;4      R3NR
]! R^^	^^ 4      R3NR
]! R^^	^^ 4      R3NR
]! R^^	^^^4      R3NR
]! R^^	^^ 4      R3N4      R  4       t]P$                  P'                  R!. R<O4      R" 4       tR# R$ lt. R=Ot ]P$                  P'                  R%] 4      R& 4       t!R' t"R( t#R) t$R* t%R+ t&R, t'R- t(]P$                  P'                  RR
R..4      R/ 4       t)R0 t*]P$                  P'                  R1. R>O4      R2 4       t+R3 t,R4 t-R5 t.R6 t/]P$                  P'                  R]P`                  ! 4       R7R80,
          4      R9 4       t1R# )?aR  Generate VTIMEZONE components from actual timezone information.

When we generate VTIMEZONE from actual tzinfo instances of
- dateutil
- zoneinfo
- pytz

Then, we cannot assume that the future information stays the same but
we should be able to create tests that work for the past.

See https://github.com/collective/icalendar/issues/722
N)ÚdateÚdatetimeÚ	timedelta)Úfindall)Úgettz)ÚCalendarÚ	ComponentÚEventÚTimezone)Útzid_from_tzinfoÚtzids_from_tzinfoÚtzidúEurope/BerlinúAsia/SingaporeúAmerica/New_Yorkc                ó0   € V ^8„  d   QhR\         R\         /# )é   Úc1Úc2)r   )Úformats   "Úp/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/icalendar/tests/test_issue_722_generate_vtimezone.pyÚ__annotate__r   "   s   € ÷ ,ñ ,¤	ð ,¬yñ ,ó    c                óZ  a	€ ^ o	V P                  4       P                  4       P                  4       pVP                  4       P                  4       P                  4       p\        V	3R lV 4       4      p^ p\	        W#RR7       F•  w  rg\        V4      ^ 8„  ;'       g    \        V4      ^ 8„  p\        VR,          V,           RV\        V4      ,
          ,          VR,          V,           RV\        V4      ,
          ,          Wg8w  d   RMR4       WVV8g  ,          pK—  	  V'       d   Q V R	24       hR
# )z!Print the diff of two components.c              3   ó^   <"  € T F"  p\        V4      S8:  g   K  \        V4      x € K$  	  R # 5i©N)Úlen)Ú.0ÚlÚMLs   & €r   Ú	<genexpr>Ú*assert_components_equal.<locals>.<genexpr>'   s#   øé € Ð2™c˜¤S¨£V¨r¡\ŒfŒc�!�fˆf›cùs   ƒ-š-F)Ústrictz  Ú z
->z	diff!Ú z lines differN)Úto_icalÚdecodeÚ
splitlinesÚmaxÚzipr   Úprint)
r   r   Úll1Úll2ÚpadÚdiffÚl1Úl2Úar   s
   &&       @r   Úassert_components_equalr2   "   sô   ø€ à	€BØ
�*‰*‹,×
Ñ
Ó
×
*Ñ
*Ó
,€CØ
�*‰*‹,×
Ñ
Ó
×
*Ñ
*Ó
,€CÜ
Ô2™cÓ2Ó
2€CØ€DÜ�c u×-‰ˆÜ�‹G�b‰L×(Ð(œC ›G b™LˆÜØ��H�r�MØ�3œ˜R›•=Õ!Ø��J˜�OØ�3œ˜R›•=Õ!Øœ‰I rô	
ð 	�b‘ÕŠñ .÷ Ð+˜�v˜]Ð+Ó+ˆ8‰tr   c                ó¦  € V P                  4       '       d   \        P                  ! R4       V P                  V4      pVf   Q h\        P
                  ! V4      pRVR&   VP                  4       p\        P
                  ! VR4      pVP                  4       p\        P
                  ! VR4      p\        W54       \        WW4       ^\        VP                  VP                  ,           4      u;8:  d	   ^8:  g   Q h Q h^\        VP                  VP                  ,           4      u;8:  d	   ^8:  g   Q h Q h\        V4      \        V4      8X  g   Q hVP                  4       P                  4       VP                  4       P                  4       8X  g   Q hVP                  VP                  8X  g   Q hVP                  VP                  8X  g   Q hW58X  g   Q hR# )zitzinfo -> VTIMEZONE -> tzinfo -> VTIMEZONE

We can assume that both generated VTIMEZONEs are equivalent.
zGpytz will not converge on the first run. This is problematic. PYTZ-TODONztest-generatedÚTZID)Ú	uses_pytzÚpytestÚskipÚtimezoner
   Úfrom_tzinfoÚto_tzr2   r   ÚstandardÚdaylightÚdictr%   r&   )Útzpr   Útzinfo1Ú
generated1Útzinfo2Ú
generated2Útzinfo3Ú
generated3s   &&      r   Útest_conversion_convergesrE   6   s•  € ð ‡}�}‡‚Ü�ŠØUô	
ð �l‰l˜4Ó €GØÒÐÐÜ×%Ò% gÓ.€Jàð ˆvÑð ×ÑÓ €GÜ×%Ò% gÐ/?Ó@€JØ×ÑÓ €GÜ×%Ò% gÐ/?Ó@€Jô ˜JÔ3Ü˜JÔ3Ø”�J×'Ñ'¨*×*=Ñ*=Õ=Ó>ÖCÀ!ÔCÐCÑCÐCÐCØ”�J×'Ñ'¨*×*=Ñ*=Õ=Ó>ÖCÀ!ÔCÐCÑCÐCÐCÜ�
Óœt JÓ/Ô/Ð/Ð/Ø×ÑÓ×&Ñ&Ó(¨J×,>Ñ,>Ó,@×,GÑ,GÓ,IÔIÐIÐIØ×Ñ *×"5Ñ"5Ô5Ð5Ð5Ø×Ñ *×"5Ñ"5Ô5Ð5Ð5ØÔ#Ð#Ò#r   c           	     óØ   € \         P                  ! W\        R^^4      R7      pVP                  4        \         P                  ! W\        R^^4      R7      p\	        W#4       W#8X  g   Q hR# )züWe want to make sure that we get the same info for all timezone implementations.

We assume that
- the timezone implementations have the same info within the days we test
- the timezone transitions times do not change because they are before last_date
éè  )Ú	last_dateN)r
   Ú	from_tzidr   Úuse_zoneinfor2   )r   r>   Útz1Útz2s   &&  r   Ú both_tzps_generate_the_same_inforM   W   sX   € ô ×
Ò
˜T´$°t¸QÀÓ2BÔ
C€CØ×ÑÔÜ
×
Ò
˜T´$°t¸QÀÓ2BÔ
C€CÜ˜CÔ%ØŒ:ÐŠ:r   c                óp   € \         P                  ! VP                  V 4      4      pVR,          V 8X  g   Q hR# )zCheck the TZID.r4   N)r
   r9   r8   )r   r>   Útzs   && r   Útest_tzid_matchesrP   g   s/   € ô 
×	Ò	˜cŸl™l¨4Ó0Ó	1€BØˆf�:˜ÔÐÒr   c                ób  € \         P                  ! R4      pVP                  . 8X  g   Q h\        VP                  4      ^8X  g   Q hVP                  ^ ,          pVR,          P
                  \        ^ 4      8X  g   Q hVR,          P
                  \        ^ 4      8X  g   Q hVR,          R8X  g   Q hR# )z1We do not need to convert UTC but it should work.ÚUTCÚTZOFFSETFROMÚ
TZOFFSETTOÚTZNAMEN)r
   rI   r<   r   r;   Útdr   )r>   Úutcr;   s   &  r   Útest_do_not_convert_utcrX   n   s•   € ä
×
Ò
˜UÓ
#€CØ�<‰<˜2ÔÐÐÜˆs�|‰|Ó Ô!Ð!Ð!Ø�|‰|˜A�€HØ�NÕ#×&Ñ&¬)°A«,Ô6Ð6Ð6Ø�LÕ!×$Ñ$¬	°!«Ô4Ð4Ð4Ø�HÕ Ô&Ð&Ò&r   c                óN  € \         P                  ! R4      pVP                   Fk  p\        VP                  VR,          VR,          P
                  VR,          P
                  4       \        VP                  4       P                  4       4       Km  	  \        VP                  4      ^8X  g   Q h\        VP                  4      R
9   g   Q R4       hVP                  R,          pVP                  R,          pVR,          R8X  g   Q hVR,          R8X  g   Q hVR,          P
                  \        ^R7      8X  g   Q hVR,          P
                  \        ^R7      8X  g   Q hVR,          P
                  \        ^R7      8X  g   Q hVR,          P
                  \        ^R7      8X  g   Q hR	# )z+Test the Europe/Berlin timezone conversion.r   rU   rS   rT   zWe start in winterÚCESTÚCET)ÚhoursN)é   r   éÿÿÿÿ)r
   rI   r;   r*   ÚnamerV   r%   r&   r   r<   r   )r>   rO   ÚxÚdstÚstas   &    r   Útest_berlin_timerc   y   sN  € ä	×	Ò	˜OÓ	,€Bà�[Œ[ˆÜˆa�f‰f�a˜•k 1 ^Õ#4×#7Ñ#7¸¸<½×9KÑ9KÔLÜˆa�i‰i‹k× Ñ Ó"Ö#ñ ô ˆr�{‰{Ó˜qÔ Ð Ð Üˆr�{‰{Ó˜vÔ%Ð;Ð';Ó;Ð%Ø
�+‰+�b�/€CØ
�+‰+�b�/€CØˆx�=˜FÔ"Ð"Ð"Øˆx�=˜EÔ!Ð!Ð!Øˆ~Õ×!Ñ!¤Y°QÔ%7Ô7Ð7Ð7Øˆ~Õ×!Ñ!¤Y°QÔ%7Ô7Ð7Ð7Øˆ|Õ×Ñ¤9°1Ô#5Ô5Ð5Ð5Øˆ|Õ×Ñ¤9°1Ô#5Ô5Ð5Ò5r   c                  ó,  aa€ \        R ^^4      o\        R^^4      oVV3R lp \        P                  ! RSSR7      pVP                  VP                  ,            F6  pV ! VP
                  4       VP                  R. 4       F  pV ! V4       K  	  K8  	  R# )iç  rG   c                 ó0   <€ ST u;8:  d	   S8:  g   Q h Q hR # r   © )ÚdtÚ
first_daterH   s   &€€r   ÚcheckÚ(test_range_is_not_crossed.<locals>.check�   s   ø€ Ø˜RÖ, 9Ô,Ð,Ñ,Ð,Ò,r   r   )rH   rh   ÚRDATEN)r   r
   rI   r;   r<   ÚDTSTARTÚget)ri   rO   ÚsubÚrdaterh   rH   s       @@r   Útest_range_is_not_crossedrp   Œ   s|   ù€ Ü˜$  1Ó%€JÜ˜˜q !Ó$€Iö-ô 
×	Ò	˜O°yÈZÔ	X€BØ�{‰{˜RŸ[™[×(Ð(ˆÙˆc�k‰kÔØ—W‘W˜W bÖ)ˆEÙ�%ŽLó *ó )r   c                óÆ   € VP                  V 4      pVf   Q h\        P                  ! V4      pVP                  4       p\	        V4      \	        V4      8X  g   Q hW$8X  g   Q hR# )zRWhen we get the timezone again, usually, we should use the
one of the library/tzp.N)r8   r
   r9   r:   Útype)r   r>   r?   r@   rA   s   &&   r   Útest_use_the_original_timezoners   š   s^   € ð �l‰l˜4Ó €GØÒÐÐÜ×%Ò% gÓ.€JØ×ÑÓ €GÜ�‹=œD ›MÔ)Ð)Ð)ØÔÐÒr   Útznamei²  z+0730i½  i¾  z+08r[   rG   rZ   ÚESTÚEDTié  c                óp  € V RV RV R2pV P                  W!4      p\        P                  ! V P                  V4      4      pVP	                  V RR7      pVP                  VR7      p\        V4       V P                  4       '       d¡   VP                  V4      pV\        R^
^^^ 4      \        R^^^^;^;4      \        R^^^^ 4      \        R^^^ ^ 4      \        R^
^^^;^;4      \        R^
^^^4      \        R^
^^^ 4      \        R^
^^^ 4      39   d   \        P                  ! R4       VP                  4       VP                  4       u;8X  d   V8X  g   Q V4       h Q V4       hVP                  4       VP                  4       8X  g   Q V4       hVP                  4       VP                  4       8X  g   Q V4       hR	# )
z†We should make sure than the datetimes with the generated timezones
work as expected: They have the right UTC offset, dst and tzname.
z: z (expected in Ú)F)Úlookup_tzid©ÚtzinforG   z(We do not know how to do this. PYTZ-TODON)Úlocalizer
   r9   r8   r:   Úreplacer*   r5   Ú	normalizer   r6   r7   rt   ra   Ú	utcoffset)	r>   r   rg   rt   ÚmessageÚexpected_dtÚ	componentÚgenerated_tzinfoÚgenerated_dts	   &&&&     r   Ú,test_check_datetimes_around_transition_timesr…   ¦   s©  € ðh ��b˜˜˜N¨6¨(°!Ð4€GØ—,‘,˜rÓ(€KÜ×$Ò$ S§\¡\°$Ó%7Ó8€IØ —‘ s¸�Ó>ÐØ—:‘:Ð%5�:Ó6€LÜ	Ð
ÔØ
‡}�}‡‚à'×1Ñ1°,Ó?ˆØÜ�T˜2˜r 1 aÓ(Ü�T˜2˜q ! R¨Ó,Ü�T˜2˜q ! QÓ'Ü�T˜2˜q ! QÓ'Ü�T˜2˜r 1 b¨"Ó-Ü�T˜2˜r 1 bÓ)Ü�T˜2˜r 1 aÓ(Ü�T˜2˜r 1 aÓ(ð	
ô 	
ô �KŠKÐBÔCØ×ÑÓ  K×$6Ñ$6Ó$8ÖB¸FÔBÐKÀGÓKÑBÐKÀGÓKÐBØ×ÑÓ §¡Ó!2Ô2Ð;°GÓ;Ð2Ø×!Ñ!Ó# {×'<Ñ'<Ó'>Ô>ÐGÀÓGÒ>r   Úuidc                óÄ   € V P                   pVP                  V,          p\        VR,          4      pVP                  P	                  4       pWe8X  g   Q VR,          4       hR# )aÙ  When going from Daylight Saving Time to Standard Time, times can be ambiguous.
For example, at 3:00 AM, the time falls back to 2:00 AM, repeating a full hour of times from 2:00 AM to 3:00 AM on the same date.

By the RFC 5545, we cannot accommodate this case. All datetimes should
be BEFORE the transition if ambiguous. However, dateutil can
create a timezone that allows the event to be after this ambiguous time span, of course.

Each event has its timezone saved in it.
zX-TZNAMEÚSUMMARYN)Ú'issue_722_timezone_transition_ambiguityÚeventsÚstrÚstartrt   )Ú	calendarsr>   r†   ÚcalÚeventÚexpected_tznameÚactual_tznames   &&&    r   Ú3test_dateutil_timezone_when_time_is_going_backwardsr’   ó   sS   € ð ×EÑE€CØ—:‘:˜c•?€EÜ˜% 
Õ+Ó,€OØ—K‘K×&Ñ&Ó(€MØÔ+Ð=¨U°9Õ-=Ó=Ò+r   c                ó<   € V ^8„  d   QhR\         R\        R\         /# )r   ÚqueryrŽ   Úreturn)r‹   r   )r   s   "r   r   r     s!   € ÷ $ñ $”cð $¤ð $¬Sñ $r   c                ót   €  \        V RV/4      p\        T4      #   \         d   p\        T 4      ThRp?ii ; i)zThe tzid from the query.rŽ   N)ÚevalÚ	ExceptionÚ
ValueErrorr   )r”   rŽ   r{   Úes   &&  r   Ú
query_tzidr›     sC   € ð'Ü�e˜e S˜\Ó*ˆô ˜FÓ#Ð#øô ô 'Ü˜Ó QÐ&ûð'ús   ‚ ›7¦2²7r”   c                ód   € V P                   p\        W4      pVP                  4       pW49   g   Q hR# )z*Add the missing timezones to the calendar.N)Úissue_722_missing_timezonesr›   Úget_missing_tzids)r�   r”   rŽ   r   Útzss   &&   r   Ú%test_add_missing_timezones_to_exampler      s1   € ð ×9Ñ9€CÜ�eÓ!€DØ
×
Ñ
Ó
!€CØŒ;ÐŠ;r   c                óÜ   € V P                   p\        4       p\         F,  p\        W14      p\	        VRV4       VP                  V4       K.  	  \        V4      \        \        4      8X  g   Q hR# )zGWe make sure each query tests a unique place to find for the algorithm.z->N)r�   ÚsetÚqueriesr›   r*   Úaddr   )r�   rŽ   Útzidsr”   r   s   &    r   Útest_queries_yield_unique_tzidsr¦   %  sW   € à
×
/Ñ
/€CÜ‹E€EßˆÜ˜%Ó%ˆÜˆe�T˜4Ô Ø�	‰	�$Žñ ô ˆu‹:œœW›Ô%Ð%Ò%r   c                óü   € V P                   pVP                  P                  4       p\        \	        RV4      4      pVP                  4       V8X  g   Q R4       h\        V4      \        \        4      8X  g   Q R4       hR# )z)Make sure all tzids are actually queried.zTZID=([a-zA-Z_/+-]+)z&We find all tzids and they are unique.zWe query all the tzids.N)r�   Úraw_icsr&   r¢   r   Úget_used_tzidsr   r£   )r�   rŽ   ÚrawÚidss   &   r   Ú"test_we_do_not_miss_to_add_a_queryr¬   0  sj   € à
×
/Ñ
/€CØ
�+‰+×
Ñ
Ó
€CÜ
ŒgÐ,¨cÓ2Ó
3€CØ×ÑÓ 3Ô&ÐPÐ(PÓPÐ&Üˆs‹8”sœ7“|Ô#Ð>Ð%>Ó>Ò#r   c                óz   € V P                   pRVP                  4       9   g   Q hRVP                  4       9   g   Q hR# )z6If we have an unknown tzid with no timezone component.ÚCUSTOM_tzidN)Ú"issue_722_missing_VTIMEZONE_customr©   rž   ©r�   rŽ   s   & r   Útest_unknown_tzidr±   9  s;   € à
×
6Ñ
6€CØ˜C×.Ñ.Ó0Ô0Ð0Ð0Ø˜C×1Ñ1Ó3Ô3Ð3Ò3r   c                óz   € V P                   pRVP                  4       9   g   Q hRVP                  4       9  g   Q hR# )z3Check the custom timezone component is not missing.úcustom_America/New_YorkN)Úamerica_new_yorkr©   rž   r°   s   & r   Ú&test_custom_timezone_is_found_and_usedrµ   @  s;   € à
×
$Ñ
$€CØ$¨×(:Ñ(:Ó(<Ô<Ð<Ð<Ø$¨C×,AÑ,AÓ,CÔCÐCÒCr   c                 óX   € \        4       p V P                  4       \        4       8X  g   Q hR# )z"Check that no timezone is missing.N)r   rž   r¢   )rŽ   s    r   Útest_not_missing_anythingr·   G  s"   € ä
‹*€CØ× Ñ Ó"¤c£eÔ+Ð+Ò+r   c                óz   € V P                   pRVP                  4       9  g   Q hRVP                  4       9  g   Q hR# )z UTC should not be found missing.rR   N)r�   rž   r©   r°   s   & r   Útest_utc_is_not_missingr¹   M  s;   € à
×
/Ñ
/€CØ˜×-Ñ-Ó/Ô/Ð/Ð/Ø˜×*Ñ*Ó,Ô,Ð,Ò,r   c                ó(  € V P                   pVP                  P                  VP                  ^ ,          4       VP	                  4       R08X  g   Q hR\        VP                  ^ ,          P                  P                  P                  4      9   g   Q hR# )z{dateutil is an example of a timezone that has no tzid.

In this test we make sure that the timezone is said to be missing.
r³   ÚdateutilN)
r´   ÚsubcomponentsÚremoveÚ	timezonesrž   ÚreprrŠ   rŒ   r{   Ú	__class__)r�   Úno_pytzrŽ   s   && r   Ú/test_dateutil_timezone_is_not_found_with_tznamerÂ   T  st   € ð
 ×.Ñ.€CØ×Ñ×Ñ˜SŸ]™]¨1Õ-Ô.Ø× Ñ Ó"Ð'@Ð&AÔAÐAÐAØœ˜cŸj™j¨�m×1Ñ1×8Ñ8×BÑBÓCÔCÐCÒCr   zArctic/Longyearbyenc                óh  € \        4       p\        4       p\        R^^\        V 4      R7      Vn        \        \        VP                  P                  4      4       VP                  V4       VP                  4       V 08X  g   Q hVP                  4        VP                  4       \        4       8X  g   Q hR# )z¸dateutil is an example of a timezone that has no tzid.

In this test we make sure that the timezone is matched by its
tzname() in the timezone in the STANDARD and DAYLIGHT components.
rG   rz   N)r   r	   r   r   rŒ   r*   Údirr{   Úadd_componentrž   Úadd_missing_timezonesr¢   )rt   rŽ   r�   s   &  r   Ú-test_dateutil_timezone_is_matched_with_tznamerÇ   _  s‹   € ô ‹*€CÜ‹G€EÜ˜4  R´°f³Ô>€E„KÜ	Œ#ˆe�k‰k× Ñ Ó
!Ô"Ø×Ñ�eÔØ× Ñ Ó" v hÔ.Ð.Ð.Ø×ÑÔØ× Ñ Ó"¤c£eÔ+Ð+Ò+r   c                ó   € R# )zhWe find and add a dateutil timezone.

This is important as we use those in the zoneinfo implementation.
Nrf   )r�   s   &r   Ú$test_dateutil_timezone_is_also_addedrÉ   q  s   ‚ r   Úcalendarc                óþ   € W,          pVP                   R,          p\        4       VP                  4       8X  g   Q hVP                  4        \        4       VP                  4       8X  g   Q hVP                   V8X  g   Q hR# )z4Check that these calendars have no timezone missing.:NNNN)r¾   r¢   rž   rÆ   )r�   rÊ   rŽ   r¾   s   &&  r   Útest_timezone_is_not_missingrÌ   x  sj   € ð Õ'€CØ—‘˜aÕ €IÜ‹5�C×)Ñ)Ó+Ô+Ð+Ð+Ø×ÑÔÜ‹5�C×)Ñ)Ó+Ô+Ð+Ð+Ø�=‰=˜IÔ%Ð%Ò%r   c                ó  € V P                   p\        VP                  4      ^ 8X  g   Q hVP                  4        \        VP                  4      \        \        4      8X  g   Q R4       h\        VP                  4       4      ^ 8X  g   Q hR# )zAdd all timezones specified.zall timezones are knownN)r�   r   r¾   rÆ   r£   rž   r°   s   & r   Ú test_add_missing_known_timezonesrÎ   ‹  sm   € à×9Ñ9€CÜˆs�}‰}Ó Ô"Ð"Ð"Ø×ÑÔÜˆs�}‰}Ó¤¤W£Ô-ÐHÐ/HÓHÐ-Üˆs×$Ñ$Ó&Ó'¨1Ô,Ð,Ò,r   c                ó  € V P                   p\        VP                  4      ^ 8X  g   Q hVP                  4       R08X  g   Q hVP	                  4        VP                  . 8X  g   Q R4       hVP                  4       R08X  g   Q hR# )z(I cannot add a timezone that is unknown.r®   zwe cannot add this timezoneN)r¯   r   r¾   rž   rÆ   r°   s   & r   Ú test_cannot_add_unknown_timezonerÐ   ”  sz   € à×@Ñ@€CÜˆs�}‰}Ó Ô"Ð"Ð"Ø× Ñ Ó" } oÔ5Ð5Ð5Ø×ÑÔØ�=‰=˜BÔÐ=Ð =Ó=ÐØ× Ñ Ó" } oÔ5Ð5Ò5r   c                  ó°   € \         P                  ! \        4      ;_uu_ 4        \        P                  ! R 4       RRR4       R#   + '       g   i     R# ; i)zinvalid/tzidN)r6   Úraisesr™   r
   rI   rf   r   r   Ú2test_cannot_create_a_timezone_from_an_invalid_tzidrÓ   ž  s.   € Ü	�Š”z×	"Õ	"Ü×Ò˜>Ô*÷ 
#×	"×	"Ò	"ús   £AÁA	c                 ó2   € \         P                  ! R4       R# )zœWhen we add the timezones, we should check the calendar to see
if all dates really occur in the span we use.

We should also consider a huge default range.
ÚtodoN)r6   r7   rf   r   r   Ú*test_dates_before_and_after_are_consideredrÖ   £  s   € ô ‡K‚K�Ör   ÚFactoryÚ	localtimec                óL   € \        V 4      pVe   V \        V4      9   g   Q hR# R# )zpdateutil and others were badly supported.

But if we know their shortcodes, we should be able to identify them.
N)r   r   )r   rO   s   & r   Ú'test_we_can_identify_dateutil_timezonesrÚ   ¬  s*   € ô 
ˆt‹€BØŠ:˜Ô!2°2Ó!6Ô6Ð6Ð6Ñ6‰:r   )r   r   r   )r   rg   rt   )é    r]   r   é   )zcal.events[0].start.tzinfozcal.events[0].end.tzinfozcal.todos[0].end.tzinfoz.cal.events[0].get('RDATE').dts[0].dt[0].tzinfoz,cal.events[1].get('RECURRENCE-ID').dt.tzinfoz.cal.events[2].get('RDATE')[0].dts[0].dt.tzinfoz.cal.events[2].get('RDATE')[1].dts[0].dt.tzinfo)Úexampler´   Útimezone_same_startÚperiod_with_timezone)2Ú__doc__Úzoneinfor   r   r   Úrer   r6   Údateutil.tzr   Ú	icalendarr   r   r	   r
   Úicalendar.timezoner   r   ÚmarkÚparametrizer¥   r2   rE   rM   rP   rX   rc   rp   rs   r…   r’   r›   r£   r    r¦   r¬   r±   rµ   r·   r¹   rÂ   rÇ   rÉ   rÌ   rÎ   rÐ   rÓ   rÖ   Úavailable_timezonesrÚ   rf   r   r   Ú<module>ré      s  ðñó ß .Ñ .Ý ã Ý ç :Ó :ß Bà�‰×ÑØ
òó	€õ,ð( ñ$ó ð$ð@ ñó ðð ñó ðò'ò6ò&ð ñó ðð ‡�×ÑØð,Ø	™8 D¨!¨QÓ/°Ð9ð,à	™8 D¨"¨bÓ1°7Ð;ð,ð 
™8 D¨"¨b°"°bÓ9¸7ÐCð,ð 
™8 D¨"¨b°"°bÓ9¸7ÐCð	,ð
 
™8 D¨"¨b°"°b¸"Ó=¸wÐGð,ð 
™8 D¨!¨QÓ/°Ð7ð,ð 
™8 D¨!¨Q°°1Ó5°uÐ=ð,ð 
™8 D¨!¨Q°°2Ó6¸Ð>ð,ð 
™8 D¨!¨Q°°1Ó5°uÐ=ð,ð 
™8 D¨!¨Q°°1Ó5°uÐ=ð,ð 
™( 4¨¨AÓ.°Ð6ð,ð 
™( 4¨¨B°°1Ó5°uÐ=ð,ð 
™( 4¨¨B°°1Ó5°uÐ=ð,ð 
™( 4¨¨B°°1Ó5°uÐ=ð,ð 
™( 4¨¨B°°2°rÓ:¸EÐBð,ð  
™( 4¨¨B°°1Ó5°vÐ>ð!,ð" 
™( 4¨¨B°°1°aÓ8¸&ÐAð#,ð$ 
™( 4¨¨B°°1Ó5°vÐ>ð%,ð& 
™( 4¨¨R°°AÓ6¸Ð?ð',ð( 
™( 4¨¨R°°AÓ6¸Ð?ð),ð* 
™( 4¨¨R°°AÓ6¸Ð?ð+,ð, 
™( 4¨¨R°°BÓ7¸Ð@ð-,ð. 
™( 4¨¨R°°B¸Ó;¸VÐDð/,ð0 
™( 4¨¨R°°AÓ6¸Ð>ð1,ð2 
™( 4¨¨R°°A°qÓ9¸5ÐAð3,ð4 
™( 4¨¨R°°AÓ6¸Ð>ð5,ð8 
™X d¨A¨qÓ1°5Ð9ð9,ð< 
™X d¨B°°1°aÓ8¸%Ð@ð=,ð> 
™X d¨B°°1°aÓ8¸%Ð@ð?,ð@ 
™X d¨B°°1°b¸"Ó=¸uÐEðA,ðF 
™X d¨B°°1°a¸Ó;¸UÐCðG,ðH 
™X d¨B°°1°aÓ8¸%Ð@ðI,ðJ 
™X d¨A¨q°!°QÓ7¸Ð?ðK,ðL 
™X d¨A¨q°!°R¸Ó<¸eÐDðM,ðN 
™X d¨A¨q°!°QÓ7¸Ð?ðO,ðR 
™X d¨A¨q°!°QÓ7¸Ð?ðS,ðT 
™X d¨A¨q°!°Q¸Ó:¸EÐBðU,ðV 
™X d¨A¨q°!°QÓ7¸Ð?ðW,ó/ñ`Hóa/ð`Hð: ‡�×Ñ˜¢Ó-ñ>ó .ð>õ"$ò	€ð ‡�×Ñ˜ 'Ó*ñó +ðò&ò?ò4òDò,ò-òDð ‡�×Ñ˜Ð$6Ð8MÐ#NÓOñ,ó Pð,ò ð ‡�×ÑØòóñ&óð&ò-ò6ò+ò
ð ‡�×ÑØ
ˆH×(Ò(Ó*¨i¸Ð-EÕEóñ7óò7r   