ó
    V•£h
  ã            	       ó  • S SK r S SKrS SKrS SKJrJrJr  S SKJrJr  S SK	J
r
JrJrJrJrJrJrJr  S SKJr  \" S5      r\" S5      rS\4S	 jrS
\\   S\\   4S jrS\S\ R2                  S\\\4   4S jrS\\   S\
\\\4      4S jrS\S\4S jr\\S.S jrS\\\4   S\4S jrS\\\4   S\
\\\4      4S jr S\\\4   S\\\4   4S jr!S\\   S\\/\4   S\\\\   4   4S jr" " S S\#5      r$S r%S"S  jr&S! r'g)#é    N)ÚOrderedDictÚCounterÚdefaultdict)Ú	FrameTypeÚTracebackType)ÚIteratorÚListÚTupleÚIterableÚCallableÚUnionÚTypeVarÚMapping)ÚASTTextÚTÚRÚ
max_lengthc                 ó„   • [        U 5      U:”  a0  U[        U5      -
  S-  nU[        U5      -
  U-
  nU S U U-   X* S  -   n U $ )Né   )Úlen)Úseqr   ÚmiddleÚrightÚlefts        ÚM/home/mande/repo/quber/.venv/lib/python3.13/site-packages/stack_data/utils.pyÚtruncater      sT   € Ü
ˆ3ƒx�*ÓØœc &›kÑ)¨aÑ/ˆØœC ›KÑ'¨%Ñ/ˆØ�%�4ˆj˜6Ñ! C¨¨ LÑ0ˆØ€Jó    ÚitÚreturnc                 ó@   • [        [        R                  " U 5      5      $ ©N)Úlistr   Úfromkeys)r   s    r   Úunique_in_orderr$      s   € Ü”×$Ò$ RÓ(Ó)Ð)r   ÚatokÚnodec                 óä   • [        U[        [        SS5      5      (       a4  [        XR                  5      u  p#[        XR
                  S   5      u  pEX%4$ U R                  USS9u  u  p&u  pVX%S-   4$ )z˜
Returns a pair of numbers representing a half open range
(i.e. suitable as arguments to the `range()` builtin)
of line numbers of the given AST nodes.
Ú
match_case© éÿÿÿÿF)Úpaddedé   )Ú
isinstanceÚgetattrÚastÚ
line_rangeÚpatternÚbodyÚget_text_positions)r%   r&   ÚstartÚ_endÚ_startÚendÚ_s          r   r0   r0      sp   € ô �$œ¤ \°2Ó6×7Ñ7Ü  §|¡|Ó4‰ˆÜ  §y¡y°¡}Ó5‰ˆØˆzÐà#×6Ñ6°tÀEÐ6ÐJÑ‰
ˆ‘H�SØ˜A‘gˆ~Ðr   Úlstc              #   ó”  ^^^^^#   • [        U 5      m[        R                  " U U4S jS9 H•  u  nmU(       a^  [        T5      mS/[	        T5      -  mU4S jn[        T5       H.  mU" UU4S j5      mTb  U" UUU4S j5        U" UU4S j5        M0     O[        R                  " S5      m[        TT5       S h  v•N   M—     g  N	7f)	Nc                 ó   >• TU    S:„  $ )Né   r)   )ÚxÚcountss    €r   Ú<lambda>Ú"highlight_unique.<locals>.<lambda>/   s   ø€ ÀÈÁÈQÂr   ©ÚkeyFc                 óB   >•  U " 5       nSTU'   U$ ! [          a     g f = f)NT)Ú
ValueError)ÚfÚiÚhighlighteds     €r   Úhighlight_indexÚ)highlight_unique.<locals>.highlight_index4   s3   ø€ ð Ù›�Að "&�˜A‘Ø�øô "ó  Ùð ús   ƒ ‘
�c                  ó&   >• T R                  T5      $ r!   ©Úindex©ÚgroupÚitems   €€r   r?   r@   =   s   ø€ °·±¸DÔ0Ar   c                  ó.   >• TR                  TT S-   5      $ ©Nr,   rK   )ÚfirstrN   rO   s   €€€r   r?   r@   ?   s   ø€ ¨E¯K©K¸¸eÀa¹iÔ,Hr   c                  ó8   >• ST S S S2   R                  T5      -
  $ )Nr*   rK   rM   s   €€r   r?   r@   @   s   ø€ ¨¨U±4°R°4©[×->Ñ->¸tÓ-DÒ(Dr   T)r   Ú	itertoolsÚgroupbyr"   r   ÚsetÚrepeatÚzip)r9   Ú	is_commonrH   r>   rR   rN   rG   rO   s      @@@@@r   Úhighlight_uniquerZ   ,   s¨   üé € Ü�S‹\€Fä%×-Ò-¨cÔ7NÔOÑˆ	�5ÞÜ˜“KˆEØ ˜'¤C¨£JÑ.ˆKõô ˜Ež
�Ù'Õ(AÓB�ØÑ$Ù#Ö$HÔIÙÕ DÖEò	 #ô $×*Ò*¨4Ó0ˆKä�u˜kÓ*×*Ò*ò+ Pñ* 	+ùs   ‡B5CÂ<CÂ=
Cr=   c                 ó   • U $ r!   r)   )r=   s    r   Úidentityr\   G   s   € Ø€Hr   )ÚmapperrB   c             #   ó6  #   • [        [        X05      5      n[        R                  " [	        U [        U5      5      S S9 HR  u  pV[	        U6 u  pxU(       a  [        X'5       S h  v•N   M+  [	        U6 u  pšU" [        U5      [        U	5      5      v •  MT     g  N27f)Nc                 ó   • U S   S   $ rQ   r)   )Úts    r   r?   Ú#collapse_repeated.<locals>.<lambda>O   s   € ˜!˜A™$˜qš'r   rA   )r"   ÚmaprT   rU   rX   rZ   )r9   Ú	collapserr]   rB   ÚkeyedÚis_highlightedrN   Úoriginal_groupÚhighlighted_groupÚkeyed_groupr8   s              r   Úcollapse_repeatedri   K   s†   é € Ü”�S“Ó€EÜ!*×!2Ò!2Ü�Ô% eÓ,Ó-Ù!ô"Ñˆô -0°¨KÑ)ˆÞÜ˜6Ó2×2Ò2ä Ð"3Ð4‰NˆKÙœD Ó0´$°{Ó2CÓDÔDò"ñ 3ùs   ‚A"BÁ$BÁ%3BÚframe_or_tbc                 óž   • [        [        U [        R                  [        R                  45      5        [        U [        R                  45      $ r!   )Úassert_r-   Útypesr   r   ©rj   s    r   Úis_framero   Y   s4   € ÜŒJ�{¤U§_¡_´e×6IÑ6IÐ$JÓKÔLÜ�k¤E§O¡OÐ#5Ó6Ð6r   c              #   óŒ   #   • U nU(       a7  Uv •  [        U5      (       a  UR                  nOUR                  nU(       a  M6  g g 7fr!   )ro   Úf_backÚtb_next)rj   Úcurrents     r   Ú
iter_stackrt   ^   s6   é € Ø5@€GÞ
ØŠÜ�G×ÑØ—n‘n‰Gà—o‘oˆG÷ Š'ùs   ‚>AÁAc                 ól   • [        U 5      (       a  X R                  4$ U R                  U R                  4$ r!   )ro   Úf_linenoÚtb_frameÚ	tb_linenorn   s    r   Úframe_and_linenory   h   s3   € Ü�×ÑØ×0Ñ0Ð0Ð0à×#Ñ# [×%:Ñ%:Ð:Ð:r   ÚiterableÚkey_funcc                 óh   • [        [        5      nU  H  nX!" U5         R                  U5        M     U$ )a×  
Create a dictionary from an iterable such that the keys are the result of evaluating a key function on elements
of the iterable and the values are lists of elements all of which correspond to the key.

>>> def si(d): return sorted(d.items())
>>> si(group_by_key_func("a bb ccc d ee fff".split(), len))
[(1, ['a', 'd']), (2, ['bb', 'ee']), (3, ['ccc', 'fff'])]
>>> si(group_by_key_func([-1, 0, 1, 3, 6, 8, 9, 2], lambda x: x % 2))
[(0, [0, 6, 8, 2]), (1, [-1, 1, 3, 9])]
)r   r"   Úappend)rz   r{   ÚresultrO   s       r   Úgroup_by_key_funcr   o   s4   € ô œÓ€FÛˆØˆx˜‹~Ñ×%Ñ% dÖ+ñ à€Mr   c                   ó(   • \ rS rSrSrS rS r\rSrg)Úcached_propertyé�   zé
A property that is only computed once per instance and then replaces itself
with an ordinary attribute. Deleting the attribute resets the property.

Based on https://github.com/pydanny/cached-property/blob/master/cached_property.py
c                 ó2   • UR                   U l         Xl        g r!   ©Ú__doc__Úfunc)Úselfr†   s     r   Ú__init__Úcached_property.__init__‰   s   € Ø—|‘|ˆŒØ�	r   c                 óv   • Uc  U $ U R                  U5      =o1R                  U R                   R                  '   U$ r!   )r†   Ú__dict__Ú__name__)r‡   ÚobjÚ_clsÚvalues       r   Úcached_property_wrapperÚ'cached_property.cached_property_wrapper�   s4   € Ø‰;ØˆKà37·9±9¸S³>ÐAˆ—‘˜TŸY™Y×/Ñ/Ñ0Øˆr   r„   N)	rŒ   Ú
__module__Ú__qualname__Ú__firstlineno__r…   rˆ   r�   Ú__get__Ú__static_attributes__r)   r   r   r�   r�   �   s   † ñòòð &ƒGr   r�   c           	      óæ   ^• SS K nSSKJn   " U4S jS[        U" S5      5      5      nU" SS9n UR	                  XU 5      nUR                  5       $ ! [
         a    Un UR                  5       $ f = f)Nr   )Úget_lexer_by_namec                   ó,   >^ • \ rS rSrU U4S jrSrU =r$ )Ú'_pygmented_with_ranges.<locals>.MyLexeré›   c              3   ó¶   >^#   • Sm[         TU ]  U5       H>  u  p#[        U4S jT 5       5      (       a  UR                  nT[	        U5      -  mX#4v •  M@     g 7f)Nr   c              3   óR   >#   • U  H  u  pUTs=:*  =(       a    U:  Os  v •  M     g 7fr!   r)   )Ú.0r4   r7   Úlengths      €r   Ú	<genexpr>ÚE_pygmented_with_ranges.<locals>.MyLexer.get_tokens.<locals>.<genexpr>Ÿ   s#   øé € ÐFºv±°�u ×,Ó,¨×,Ñ,ºvùs   ƒ$')ÚsuperÚ
get_tokensÚanyÚExecutingNoder   )r‡   ÚtextÚttyper�   rŸ   Ú	__class__Úrangess       @€€r   r£   Ú2_pygmented_with_ranges.<locals>.MyLexer.get_tokensœ   sS   ùé € ØˆFÜ %¡Ñ 2°4Ö 8‘�ÜÔF¹vÓF×FÑFØ!×/Ñ/�EØœ#˜e›*Ñ$�Ø�lÔ"ò	 !9ùs   „AAr)   )rŒ   r’   r“   r”   r£   r–   Ú__classcell__)r¨   r©   s   @€r   ÚMyLexerrš   ›   s   ù† ÷	#ô 	#r   r¬   Úpython3F)Ústripnl)ÚpygmentsÚpygments.lexersr˜   ÚtypeÚ	highlightÚ	ExceptionÚ
splitlines)Ú	formatterÚcoder©   r¯   r˜   r¬   ÚlexerrG   s     `     r   Ú_pygmented_with_rangesr¸   —   sy   ø€ ÛÝ1÷#”$Ñ(¨Ó3Ó4ô #ñ ˜EÑ"€EðØ×(Ñ(¨°iÓ@ˆð ×!Ñ!Ó#Ð#øô ó à‰Ø×!Ñ!Ó#Ð#ðús   °A ÁA0Á/A0c                 óV   • U (       d"  [        U[        5      (       a  [        U5      nUeg r!   )r-   ÚstrÚAssertionError)Ú	conditionÚerrors     r   rl   rl   ­   s&   € ÞÜ�eœS×!Ñ!Ü" 5Ó)ˆEØˆð r   c                 óX   •  [        U 5      $ !   S[        U 5      R                  -  s $ = f)Nz<unprintable %s object>)rº   r±   rŒ   )r�   s    r   Úsome_strr¿   µ   s/   € ð@Ü�5‹zÐøð@Ø(¬4°«;×+?Ñ+?Ñ?Ò?ús   ‚
 �))Ú )(r/   rT   rm   Úcollectionsr   r   r   r   r   Útypingr   r	   r
   r   r   r   r   r   Ú	asttokensr   r   r   Úintr   r$   ÚASTr0   ÚboolrZ   r\   ri   ro   rt   ry   r   Úobjectr�   r¸   rl   r¿   r)   r   r   Ú<module>rÈ      s–  ðÛ 
Û Û ß 9Ñ 9ß *÷÷ ó õ
 áˆCƒL€ÙˆCƒL€ð˜cô ð*˜ ™ð *¨¨Q©ô *ð�Wð  C§G¡Gð °°c¸3°h±ô ð+˜$˜q™'ð + h¨u°Q¸°W©~Ñ&>ô +ð6�ð �aô ð 19¸hõ Eð7˜% 	¨=Ð 8Ñ9ð 7¸dô 7ð
&˜E )¨]Ð":Ñ;ð &ÀÈÈyÐZgÐOgÑIhÑ@iô &ð; %¨	°=Ð(@Ñ"Að ;ÀeÈIÐWZÈNÑF[ô ;ð ¨¡ð °xÀÀÀQÀÑ7Gð ÈGÐTUÐW[Ð\]ÑW^ÐT^ÑL_ô ô$&�fô &ò,$ô,ó@r   