+
    öÙ†jB3  ã                  ó~  € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHt ^RIHtHt ^RIHt ]P6                  ! R	4      t]P6                  ! R
4      t]P?                  RRRR/4      t RR0t!0 R'mt"]#! ]4       U u0 uF#  q PI                  R4      '       d   K  ]! V 4      kK%  	  up t%R t& ! R R]4      t' ! R R]4      t(]PR                  R R l4       t*R R lt+R(R R llt,R R lt-R R lt.R  R! lt/0 R)mt00 R'mt1R" R# lt2R*R$ R% llt3R& ! 4       t4R# u up i )+é    )ÚannotationsN)Údeque)ÚStringIO)Ú	TokenInfo)ÚIterableÚIteratorÚMatchÚ
NamedTupleÚSelf)Ú
CharBufferÚ
CharWidths)Útracez\x1b\[[ -@]*[A-~]z\x01.*?\x02ÚÚ ÚÚdefÚclassÚ_c                 óB   € \         P                  ! R/ V B P                  # )N© )Ú	_colorizeÚ	get_themeÚsyntax)Úkwargss   ,Ú$/usr/lib/python3.14/_pyrepl/utils.pyÚTHEMEr      s   € ä×ÒÑ( Ñ(×/Ñ/Ð/ó    c                  ó\   € ] tR t^ t$ RtR]R&   R]R&   ]R R l4       t]R R l4       tR	t	R
# )ÚSpanz,Span indexing that's inclusive on both ends.ÚintÚstartÚendc               ó$   € V ^8„  d   QhRRRRRR/# )é   Úmz
Match[str]Úgroupz	int | strÚreturnr   r   )Úformats   "r   Ú__annotate__ÚSpan.__annotate__'   s!   € ÷ /ñ /˜
ð /¨9ð /¸ñ /r   c                	ó`   € VP                  V4      pV ! V^ ,          V^,          ^,
          4      # )r   )Úspan)Úclsr%   r&   Úre_spans   &&& r   Úfrom_reÚSpan.from_re&   s(   € à—&‘&˜“-ˆÙ�7˜1•:˜w q�z¨A�~Ó.Ð.r   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   ÚtokenÚTIÚline_lenú	list[int]r'   r   r   )r(   s   "r   r)   r*   ,   s!   € ÷ 

ñ 

˜rð 

¨Yð 

¸4ñ 

r   c                	ó°  € RpVP                   \        P                  \        P                  09   d+   VP                  P                  R4      '       d
   V^,          pV ! W!P                  ^ ,          ^,
          ,          VP                  ^,          ,           W!P                  ^ ,          ^,
          ,          VP                  ^,          ,           V,           4      # )é   éÿÿÿÿ)Ú{Ú})ÚtypeÚTÚFSTRING_MIDDLEÚTSTRING_MIDDLEÚstringÚendswithr!   r"   )r-   r2   r4   Ú
end_offsets   &&& r   Ú
from_tokenÚSpan.from_token+   s”   € àˆ
Ø�J‰Jœ1×+Ñ+¬Q×-=Ñ-=Ð>Ô>Ø—‘×%Ñ% j×1Ò1à˜!�OˆJáØ—[‘[ •^ aÕ'Õ(¨5¯;©;°q­>Õ9Ø—Y‘Y˜q•\ AÕ%Õ&¨¯©°1­Õ5¸
ÕBó
ð 	
r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Úclassmethodr/   rB   Ú__static_attributes__r   r   r   r   r       s5   ‡ Ù6àƒJØ	ƒHàô/ó ð/ð ô

ó ô

r   r   c                  ó,   € ] tR t^9t$ R]R&   R]R&   RtR# )Ú	ColorSpanr   r,   ÚstrÚtagr   N)rD   rE   rF   rG   rI   rK   r   r   r   rM   rM   9   s   ‡ Ø
ƒJØ	‡Hr   rM   c               ó    € V ^8„  d   QhRRRR/# )r$   ÚcrN   r'   r    r   )r(   s   "r   r)   r)   ?   s   € ÷ ñ �ð ˜ñ r   c                óð   € \        V 4      ^€8  d   ^# \        P                  ! V 4      '       d   ^ # \        P                  ! V 4      pVR8X  d
   V R8w  d   ^ # \        P                  ! V 4      pVR9   d   ^# ^# )é€   ÚCfô   Â­)ÚNÚNaÚHÚA)ÚordÚunicodedataÚ	combiningÚcategoryÚeast_asian_width)rQ   r]   Úws   &  r   Ú	str_widthr`   >   sd   € ä
ˆ1ƒv�„|Ùä×Ò˜Q×ÒÙÜ×#Ò# AÓ&€HØ�4Ô˜A œMÙÜ×$Ò$ QÓ'€AØÐ!Ô!ÙÙr   c               ó    € V ^8„  d   QhRRRR/# )r$   ÚsrN   r'   r    r   )r(   s   "r   r)   r)   N   s   € ÷ ?ñ ?ˆCð ?�Cñ ?r   c                óö   € \        V 4      ^8X  d   V R8w  d   \        V 4      # \        R V  4       4      p\        P	                  V 4      pV P                  R4      pV\        R V 4       4      ,
          V,           # )r7   Úc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5i©N)r`   ©Ú.0Úis   & r   Ú	<genexpr>Úwlen.<locals>.<genexpr>Q   s   é € Ð)¡q !”˜1—�£qùó   ‚c              3  ó8   "  € T F  p\        V4      x € K  	  R # 5irf   )Úlenrg   s   & r   rj   rk   U   s   é € Ð1© 1œ˜AŸ˜«ùrl   )rn   r`   ÚsumÚANSI_ESCAPE_SEQUENCEÚfindallÚcount)rb   ÚlengthÚsequenceÚ
ctrl_z_cnts   &   r   Úwlenrv   N   se   € Ü
ˆ1ƒv�„{�q˜F”{Ü˜‹|ÐÜÑ)¡qÓ)Ó)€Fä#×+Ñ+¨AÓ.€HØ—‘˜“€JØ”CÑ1©Ó1Ó1Õ1°JÕ>Ð>r   c               ó$   € V ^8„  d   QhRRRRRR/# )r$   rb   rN   Úincluding_contentÚboolr'   r   )r(   s   "r   r)   r)   X   s!   € ÷ )ñ )�ð )¨ð )¸#ñ )r   c                óh   € V'       d   \         P                  RV 4      # V P                  \        4      # )zƒReturn `s` with \001 and \002 characters removed.

If `including_content` is True, content between \001 and \002 is also
stripped.
r   )ÚZERO_WIDTH_BRACKETÚsubÚ	translateÚZERO_WIDTH_TRANS)rb   rx   s   &&r   Ú	unbracketr   X   s*   € ÷ Ü!×%Ñ% b¨!Ó,Ð,Ø�;‰;Ô'Ó(Ð(r   c               ó    € V ^8„  d   QhRRRR/# )r$   ÚbufferrN   r'   úIterator[ColorSpan]r   )r(   s   "r   r)   r)   c   s   € ÷ 
ñ 
�sð 
Ð2ñ 
r   c              #  ó,  "  € \        V 4      p^ .VP                  4        Uu. uF  p\        V4      NK  	  up,           p\        ^\        V4      4       F$  pW4;;,          W4^,
          ,          ,          uu&   K&  	  VP	                  ^ 4       \
        P                  ! VP                  4      pRp \        WS4       F	  pVx € TpK  	  R# u upi   \         d     R# \
        P                   d!   p\        YƒY`4       Rj  x€L 
   Rp?R# Rp?ii ; i5i)zÎReturns a list of index spans to color using the given color tag.

The input `buffer` should be a valid start of a Python code block, i.e.
it cannot be a block starting in the middle of a multiline string.
N)r   Ú	readlinesrn   ÚrangeÚseekÚtokenizeÚgenerate_tokensÚreadlineÚgen_colors_from_token_streamÚSyntaxErrorÚ
TokenErrorÚrecover_unterminated_string)	r�   ÚsioÚlineÚline_lengthsri   ÚgenÚlast_emittedÚcolorÚtes	   &        r   Ú
gen_colorsr•   c   sã   é € ô �6Ó
€CØ�3°·±´Ó@±¨œ#˜dž)±Ñ@Õ@€Lä�1”c˜,Ó'Ö(ˆØ�˜<¨!­Õ,Õ,�ñ )ð ‡H�HˆQ„KÜ
×
"Ò
" 3§<¡<Ó
0€CØ%)€Lð	
Ü1°#ÖDˆEØŠKØ ŠLó Eùò Aøô ô ÚÜ×Ñô 
Ü.Ø˜ló
÷ 	
÷ 	
ûð
üsX   ‚ D¢C
¶A9DÂ0C ÃDÃDÃDÃDÃ0DÃ1DÄ DÄDÄDÄDÄDc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r$   Úexcztokenize.TokenErrorr�   r5   r’   zColorSpan | Noner�   rN   r'   r‚   r   )r(   s   "r   r)   r)   ~   s:   € ÷ &
ñ &
Ø	ð&
àð&
ð #ð&
ð ð	&
ð
 ñ&
r   c              #  ó  "  € V P                   w  rEVf   R # Vw  rgVP                  R4      '       d·   W^,
          ,          V,           ^,
          pVR	,          ^,
          p	V'       dE   W‚P                  P                  8:  d+   \	        RVR7       VP                  P
                  ^,           p\        W‰4      p
\	        RV
P                  V
P
                  R7       \        V
R4      x € R # \	        R\        V4      \        V 4      R7       R # 5i)
Nzbefore last emitted = {s})rb   zyielding span {a} -> {b})ÚaÚbr?   z&unhandled token error({buffer}) = {te})r�   r”   )zunterminated string literalzunterminated f-string literalzunterminated t-string literalzEOF in multi-line stringz+unterminated triple-quoted f-string literalz+unterminated triple-quoted t-string literalr8   )
ÚargsÚ
startswithr,   r!   r   r"   r   rM   ÚreprrN   )r—   r�   r’   r�   ÚmsgÚlocÚline_noÚcolumnr!   r"   r,   s   &&&&       r   r�   r�   ~   sÚ   é € ð �x‰x�H€CØ
‚{Ùà�O€Gà
‡~�~ð	
÷	ò 	ð  q�[Õ)¨FÕ2°QÕ6ˆØ˜2Õ Õ"ˆ÷ ˜E×%6Ñ%6×%<Ñ%<Ô<ÜÐ-°Õ7Ø ×%Ñ%×)Ñ)¨AÕ-ˆEä�EÓˆÜÐ(¨D¯J©J¸$¿(¹(ÕCÜ˜˜hÓ'Ô'äØ4Ü˜“<Ü�3‹x÷	
ùs   ‚DD
c               ó$   € V ^8„  d   QhRRRRRR/# )r$   Útoken_generatorzIterator[TI]r�   r5   r'   r‚   r   )r(   s   "r   r)   r)   §   s&   € ÷ ;5ñ ;5Ø!ð;5àð;5ð ñ;5r   c              #  ó  "  € \        V 4      pR p^ pV EFq  w  rVpVf   Q hVP                  VP                  8X  d   K*  VP                  ;;\        P
                  8X  d   M†;\        P                  8X  d   Mp;\        P                  8X  d   MZ;\        P                  8X  d   MD;\        P                  8X  d   M.;\        P                  8X  d   M;\        P                  8X  d   M M'  \        P                  Wa4      p\        VR4      x € Kù  ;\        P                  8X  d(    \        P                  Wa4      p\        VR4      x € EK5  ;\        P                   8X  d(    \        P                  Wa4      p\        VR4      x € EKq  ;\        P"                  8X  d]    VP$                  R9   d   V^,          pMVP$                  R9   d
   V^,          p\        P                  Wa4      p\        VR4      x € EKâ  \        P&                  8X  g   EKù  V'       d)   R p\        P                  Wa4      p\        VR4      x € EK)  \(        P*                  ! VP$                  4      '       dY   R	p	VP$                  \,        9   d   R
p	\        P                  Wa4      p\        W‰4      x € VP$                  \.        9   d   RpEK¤  EK§  \(        P0                  ! VP$                  4      '       d@   V^ 8X  d9   \3        WVV4      '       d'   \        P                  Wa4      p\        VR4      x € EK  VP$                  \4        9   dQ   V'       d    VP6                  \        P8                  8X  g'   \        P                  Wa4      p\        VR4      x € EKn  EKq  EKt  	  R# 5i)FNr?   ÚcommentÚnumberz([{z)]}ÚopÚ
definitionÚkeywordÚkeyword_constantTÚsoft_keywordÚbuiltin)Úprev_next_windowr!   r"   r;   r<   ÚSTRINGÚFSTRING_STARTr=   ÚFSTRING_ENDÚTSTRING_STARTr>   ÚTSTRING_ENDr   rB   rM   ÚCOMMENTÚNUMBERÚOPr?   ÚNAMEr©   Ú	iskeywordÚKEYWORD_CONSTANTSÚIDENTIFIERS_AFTERÚissoftkeywordÚis_soft_keyword_usedÚBUILTINSÚ
exact_typeÚDOT)
r£   r�   Útoken_windowÚis_def_nameÚbracket_levelÚ
prev_tokenr2   Ú
next_tokenr,   Úspan_clss
   &&        r   rŠ   rŠ   §   sg  é € ô $ OÓ4€Là€KØ€MÜ)5Ñ%ˆ
˜:ØÒ Ð Ð Ø�;‰;˜%Ÿ)™)Ô#Ùà�j‰jðE�”——Ø!”!—/—/Ð$4¤A×$4×$4°}´q·}·}Ø!”!—/—/Ð$4¤A×$4×$4°}´q·}·}òEõ —‘ uÓ;�Ü  hÓ/Ô/Ø”—–Ý—‘ uÓ;�Ü  iÓ0Õ0Ø”—–Ý—‘ uÓ;�Ü  hÓ/Õ/Ø”—–Ù—<‘< 5Ô(Ø! QÕ&‘MØ—\‘\ UÔ*Ø! QÕ&�MÜ—‘ uÓ;�Ü  dÓ+Õ+Ü——‘ßØ"'�KÜŸ?™?¨5Ó?�DÜ# D¨,Ó7Õ7Ü×&Ò& u§|¡|×4Ò4Ø(�HØ—|‘|Ô'8Ô8Ø#5˜ÜŸ?™?¨5Ó?�DÜ# DÓ3Ò3Ø—|‘|Ô'8Ô8Ø&*›ò 9ô ×)Ò)¨%¯,©,×7Ò7Ø%¨Ô*Ü,¨ZÀ
×KÒKäŸ?™?¨5Ó?�DÜ# D¨.Ó9Õ9à—L‘L¤HÔ,ß'¨J×,AÑ,AÄQÇUÁUÔ,JäŸ?™?¨5Ó?�DÜ# D¨)Ó4Õ4ò -Kò -ó_ *6ùs(   ‚HNÈNÈANÉ#A=NË!ANÌ=ANc               ó    € V ^8„  d   QhRRRR/# )r$   Útokensz	TI | Noner'   ry   r   )r(   s   "r   r)   r)   é   s   € ÷ /ñ / )ð /°ñ /r   c                 ó¨  € \        RV R7       T ; EdM    ^8H  EdE   w  ;f   M`;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  MÜ \        Rc ;eÑ   w  R8X  dÊ   ;\        Rc;e_   w  ;\        P
                  8X  d   MD;\        P                  8X  d   M.;\        P                  8X  d   M;\        P                  8X  d   M M MZ ;\        Rc;eK   w  \        P                  8X  d5   ;R8X  d   M*;R8X  d   M";R	8X  d   M;R
8X  d   M;R8X  d   M
;R8X  d   M M M  M  R#   ; dÎ    ^8H  dÇ   w  ;f   M`;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  M^ \        Rc ;eS   w  R8X  dL   \        Rc;eA   w  \        P                  8X  d+   p \        P                  ! V4      '       d
   V\        9   # R#   ; Edi    ^8H  Eda   w  ;f   M„;\        Rc;e   w  \        P                  8X  d   Ma ;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  MÔ \        Rc ;eÉ   w  R8X  dÂ   ;\        Rc;e_   w  ;\        P
                  8X  d   MD;\        P                  8X  d   M.;\        P                  8X  d   M;\        P                  8X  d   M M MR ;\        Rc;eC   w  \        P                  8X  d-   ;R8X  d   M";R8X  d   M;R8X  d   M;R	8X  d   M
;R
8X  d   M M M  M  R#   ; dò    ^8H  dë   w  ;f   M„;\        Rc;e   w  \        P                  8X  d   Ma ;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  M^ \        Rc ;eS   w  R8X  dL   \        Rc;eA   w  \        P                  8X  d+   p \        P                  ! V4      '       d
   V\        9   # R#   ; dH    ^8H  dA   w  \        Rc ;e2   w  R8X  d+   \        Rc ;e    w  R8X  d   \        Rc ;e   w  R8X  d    R#     då    ^8H  dÞ   w  ;f   M„;\        Rc;e   w  \        P                  8X  d   Ma ;\        Rc;e   w  \        P                  8X  d   M= ;\        Rc;e   w  \        P                  8X  d   M ;\        Rc ;e
   w  R8X  d   M  MQ \        Rc ;eF   w  R8X  d?   \        Rc;e4   w  \        P                  8X  d   p\        P                  ! V4      '       * #    R# )z¢Returns True if the current token is a keyword in this context.

For the `*tokens` to match anything, they have to be a three-tuple of
(previous, current, next).
zis_soft_keyword_used{t})Útr   )r?   Ú:ÚmatchÚ(Ú*Ú[r9   Ú~z...TÚcaseÚ-r   r;   F)r   r3   r<   ÚNEWLINEÚINDENTr´   r®   r¯   r±   rµ   r¶   r©   r·   Úkeyword_first_sets_matchÚDEDENTÚkeyword_first_sets_case)rÆ   rb   s   * r   r»   r»   é   sô  € ô 
Ð
# vÕ.Ø
÷
÷ 
Ü�=”2—=”a—i–i‘= <¤2§<¤a§h¦h¡<°.´"·.½C±.Ò@Ü×•gØGŒB×GˆxŒq�x�x˜(œ!Ÿ(Ÿ( _¤Q§_§_°´q··ÒFÑGØBŒb×B”—–Ÿc§C¯#··c¿EÒAÑBòCò ñ
÷
õ 
Ü�=”2—=”a—i–i‘= <¤2§<¤a§h¦h¡<°.´"·.½C±.Ò@Ü×•gÜ× Œq�vŽvð
õ
 × Ò  ×#Ò#ØÔ4Ñ4Ð4Ùñ
÷
÷ 
Ü�=”2—=”a—i–i‘= <¤2§<¤a§h¦h¡<°,´"·,´Q·X¶X±,ÀÄÇÍ3ÁÒOÜ×•fØGŒB×GˆxŒq�x�x˜(œ!Ÿ(Ÿ( _¤Q§_§_°´q··ÒFÑGØ:Œb×:”—–Ÿc§C¯#··cÒ9Ñ:ò;ò ñ
÷
õ 
Ü�=”2—=”a—i–i‘= <¤2§<¤a§h¦h¡<°,´"·,´Q·X¶X±,ÀÄÇÍ3ÁÒOÜ×•fÜ× Œq�vŽvð
õ
 × Ò  ×#Ò#ØÔ3Ñ3Ð3Ùñ
÷ AÕ@Œb×�¤§­3´·½3Úò A÷
ô 
Ü�=”2—=”a—i–i‘= <¤2§<¤a§h¦h¡<°,´"·,´Q·X¶X±,ÀÄÇÍ3ÁÒOÜ×•fÜ× Œq�vŽvð
ô
 ×(Ò(¨Ó+Ô+Ð+ñ
ð Ùr   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r$   r�   rN   Úcolorszlist[ColorSpan] | NoneÚstart_indexr    Úforce_colorry   r'   ztuple[CharBuffer, CharWidths]r   )r(   s   "r   r)   r)     sA   € ÷ Sñ SØðSà"ðSð ðSð ð	Sð
 #ñSr   c                óx  € . p. pV '       g   WE3# V'       d6   V^ ,          P                   P                  V8  d   VP                  ^ 4       K=  \        VR7      pRpRpV'       d<   V^ ,          P                   P                  V8  d   Wa^ ,          P
                  ,          p\        W4       EFž  w  ršV'       d<   V^ ,          P                   P                  V	8X  d   Wa^ ,          P
                  ,          pV
R8X  d$   VP                  V
4       VP                  ^4       MÇ\        V
4      ^€8  d$   VP                  V
4       VP                  ^4       M”\        P                  ! V
4      P                  R4      '       d?   R\        V
4      ,          p
VP                  V
4       VP                  \        V
4      4       M+VP                  V
4       VP                  \        V
4      4       V'       d@   V^ ,          P                   P                  V	8X  d   VP                  pVP                  ^ 4       WtR,          ,           V,           VR&   RpRpEK¡  	  V'       dd   V^ ,          P                   P                  X	8  dB   V^ ,          P                   P                  V	8”  d    VR;;,          VP                  ,          uu&   WE3# )aÚ  Decompose the input buffer into a printable variant with applied colors.

Returns a tuple of two lists:
- the first list is the input buffer, character by character, with color
  escape codes added (while those codes contain multiple ASCII characters,
  each code is considered atomic *and is attached for the corresponding
  visible character*);
- the second list is the visible width of each character in the input
  buffer.

Note on colors:
- The `colors` list, if provided, is partially consumed within. We're using
  a list and not a generator since we need to hold onto the current
  unfinished span between calls to disp_str in case of multiline strings.
- The `colors` list is computed from the start of the input block. `buffer`
  is only a subset of that input block, a single line within. This is why
  we need `start_index` to inform us which position is the start of `buffer`
  actually within user input. This allows us to match color spans correctly.

Examples:
>>> utils.disp_str("a = 9")
(['a', ' ', '=', ' ', '9'], [1, 1, 1, 1, 1])

>>> line = "while 1:"
>>> colors = list(utils.gen_colors(line))
>>> utils.disp_str(line, colors=colors)
(['\x1b[1;34mw', 'h', 'i', 'l', 'e\x1b[0m', ' ', '1', ':'], [1, 1, 1, 1, 1, 1, 1, 1])

)rÙ   r   rd   ÚCz\u%04xr8   )r,   r"   Úpopr   r!   rO   Ú	enumerateÚappendrZ   r[   r]   rœ   rn   r`   Úreset)r�   r×   rØ   rÙ   ÚcharsÚchar_widthsÚthemeÚ	pre_colorÚ
post_colorri   rQ   s   &&&&       r   Údisp_strrå     sò  € ðF €EØ €KçØÐ!Ð!ç
�V˜A•Y—^‘^×'Ñ'¨+Ô5à�
‰
�1Žä˜kÔ*€EØ€IØ€Jß�&˜•)—.‘.×&Ñ&¨Ô4à �)Ÿ-™-Õ(ˆ	ä˜&×.‰ˆß�f˜Q•i—n‘n×*Ñ*¨aÔ/Ø Q�iŸm™mÕ,ˆIà�Œ;Ø�L‰L˜ŒOØ×Ñ˜qÕ!Ü�‹V�cŒ\Ø�L‰L˜ŒOØ×Ñ˜qÕ!Ü×!Ò! !Ó$×/Ñ/°×4Ò4ØœC ›FÕ"ˆAØ�L‰L˜ŒOØ×Ñœs 1›vÕ&à�L‰L˜ŒOØ×Ñœy¨›|Ô,ç�f˜Q•i—n‘n×(Ñ(¨AÔ-ØŸ™ˆJØ�J‰J�qŒMà b¥	Õ)¨JÕ6ˆˆb‰	Øˆ	Ø‹
ñ1 /÷4 �&˜•)—.‘.×&Ñ&¨Ô*¨v°a­y¯~©~×/AÑ/AÀAÔ/Eð 	ˆb�	�U—[‘[Õ ‹	àÐÐr   c                 ó   € R 5;p3R R lu6# )r<   c               ó    € V ^8„  d   QhRRRR/# )r$   ÚiterablezIterable[T]r'   zIterator[tuple[T | None, ...]]r   )r(   s   "r   r)   r)   q  s   € ÷ ñ Øðà#ñr   c              3  óH  "  € \        V 4      p\        R\        V4      3^R7      p V F!  pVP                  V4       \	        V4      x € K#  	   TP                  R4       \	        T4      x € R#   \
         d    h i ; i  TP                  R4       \	        T4      x € i ; i5i)a  Generates three-tuples of (previous, current, next) items.

On the first iteration previous is None. On the last iteration next
is None. In case of exception next is None and the exception is re-raised
on a subsequent next() call.

Inspired by `sliding_window` from `itertools` recipes.
N)Úmaxlen)Úiterr   ÚnextrÞ   ÚtupleÚ	Exception)rè   ÚiteratorÚwindowÚxs   &   r   r­   r­   q  sŽ   é € ô �H‹~€HÜ�Dœ$˜x›.Ð)°!Ô4€FðÛˆAØ�M‰M˜!ÔÜ˜“-Ôò ð 	�‰�dÔÜ�F‹mÔøô	 ô Øðûð 	�‰�dÔÜ�F‹mÓüs(   ‚$B"§'A/ Á B"Á/A<Á<A? Á? BÂB"r   )Ú	.defaultsr<   s     r   Ú(<generic parameters of prev_next_window>ró   q  s	   € ”Q÷ r   >   ÚNoneÚTrueÚFalse)F>   Únotrô   rõ   rö   ÚawaitÚlambda)Nr   F)5Ú
__future__r   ÚbuiltinsÚ	functoolsr©   Úrer2   r<   r‡   r[   r   Úcollectionsr   Úior   r   r3   Útypingr   r   r	   r
   r   Útypesr   r   r   Úcompilerp   r{   rN   Ú	maketransr~   r¹   r¸   Údirrœ   r¼   r   r   rM   Úcacher`   rv   r   r•   r�   rŠ   rÓ   rÕ   r»   rå   r­   )Únames   0r   Ú<module>r     s!  ðÝ "Û Û Û Û 	Û Û Û Û å Ý Ý $ß >Õ >ç )Ý à—z’zÐ"6Ó7Ð Ø—Z’Z Ó/Ð Ø—=‘= &¨"¨f°bÐ!9Ó:Ð Ø˜GÐ$Ð Ú-Ð Ù"% h¤-ÓL¡-˜$·±Às×7KŒI‰C�ŽI¡-ÑL€ò0ô

ˆ:ô 
ô2�
ô ð
 ‡�ôó ðõ?÷)õ
õ6&
õR;5ò| OÐ Ú3Ð õ/÷dS÷lñ ùòs
 Ms   Â D:Â=D: