
    H|f,                     *   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlZd dlm	Z	 d dl
mZmZ d dlmZ d dlZd dlZd dlmZ d dlmZ d d	lmZmZ d
dlmZ ej8                  d    dk(  Z e       Zd Z  e d ee             e der	 ed      n ed            d               Z!e	d        Z"d Z#d Z$d Z%dZ&dZ'dZ(e%Z)ejT                  Z+ G d de,      Z-d Z. G d dej^                        Z/d  Z0d! Z1d" Z2d# Z3e3d$        Z4 G d% d&      Z5 e5       Z6y)'    )print_functionN)datetime)contextmanager)basenamerealpath)dedent)	highlight)Terminal256Formatter)PythonLexerPython3Lexer   )SolarizedDark   c                       fd}|S )Nc                 "    t        |        | S N)setattr)fnnamevalues    i/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/icecream/icecream.py	decoratorz%bindStaticVariable.<locals>.decorator-   s    D% 	     )r   r   r   s   `` r   bindStaticVariabler   ,   s     r   	formatter)stylelexerF)ensurenlc                 P    t         }t        | |j                  |j                        S r   )colorizer	   r   r   )sselfs     r   r!   r!   3   s      DQ

DNN33r   c               #   d   K   t        j                          d  t        j                          y wr   )coloramainitdeinitr   r   r   supportTerminalColorsInWindowsr(   ;   s      MMO	OOs   .0c                  6    t        | dt        j                  i y )Nfile)printsysstderr)argss    r   stderrPrintr/   D   s    	4!cjj!r   c                 N    	 t        j                  |        y# t        $ r Y yw xY w)NFT)astliteral_eval	Exception)r"   s    r   	isLiteralr4   H   s.       s    	$$c                 n    t        |       }t               5  t        |       d d d        y # 1 sw Y   y xY wr   )r!   r(   r/   )r"   coloreds     r   colorizedStderrPrintr7   P   s.    qkG	'	) G  s   +4zic| F   z- c                       e Zd ZdZdZy)NoSourceAvailableErrora  
    Raised when icecream fails to find or access source code that's
    required to parse and analyze. This can happen, for example, when

      - ic() is invoked inside a REPL or interactive shell, e.g. from the
        command line (CLI) or with python -i.

      - The source code is mangled and/or packaged, e.g. with a project
        freezer like PyInstaller.

      - The underlying source code changed during execution. See
        https://stackoverflow.com/a/33175832.
    zFailed to access the underlying source code for analysis. Was ic() invoked in a REPL (e.g. from the command line), a frozen application (e.g. packaged with PyInstaller), or did the underlying source code change during execution?N)__name__
__module____qualname____doc__infoMessager   r   r   r:   r:   ]   s    	# r   r:   c                 *    t        |       r |        S | S r   )callable)objs    r   callOrValuerC   r   s    SM35*s*r   c                       e Zd Zd Zy)Sourcec                     | j                         j                  |      }d|v r*d|j                  j                  d   z  |z   }t	        |      }|j                         }|S )N
 r   )	asttokensget_textfirst_tokenstartr   strip)r#   noderesults      r   get_text_with_indentationz Source.get_text_with_indentationw   sY    !**406>4++11!44v=FF^Fr   N)r;   r<   r=   rP   r   r   r   rE   rE   v   s    r   rE   c                     |j                  d      }t        dt        |            D ]  }| ||   z   ||<    dj                  |      S )NTr    )
splitlinesrangelenjoin)prefixr"   linesis       r   prefixLinesAfterFirstrZ      sL    LLE1c%j! %E!H$a% 775>r   c                     |j                         }| |d   z   g|dd  D cg c]  }dt        |       z  |z    c}z   S c c}w )Nr   r   rH   )rS   rU   )rW   stringrX   lines       r   indented_linesr^      sX    EU1X!"I" 	c&kD "   "s   =c                     t        | |      }|d   dz   }|d   |d   z   dv }|rt        d|      }t        ||      }|d d |z   }dj                  |      S )Nz: r   )z''z""rH   rG   )r^   rZ   rV   )rW   argr   	arg_linesvalue_prefixlooksLikeAStringvalue_linesrX   s           r   format_pairrf      sn    vs+IR=4'LQx%)+|;%c51 u5KcrN[(E99Ur   c                 `   dt        t              vrd }|x| _        | _        | S t        j                  |       } t        t        | j                  j                  j                  | j                  j                              }|d   j                  |d   j                  fd}|| _        | S )Nsingledispatchc                  :    t        dt        j                  z         )Nz'functools.singledispatch is missing in )NotImplementedErrorr,   version)r.   kwargss     r   unsupport_py2z%singledispatch.<locals>.unsupport_py2   s    %9CKKG r   registrydispatch_cachec                 ,    | = j                          y r   )clear)clsro   rn   s    r   
unregisterz"singledispatch.<locals>.unregister   s    SMr   )dir	functoolsregisterrs   rh   dictzip__code__co_freevars__closure__cell_contents)funcrm   closurers   ro   rn   s       @@r   rh   rh      s    s9~-	 +87##D)D 3t}}--99}}002 3Gz"00H-.<<N !DOKr   c                 @    t        |       }|j                  dd      }|S )Nz\nrG   )DEFAULT_ARG_TO_STRING_FUNCTIONreplace)rB   r"   s     r   argumentToStringr      s!    &s+A			%AHr   c                   x    e Zd ZdZeZeZee	e
ddfdZd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd ZeeeeefdZy)IceCreamDebuggerz, Fc                 X    d| _         || _        || _        || _        || _        || _        y NT)enabledrW   includeContextoutputFunctionargToStringFunctioncontextAbsPath)r#   rW   r   r   r   r   s         r   __init__zIceCreamDebugger.__init__   s2     ,,#6 ,r   c                 X   | j                   rCt        j                         j                  }	  | j                  |g| }| j                  |       |sd }|S t        |      dk(  r|d   }|S |}|S # t
        $ r1}t        | j                        }|dz   |j                  z   }Y d }~ed }~ww xY w)NzError: r   r   )r   inspectcurrentframef_back_formatr:   rC   rW   r?   r   rU   )r#   r.   	callFrameouterrrW   passthroughs          r   __call__zIceCreamDebugger.__call__   s    <<,,.55I;"dll94t4 $K  Y!^q'K  K * ;$T[[1y(3??:;s   A/ /	B)8'B$$B)c                 h    t        j                         j                  } | j                  |g| }|S r   )r   r   r   r   )r#   r.   r   r   s       r   formatzIceCreamDebugger.format   s0    ((*11	dll9,t,
r   c                 (   t        | j                        }t        j                  |      j                  }|
t               | j                  ||      }|s| j                         }||z   |z   }|S | j                  sd}| j                  |||||      }|S )NrR   )
rC   rW   rE   	executingrN   r:   _formatContext_formatTimer   _formatArgs)r#   r   r.   rW   callNodecontexttimer   s           r   r   zIceCreamDebugger._format   s    T[[)##I.33(**%%i:##%D7"T)C 
 &&""8VWd<C 
r   c                     t         j                  |      }|j                  D cg c]  }|j                  |       }}t	        t        ||            }	| j                  |||	      }
|
S c c}w r   )rE   	for_framer.   rP   listrx   _constructArgumentOutput)r#   r   r   rW   r   r.   sourcera   sanitizedArgStrspairsr   s              r   r   zIceCreamDebugger._formatArgs   ss    !!),  }}& ,,S1& & S)401++FGUC
&s   A(c           
         d }|D cg c]  \  }}|| j                  |      f }}}|D cg c]  \  }}t        |      r|n
 ||      |z    }}}| j                  j                  |      }t	        |j                               dkD  }	|r| j                  nd}
||z   |
z   |z   }t	        |j                         d         | j                  kD  }|	s|rq|r4||z   g|D cg c]  \  }}t        t	        |      dz  ||        c}}z   }nG|D cg c]  \  }}t        d||       }}}t        |dj                  |            }n||z   |
z   |z   g}dj                  |      S c c}}w c c}}w c c}}w c c}}w )Nc                     d| z  S )Nz%s: r   )ra   s    r   	argPrefixz<IceCreamDebugger._constructArgumentOutput.<locals>.argPrefix  s    C<r   r   rR   r   rH   rG   )
r   r4   _pairDelimiterrV   rU   rS   contextDelimiterlineWrapWidthrf   r^   )r#   rW   r   r   r   ra   valpairStrsallArgsOnOneLinemultilineArgsr   allPairsfirstLineTooLongr   rX   rb   s                   r   r   z)IceCreamDebugger._constructArgumentOutput  s   	  GLL(#s#t//45LL "#S S>C	#(<=# #  ..33H=,779:Q>4;400G#&669IIx224Q784;M;MM, ')*&+."U  Fc 13>.  ',"U  C/	  'vtyy/CD g%(88;KKLEyyi M#(.s   E "E&#E,E2c                 Z    | j                  ||      \  }}}|dk7  rd|z  }|d|d|}|S )Nz<module>z%s():z in )_getContext)r#   r   r   filename
lineNumberparentFunctionr   s          r   r   zIceCreamDebugger._formatContext<  sC    /3/?/?x0!,*n Z'#n4N#+ZHr   c                 \    t        j                         }|j                  d      d d }d|z  S )Nz%H:%M:%S.%fz at %s)r   nowstrftime)r#   r   	formatteds      r   r   zIceCreamDebugger._formatTimeF  s-    llnLL/4	)##r   c                     |j                   }t        j                  |      }|j                  } | j                  rt
        nt        |j                        }|||fS r   )linenor   getframeinfofunctionr   r   r   r   )r#   r   r   r   	frameInfor   filepaths          r   r   zIceCreamDebugger._getContextK  sO    __
((3	"++A 3 3H9CUCUV^33r   c                     d| _         y r   r   r#   s    r   enablezIceCreamDebugger.enableS  s	    r   c                     d| _         y )NFr   r   s    r   disablezIceCreamDebugger.disableV  s	    r   c                    t        d t               j                         D              }|rt        d      |t        ur|| _        |t        ur|| _        |t        ur|| _        |t        ur|| _        |t        ur|| _	        y y )Nc              3   >   K   | ]  \  }}|d k7  s|t         u   yw)r#   N)_absent).0kvs      r   	<genexpr>z3IceCreamDebugger.configureOutput.<locals>.<genexpr>\  s%      "E QqVAL"Es   z/configureOutput() missing at least one argument)
alllocalsitems	TypeErrorr   rW   r   r   r   r   )r#   rW   r   r   r   r   noParameterProvideds          r   configureOutputz IceCreamDebugger.configureOutputY  s     " "E$*HNN$4"E EMNN  DK("0Dg-':D$("0D("0D )r   N)r;   r<   r=   r   DEFAULT_LINE_WRAP_WIDTHr   DEFAULT_CONTEXT_DELIMITERr   DEFAULT_PREFIXDEFAULT_OUTPUT_FUNCTIONr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sl    N+M0, 7%5e %	-&
&	8 t$
4 &-W,3G'.1r   r   )7
__future__r   r1   r   pprintr,   r   ru   
contextlibr   os.pathr   r   textwrapr   r%   r   pygmentsr	   pygments.formattersr
   pygments.lexersr   PyLexerr   Py3Lexercoloringr   version_infoPYTHON2objectr   r   r!   r(   r/   r4   r7   r   r   r   r   pformatr   OSErrorr:   rC   rE   rZ   r^   rf   rh   r   r   icr   r   r   <module>r      sJ   & 
   
   % &     5 L # A!# ( K!5M!JKWe$Xu5MO4O L4
  "    . !' $W $*+Y 
.  r1 r1j r   