
    f
              	          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        K/var/www/cvtools/html/venv/lib/python3.12/site-packages/stack_data/utils.pytruncater      sV    
3x*c&k)a/CK'%/%4j6!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 tyy}5cz#66tE6J
HS!cAg~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    D0A r   c                  .    j                   dz         S Nr,   rI   )firstrL   rM   s   r   r?   z"highlight_unique.<locals>.<lambda>?   s    EKKeai,H r   c                  8    d d d d   j                        z
  S )Nr*   rI   rK   s   r   r?   z"highlight_unique.<locals>.<lambda>@   s    U4R4[->->t-D(D r   T)r   	itertoolsgroupbyr"   r   setrepeatzip)r9   	is_commonrG   r>   rP   rL   rF   rM   s      @@@@@r   highlight_uniquerX   ,   s     S\F%--c7NO +	5KE 'CJ.K E
 F'(AB$#$HI DE	F $**40Kuk***++* 	+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,-!" 	E -0K))6>222 "34NKD0${2CDD	E 3s   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__e6I6I$JKLkEOO#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nnGooG 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   s9     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    ;K3799S>ATYY//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u,,,Fs    )super
get_tokensanyExecutingNoder   )r   textttyper   r   	__class__rangess       @r   r   z2_pygmented_with_ranges.<locals>.MyLexer.get_tokens   sZ     F % 24 8 #uFvFF!//E#e*$Ul"	#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((ui@ !!##  !!##s   A A21A2c                 B    | st        |t              rt        |      }|y r!   )r-   strAssertionError)	conditionerrors     r   ri   ri      s#    eS!"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/    @5z@(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 *  
 CLCLc * *Q *W CGG c3h +$q' +huQW~&> +6 a  19h E7%	= 89 7d 7
&E)]":; &yZgOgIh@i &;%	=(@"A ;eIWZNF[ ; xQ7G GTUW[\]W^T^L_ $&f &,$,@r   