
    h                         S SK r S SKJrJrJr  SSKJrJrJr  \(       d  SOSr	\(       d  SOSr
\(       d  S	OS
r " S S\5      rg)    N)OptionalTupleUnion   )NO_UTF8colorsupports_ansiu   └─z|_u   ├─z|__u   ──__c                       \ rS rSrSSSSS\" 5       SS4S	\\\4   S
\\\4   S\\\4   S\S\\   S\	S\S\4S jjr
S\S\4S jrS rS rS rSrg)TracebackPrinter   redblueyellow   Ncolor_errorcolor_tbcolor_highlightindenttb_base
tb_excludetb_range_starttb_range_endc	                 N   Xl         X l        X0l        SU-  U l        US:X  a>  SR	                  [
        R                  " 5       [
        R                  R                  5      nOUb  SR	                  U5      nXPl	        [        U5      U l        Xpl        Xl        [        5       U l        g)a  Initialize a traceback printer.

color_error (Union[str, int]): Color name or code for errors.
color_tb (Union[str, int]): Color name or code for traceback headline.
color_highlight (Union[str, int]): Color name or code for highlights.
indent (int): Indentation in spaces.
tb_base (Optional[str]): Optional name of directory to use to show relative paths. For
    example, "thinc" will look for the last occurence of "/thinc/" in
    a path and only show path to the right of it.
tb_exclude (tuple): List of filenames to exclude from traceback.
tb_range_start (int): The starting index from a traceback to include.
tb_range_end (int): The final index from a traceback to include. If None
    the traceback will continue until the last record.
RETURNS (TracebackPrinter): The traceback printer.
 .z{}{}Nz/{}/)r   r   r   r   formatosgetcwdpathsepr   tupler   r   r   r	   )	selfr   r   r   r   r   r   r   r   s	            R/home/james-whalen/.local/lib/python3.13/site-packages/wasabi/traceback_printer.py__init__TracebackPrinter.__init__   s    4 ' .Flc>mmBIIK=G mmG,G
+,(*_    titlereturnc                    UR                  SS5      nUR                  SS5      nU R                  (       a  [        XR                  SS9nU(       a1  SSR	                  U Vs/ s H  o`R
                  U-   PM     sn5      -   OSnU(       a  U R                  XT5      OSnS	R                  U R
                  XU5      nU$ s  snf )
zOutput custom formatted tracebacks and errors.

title (str): The message title.
*texts (str): The texts to print (one per line).
RETURNS (str): The formatted traceback. Can be printed or raised
    by custom exception.
	highlightFtbNTfgbold
 z

{}{}{}{}
)getr	   r   r   joinr   _get_tracebackr   )	r%   r*   textssettingsr-   r.   textinfomsgs	            r&   __call__TracebackPrinter.__call__4   s     LLe4	\\$%%$4$44@EKPtdii Ft!3 FGGVX35T  /2%%dkk5C
 !Gs   !B=
c                 :   U Vs/ s H)  o3S   R                  U R                  5      (       a  M'  UPM+     nnU R                  b  XR                  U R                   OXR                  S  n[	        U5       VVVVV	s/ s H'  u  nu  pgpU R                  XgXU[        U5      U5      PM)     n
nnnnn	SR                  U
5      R                  5       nSnU R                  (       a  [        XR                  SS9nSR                  XU R                  S9$ s  snf s  sn	nnnnf )Nr   r2   z
Traceback:Tr/   z

{indent}{title}
{indent}{tb})r*   r.   r   )endswithr   r   r   	enumerate_format_tracebacklenr5   stripr	   r   r   r   r   )r%   r.   r-   recordtb_rangeir"   linefnr9   tb_listtb_datar*   s                r&   r6   TracebackPrinter._get_tracebackE   s   #%Q2AY-?-?-Pf2Q   , ""T%6%67'')* 	 .7x-@
-@))D ""4rCM9U-@ 	 
 ))G$**,%MM=E299DKK : 
 	
 R
s   &DD;.Dc           	         SnXVS-
  :X  a  [         O[        [        U-  -   n	U R                  (       a/  U R                  U;   a  UR	                  U R                  S5      S   nXVS-
  :X  a  U R                  XEU5      OSnU R                  (       a  [        USS9n[        USS9nUR                  U R                  UU	UUUS9$ )Nz1{base_indent}{indent} {fn} in {path}:{line}{text}r   r3   T)r1   )	underline)base_indentrG   r   r9   rH   r"   )
	LINE_EDGE	LINE_FORK	LINE_PATHr   rsplit_format_user_errorr	   r   r   r   )
r%   r"   rG   rH   r9   rF   countr-   templater   s
             r&   rA   "TracebackPrinter._format_tracebackY   s    F AI~)9	AM<<DLLD0;;t||Q/2D>?19nt&&t	:RTr%B.D  
 	
r)   c                 
   SU-  S-   nU R                   (       a  [        X@R                  S9nU(       a5  U R                   (       a$  [        X0R                  S9nUR	                  X55      nSR                  U R                  XA5      $ )Nz  z >>>)r0   z

{}  {} {})r	   r   r   r   replacer   r   )r%   r9   rF   r-   spacingformatted_highlights         r&   rS   #TracebackPrinter._format_user_errork   sj    (V#G(8(89G++"'	6J6J"K<<	?D##DKK??r)   )	r   r   r   r   r	   r   r   r   r   )__name__
__module____qualname____firstlineno__r$   r   strintr   r   r'   r<   r6   rA   rS   __static_attributes__ r)   r&   r   r      s     (-$*+3!%!G &-38_&- S/&- sCx	&-
 &- #&- &- &- &-Pc # "
(
$@r)   r   )r    typingr   r   r   utilr   r   r	   rO   rP   rQ   objectr   rc   r)   r&   <module>rg      s?    	 ) ) / /#H	#H	#H	g@v g@r)   