Ë
    ,Tg
  ã            	       óú  — d dl Z d dlZd dlZd dlmZmZmZ d dlmZmZ d dl	m
Z
mZmZmZmZmZmZmZ d dlmZ  ed«      Z ed«      Zdefd	„Zd
ee   dee   fd„Zdede j2                  deeef   fd„Zdee   de
eeef      fd„Zdedefd„Zeedœd„Zdeeef   defd„Zdeeef   de
eeef      fd„Z deeef   deeef   fd„Z!dee   deegef   deeee   f   fd„Z" G d„ de#«      Z$d„ Z%d"d „Z&d!„ Z'y)#é    N)ÚOrderedDictÚCounterÚdefaultdict)Ú	FrameTypeÚTracebackType)ÚIteratorÚListÚTupleÚIterableÚCallableÚUnionÚTypeVarÚMapping)ÚASTTextÚTÚRÚ
max_lengthc                 ó„   — t        | «      |kD  r1|t        |«      z
  dz  }|t        |«      z
  |z
  }| d | |z   | | d  z   } | S )Né   )Úlen)Úseqr   ÚmiddleÚrightÚlefts        úa/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/stack_data/utils.pyÚtruncater      sV   € Ü
ˆ3ƒx�*ÒØœc &›kÑ)¨aÑ/ˆØœC ›KÑ'¨%Ñ/ˆØ�%�4ˆj˜6Ñ! C¨¨¨ LÑ0ˆØ€Jó    ÚitÚreturnc                 ó>   — t        t        j                  | «      «      S ©N)Úlistr   Úfromkeys)r   s    r   Úunique_in_orderr$      s   € Ü”×$Ñ$ RÓ(Ó)Ð)r   ÚatokÚnodec                 óð   — t        |t        t        dd«      «      r9t        | |j                  «      \  }}t        | |j
                  d   «      \  }}||fS | j                  |d¬«      \  \  }}\  }}||dz   fS )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      s}   € ô �$œ¤ \°2Ó6Ô7Ü   t§|¡|Ó4‰ˆˆtÜ   t§y¡y°¡}Ó5‰ˆ�Ø�cˆzÐà#×6Ñ6°tÀEÐ6ÓJÑ‰
ˆ�‘H�S˜!Ø�c˜A‘gˆ~Ðr   Úlstc              #   óx  ‡‡‡‡‡K  — t        | «      Št        j                  | ˆfd„¬«      D ]‡  \  }Š|rWt        ‰«      Šdgt	        ‰«      z  Šˆfd„}t        ‰«      D ])  Š |ˆˆfd„«      Š‰� |ˆˆˆfd„«        |ˆˆfd„«       Œ+ nt        j                  d«      Št        ‰‰«      E d {  –—†  Œ‰ y 7 Œ­w)	Nc                 ó   •— ‰|    dkD  S )Né   r)   )ÚxÚcountss    €r   Ú<lambda>z"highlight_unique.<locals>.<lambda>/   s   ø€ ÀÈÁÈQÂr   ©ÚkeyFc                 ó@   •— 	  | «       }d‰|<   |S # t         $ r Y y w xY w)NT)Ú
ValueError)ÚfÚiÚhighlighteds     €r   Úhighlight_indexz)highlight_unique.<locals>.highlight_index4   s3   ø€ ð Ù›�Að "&�˜A‘Ø�øô "ò  Ùð ús   ƒ ‘	œc                  ó&   •— ‰ j                  ‰«      S r!   ©Úindex©ÚgroupÚitems   €€r   r?   z"highlight_unique.<locals>.<lambda>=   s   ø€ °·±¸DÔ0Ar   c                  ó.   •— ‰j                  ‰‰ dz   «      S ©Nr,   rI   )ÚfirstrL   rM   s   €€€r   r?   z"highlight_unique.<locals>.<lambda>?   s   ø€ ¨E¯K©K¸¸eÀa¹iÔ,Hr   c                  ó8   •— d‰ d d d…   j                  ‰«      z
  S )Nr*   rI   rK   s   €€r   r?   z"highlight_unique.<locals>.<lambda>@   s   ø€ ¨¨U±4°R°4©[×->Ñ->¸tÓ-DÒ(Dr   T)r   Ú	itertoolsÚgroupbyr"   r   ÚsetÚrepeatÚzip)r9   Ú	is_commonrG   r>   rP   rL   rF   rM   s      @@@@@r   Úhighlight_uniquerX   ,   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   ‡B)B:Â0B8Â1B:r=   c                 ó   — | S r!   r)   )r=   s    r   ÚidentityrZ   G   s   € Ø€Hr   )ÚmapperrA   c             #   ó4  K  — t        t        || «      «      }t        j                  t	        | t        |«      «      d„ ¬«      D ]O  \  }}t	        |Ž \  }}|rt        ||«      E d {  –—†  Œ(t	        |Ž \  }	}
 |t        |«      t        |	«      «      –— ŒQ y 7 Œ0­w)Nc                 ó   — | d   d   S rO   r)   )Úts    r   r?   z#collapse_repeated.<locals>.<lambda>O   s   € ˜!˜A™$˜qš'r   r@   )r"   ÚmaprR   rS   rV   rX   )r9   Ú	collapserr[   rA   ÚkeyedÚis_highlightedrL   Úoriginal_groupÚhighlighted_groupÚkeyed_groupr8   s              r   Úcollapse_repeatedrf   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Á&1BÚframe_or_tbc                 óž   — t        t        | t        j                  t        j                  f«      «       t        | t        j                  f«      S r!   )Úassert_r-   Útypesr   r   ©rg   s    r   Úis_framerl   Y   s4   € ÜŒJ�{¤U§_¡_´e×6IÑ6IÐ$JÓKÔLÜ�k¤E§O¡OÐ#5Ó6Ð6r   c              #   ól   K  — | }|r,|–— t        |«      r|j                  }n|j                  }|rŒ+y y ­wr!   )rl   Úf_backÚtb_next)rg   Úcurrents     r   Ú
iter_stackrq   ^   s2   è ø€ Ø5@€GÙ
ØŠÜ�GÔØ—n‘n‰Gà—o‘oˆGô ùs   ‚/4²4c                 ód   — t        | «      r| | j                  fS | j                  | j                  fS r!   )rl   Úf_linenoÚtb_frameÚ	tb_linenork   s    r   Úframe_and_linenorv   h   s2   € Ü�ÔØ˜K×0Ñ0Ð0Ð0à×#Ñ# [×%:Ñ%:Ð:Ð:r   ÚiterableÚkey_funcc                 óf   — t        t        «      }| D ]  }| ||«         j                  |«       Œ |S )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)rw   rx   ÚresultrM   s       r   Úgroup_by_key_funcr|   o   s4   € ô œÓ€FÛˆØ‰x˜‹~Ñ×%Ñ% dÕ+ð à€Mr   c                   ó    — e Zd ZdZd„ Zd„ ZeZy)Úcached_propertyzù
    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                 ó4   — |j                   | _         || _        y r!   )Ú__doc__Úfunc)Úselfr�   s     r   Ú__init__zcached_property.__init__‰   s   € Ø—|‘|ˆŒØˆ�	r   c                 óv   — |€| S | j                  |«      x}|j                  | j                   j                  <   |S r!   )r�   Ú__dict__Ú__name__)r‚   ÚobjÚ_clsÚvalues       r   Úcached_property_wrapperz'cached_property.cached_property_wrapper�   s6   € Øˆ;ØˆKà37·9±9¸S³>ÐAˆ�—‘˜TŸY™Y×/Ñ/Ñ0Øˆr   N)r†   Ú
__module__Ú__qualname__r€   rƒ   rŠ   Ú__get__r)   r   r   r~   r~   �   s   „ ñòòð &�Gr   r~   c           	      óê   ‡— dd l }ddlm}  G ˆfd„dt         |d«      «      «      } |d¬«      }	 |j	                  ||| «      }|j                  «       S # t
        $ r |}Y |j                  «       S w xY w)Nr   )Úget_lexer_by_namec                   ó"   •‡ — e Zd Zˆ ˆfd„Zˆ xZS )ú'_pygmented_with_ranges.<locals>.MyLexerc              3   óª   •‡K  — dŠt         ‰| �  |«      D ]9  \  }}t        ˆfd„‰D «       «      r|j                  }‰t	        |«      z  Š||f–— Œ; y ­w)Nr   c              3   óD   •K  — | ]  \  }}|‰cxk  xr |k  nc –— Œ y ­wr!   r)   )Ú.0r4   r7   Úlengths      €r   Ú	<genexpr>zE_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˜   z2_pygmented_with_ranges.<locals>.MyLexer.get_tokensœ   sU   ùè ø€ ØˆFÜ %¡Ñ 2°4Ö 8‘��uÜÓF¹vÓFÔFØ!×/Ñ/�EØœ#˜e›*Ñ$�Ø˜U�lÓ"ñ	 !9ùs   „AA)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    ÚlexerrF   s     `     r   Ú_pygmented_with_rangesr¬   —   s{   ø€ ÛÝ1ö#”$Ñ(¨Ó3Ó4ô #ñ ˜EÔ"€EðØ×(Ñ(¨¨u°iÓ@ˆð ×!Ñ!Ó#Ð#øô ò à‰Ø×!Ñ!Ó#Ð#ðús   ²A ÁA2Á1A2c                 óB   — | st        |t        «      rt        |«      }|‚y r!   )r-   ÚstrÚAssertionError)Ú	conditionÚerrors     r   ri   ri   ­   s#   € ÙÜ�eœSÔ!Ü" 5Ó)ˆEØˆð r   c                 óX   — 	 t        | «      S #  dt        | «      j                  z  cY S xY w)Nz<unprintable %s object>)r®   r¥   r†   )r‰   s    r   Úsome_strr³   µ   s/   € ð@Ü�5‹zÐøð@Ø(¬4°«;×+?Ñ+?Ñ?Ò?ús   ‚
 �))Ú )(r/   rR   rj   Úcollectionsr   r   r   r   r   Útypingr   r	   r
   r   r   r   r   r   Ú	asttokensr   r   r   Úintr   r$   ÚASTr0   ÚboolrX   rZ   rf   rl   rq   rv   r|   Úobjectr~   r¬   ri   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   