
    Mh
              	       d   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 j        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'dS )$    N)OrderedDictCounterdefaultdict)	FrameTypeTracebackType)IteratorListTupleIterableCallableUnionTypeVarMapping)ASTTextTR
max_lengthc                     t          |           |k    rC|t          |          z
  dz  }|t          |          z
  |z
  }| d |         |z   | | d          z   } | S )N   )len)seqr   middlerightlefts        P/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/stack_data/utils.pytruncater      sc    
3xx*c&kk)a/CKK'%/%4%j6!CL0J    itreturnc                 D    t          t          j        |                     S N)listr   fromkeys)r   s    r   unique_in_orderr$      s    $R(()))r   atoknodec                    t          |t          t          dd                    r:t          | |j                  \  }}t          | |j        d                   \  }}||fS |                     |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677  t|44t ty}55cz#66tE6JJ
HS!cAg~r   lstc              #     K   t          |           t          j        | fd          D ]\  }|rjt                    dgt	                    z  fd}t                    D ]2 |fd           |fd            |fd           3nt          j        d          t                    E d {V  d S )	Nc                     |          dk    S )N   r)   )xcountss    r   <lambda>z"highlight_unique.<locals>.<lambda>/   s    Q r   keyFc                 L    	  |             }n# t           $ r Y d S w xY wd|<   |S )NT)
ValueError)fihighlighteds     r   highlight_indexz)highlight_unique.<locals>.highlight_index4   sE     AA!      44 !%As   
 
c                  .                                    S r!   indexgroupitems   r   r?   z"highlight_unique.<locals>.<lambda>=   s    D0A0A r   c                  6                          dz             S Nr,   rI   )firstrL   rM   s   r   r?   z"highlight_unique.<locals>.<lambda>?   s    EKKeai,H,H r   c                  F    d d d d                                        z
  S )Nr*   rI   rK   s   r   r?   z"highlight_unique.<locals>.<lambda>@   s$    U44R4[->->t-D-D(D r   T)r   	itertoolsgroupbyr"   r   setrepeatzip)r9   	is_commonrG   r>   rP   rL   rF   rM   s      @@@@@r   highlight_uniquerX   ,   sD     S\\F%-c7N7N7N7NOOO + +	5 	1KKE 'CJJ.K     E

 F F'(A(A(A(A(ABB$#O$H$H$H$H$H$HIII D D D D DEEEE	F $*400Kuk**********++ +r   r=   c                     | S r!   r)   )r=   s    r   identityrZ   G   s    Hr   )mapperrA   c             #   f  K   t          t          ||                     }t          j        t	          | t          |                    d           D ]^\  }}t	          | \  }}|rt          ||          E d {V  *t	          | \  }	}
 |t          |          t          |	                    V  _d S )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%e,,--!!" " " 	E 	E -0K)) 	E6>2222222222 "34NK)D00${2C2CDDDDDD	E 	Er   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   s9    J{U_e6I$JKKLLLkEO#5666r   c              #   ^   K   | }|r&|V  t          |          r|j        }n|j        }|$d S d S r!   )rl   f_backtb_next)rg   currents     r   
iter_stackrq   ^   sZ      5@G
 &G 	&nGGoG  & & & & &r   c                 N    t          |           r	| | j        fS | j        | j        fS r!   )rl   f_linenotb_frame	tb_linenork   s    r   frame_and_linenorv   h   s1     ;K000#[%:::r   iterablekey_funcc                     t          t                    }| D ]&}| ||                                       |           '|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   sI     F , ,xx~~%%d++++Mr   c                   "    e Zd ZdZd Zd ZeZdS )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                 ,    |j         | _         || _        d S r!   )__doc__func)selfr   s     r   __init__zcached_property.__init__   s    |			r   c                 `    || S |                      |          x}|j        | j         j        <   |S r!   )r   __dict____name__)r   obj_clsvalues       r   cached_property_wrapperz'cached_property.cached_property_wrapper   s1    ;K3799S>>ATY/0r   N)r   
__module____qualname__r   r   r   __get__r)   r   r   r~   r~      s=              &GGGr   r~   c           	          dd l }ddlm}  G fddt           |d                              } |d          }	 |                    |||           }n# t
          $ r |}Y nw xY w|                                S )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 ]?\  }}t          fdD                       r|j        }t	          |          z  ||fV  @d S )Nr   c              3   >   K   | ]\  }}|cxk    o|k     nc V  d S r!   r)   ).0r4   r7   lengths      r   	<genexpr>zE_pygmented_with_ranges.<locals>.MyLexer.get_tokens.<locals>.<genexpr>   sC      FFu,,,,,,,,FFFFFFr   )super
get_tokensanyExecutingNoder   )r   textttyper   r   	__class__rangess       @r   r   z2_pygmented_with_ranges.<locals>.MyLexer.get_tokens   s      F % 2 24 8 8 # #uFFFFvFFFFF 0!/E#e**$Ul""""	# #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   lexerrF   s     `     r   _pygmented_with_rangesr      s    OOO111111# # # # # # #$((3344 # # # GE"""E((ui@@    !!###s   A A&%A& c                 V    | s&t          |t                    rt          |          }|d S r!   )r-   strAssertionError)	conditionerrors     r   ri   ri      s8     eS!! 	*"5))E r   c                 ^    	 t          |           S #  dt          |           j        z  cY S xY w)Nz<unprintable %s object>)r   r   r   )r   s    r   some_strr      s8    @5zz@(4;;+?????s    ,)r   )(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      s0   



      9 9 9 9 9 9 9 9 9 9 * * * * * * * *                   
      GCLLGCLLc    * *Q * * * *W CG c3h    +$q' +huQW~&> + + + +6 a     19h E E E E E7%	= 89 7d 7 7 7 7
&E)]":; &yZgOgIh@i & & & &;%	=(@"A ;eIWZNF[ ; ; ; ; xQ7G GTUW[\]W^T^L_    $& & & & &f & & &,$ $ $,   @ @ @ @ @r   