
    daf;             	          d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	Z	ddl
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mZmZmZmZmZmZ ddlmZ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$Z$dd
l%m&Z& ddl'm(Z( e)dk(  re) dndZ* edddg      Z+d e+_,         edg d      Z- edg d      Z. e(e/      j`                  dz  Z1 G d de
jd                        Z3 G d d      Z4 G d d      Z5 G d de5      Z6 e        G d  d!             Z7 e        G d" d#e4e7e
jd                               Z8e e        G d$ d%e5e7e
jd                                      Z9e e        G d& d'e6e7e
jd                                      Z: G d( d)e
jd                        Z;d*Z<d+Z= ej|                  d, ej~                  e<      d- ej~                  e=      d.      Z@ G d/ d0      ZA G d1 d2eAe
jd                        ZB G d3 d4eAe
jd                        ZC G d5 d6e
jd                        ZD G d7 d8e
jd                        ZE G d9 d:e
jd                        ZF G d; d<e
jd                        ZG G d= d>      ZH G d? d@e
jd                        ZI G dA dBe
jd                        ZJdZK G dC dD      ZL G dE dFe4eLe
jd                        ZMe G dG dHe5eLe
jd                               ZN G dI dJe
jd                        ZOe)dk(  r e
j                          yy)KzTest cases for traceback module    )
namedtuple)StringION)support)Errorcaptured_outputcpython_only	ALWAYS_EQrequires_debug_rangeshas_no_debug_rangesrequires_subprocess)TESTFNunlink)assert_python_okassert_python_failure)forget)partial)Path__main__. codeco_filenameco_namec                     t        dg      S )N)   r   r   r   )iter)_s    ./root/Python-3.12.4/Lib/test/test_traceback.py<lambda>r   !   s    4#7     frame)f_code	f_globalsf_localstb)tb_frame	tb_linenotb_nexttb_lastizlevenshtein_examples.jsonc                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Z e       d        Zd Zd Zd Zd Zd Zd Zd Zy)TracebackCasesc                 x    	  |        t        d      # |$ r }t        j                  ||      cY d }~S d }~ww xY w)Nzcall did not raise exception)
ValueError	tracebackformat_exception_only)selffuncexcvalues       r   get_exception_formatz#TracebackCases.get_exception_format-   s?    	=F ;<<  	?223>>	?s    9499c                     t        ddd       y )Nzdef fact(x):
	return x!
?execcompiler0   s    r   syntax_error_with_caretz&TracebackCases.syntax_error_with_caret5   s    -sF;r    c                     t        ddd       y )Nz1 +
r6   r7   r8   r:   s    r   syntax_error_with_caret_2z(TracebackCases.syntax_error_with_caret_28   s    f%r    c                     t        ddd       y )Nzf(x, y for y in range(30), z)r6   r7   r8   r:   s    r   syntax_error_with_caret_rangez,TracebackCases.syntax_error_with_caret_range;   s    /f=r    c                     t        ddd       y )Nz def spam():
  print(1)
 print(2)r6   r7   r8   r:   s    r   syntax_error_bad_indentationz+TracebackCases.syntax_error_bad_indentation>   s    4c6Br    c                     t        ddd       y )Nu   Python = "Ṕýţĥòñ" +r6   r7   r8   r:   s    r   !syntax_error_with_caret_non_asciiz0TracebackCases.syntax_error_with_caret_non_asciiA   s    =sFKr    c                     t        ddd       y )Nz	 print(2)r6   r7   r8   r:   s    r   syntax_error_bad_indentation2z,TracebackCases.syntax_error_bad_indentation2D   s    S&)r    c                     t        ddd       y )Nz
blech  (  r6   r7   r8   r:   s    r    tokenizer_error_with_caret_rangez/TracebackCases.tokenizer_error_with_caret_rangeG   s    c6*r    c                 X   | j                  | j                  t              }| j                  t	        |      d       | j                  |d   j                         dk(         | j                  d|d          | j                  |d   j                  d      |d   j                  d             | j                  |d   j                  d      d       | j                  | j                  t              }| j                  d|d          | j                  |d   j                  d      d       | j                  |d   j                  d      dz   |d   j                  d             | j                  |d   j                  d      d       | j                  | j                  t              }| j                  d|d          | j                  |d   j                  d      d       | j                  |d   j                  d      dz   |d   j                  d             | j                  |d   j                  d      d       | j                  | j                  t              }| j                  d|d          | j                  |d   j                  d      d       | j                  |d   j                  d	      |d   j                  d             | j                  |d   j                  d      t	        d
             | j                  | j                  t              }| j                  d|d          | j                  |d   j                  d      d       | j                  |d   j                  d      |d   j                  d             | j                  |d   j                  d      d       y )N      z	return x!^   !
+yzy for y in range(30)()r4   r;   SyntaxErrorassertEquallen
assertTruestripassertInfindcountr=   rC   r?   rG   r0   errs     r   
test_caretzTracebackCases.test_caretJ   s   ''(D(D(35S1%A+56c3q6"QS)3q6;;s+;<Qc*A.''(F(F(35c3q6"Qd+Q/QS)A-s1v{{3/?@Qc*A.''(N(N(35c3q6"Qd+Q/QS)A-s1v{{3/?@Qc*A.''(J(J(35c3q6"Qd+Q/QS)3q6;;s+;<Qc*C0F,GH''(M(M(35c3q6"Qd+Q/QS)3q6;;s+;<Qc*A.r    c                     t        dd      }t        j                  t         |      }| j                  t	        |      d       | j                  |d   j                         d       y )Nerror)zx.py   N
bad syntax   rJ   r`   )rR   r.   r/   rS   rT   rV   )r0   r2   r[   s      r   test_nocaretzTracebackCases.test_nocareto   sO    '#CD--k3?S1%Q6r    c                    	 t        t        d      5 }|j                  d       d d d        t        ddt              \  }}}|j	                         }| j                  t        |      d       | j                  |d   d       | j                  d|d	          | j                  |d
   d       | j                  |d   d       t        t               y # 1 sw Y   xY w# t        t               w xY w)Nwz
x = 1 / 0
-Xno_debug_rangesrI   r   "   Traceback (most recent call last):s   line 1, in <module>rJ   rL          x = 1 / 0ra   #   ZeroDivisionError: division by zero)	openr   writer   
splitlinesrS   rT   rW   r   )r0   fr   stderrliness        r   'test_no_caret_with_no_debug_ranges_flagz6TracebackCases.test_no_caret_with_no_debug_ranges_flagu   s    	fc" 'a&' 1'1LAq& %%'ESZ+U1X'LMMM0%(;U1X'78U1X'MN6N' ' 6Ns"   C CBC CC C-c                 
   t        j                  d      }	 t        t        d      5 }|j	                  |       d d d        t        ddt              \  }}}|j                         }| j                  t        |      d       | j                  |d   d       | j                  d|d	          | j                  |d
   d       | j                  |d   d       t        t               y # 1 sw Y   xY w# t        t               w xY w)Nz
            import traceback
            try:
                x = 1 / 0
            except:
                traceback.print_exc()
            rd   re   rf   rI   r   rg   s   line 4, in <module>rJ   rL   rh   ra   ri   )textwrapdedentrj   r   rk   r   rl   rS   rT   rW   r   )r0   r   rm   r   rn   ro   s         r   8test_no_caret_with_no_debug_ranges_flag_python_tracebackzGTracebackCases.test_no_caret_with_no_debug_ranges_flag_python_traceback   s       	fc" a ,'1LAq& %%'ESZ+U1X'LMMM0%(;U1X'78U1X'MN6N  6Ns"   C1 C%BC1 %C.*C1 1Dc                 ,   t        j                  d      }	 t        t        d      5 }|j	                  |       d d d        t        t              \  }}}| j                  |d       t        t               y # 1 sw Y   >xY w# t        t               w xY w)Na>  
                import sys
                from weakref import ref

                sys.setrecursionlimit(15)

                def f():
                    ref(lambda: 0, [])
                    f()

                try:
                    f()
                except RecursionError:
                    pass
        rd   r   )rr   rs   rj   r   rk   r   rS   r   )r0   r   rm   rcr   s        r   %test_recursion_error_during_tracebackz4TracebackCases.test_recursion_error_during_traceback   sy       	fc" a (/HB1R#6N  6Ns!   B A6-B 6A?;B Bc                    | j                  | j                  t              }| j                  t	        |      d       | j                  |d   j                         d       | j                  d|d          | j                  |d   j                  d      dz   |d   j                  d             | j                  | j                  t              }| j                  t	        |      d       | j                  |d   j                         d       y )NrI   rJ   zprint(2)rK   rL   )ra   )	r4   rA   IndentationErrorrS   rT   rV   rW   rX   rE   rZ   s     r   test_bad_indentationz#TracebackCases.test_bad_indentation   s    ''(I(I(8:S1%Q4c3q6"QS)A-s1v{{3/?@ ''(J(J(8:S1%Q4r    c                 ~    t               }t        j                  |j                  |      }| j	                  |dg       y )NzKeyboardInterrupt
)KeyboardInterruptr.   r/   	__class__rS   )r0   elsts      r   test_base_exceptionz"TracebackCases.test_base_exception   s4    --akk1=456r    c                 L    G d dt               }t        j                  | |             }| j                  t	        |      d       d}|j
                  dv r|j                  }n'dj                  |j
                  |j                  g      }| j                  |d   |d|d	       y )
Nc                       e Zd Zd Zy)?TracebackCases.test_format_exception_only_bad__str__.<locals>.Xc                     ddz   y NrJ   r    r:   s    r   __str__zGTracebackCases.test_format_exception_only_bad__str__.<locals>.X.__str__   	    !r    N__name__
__module____qualname__r   r   r    r   Xr          r    r   rJ   <exception str() failed>)r   builtinsr   r   : rN   )	Exceptionr.   r/   rS   rT   r   r   joinr0   r   r[   	str_valuestr_names        r   %test_format_exception_only_bad__str__z4TracebackCases.test_format_exception_only_bad__str__   s    		 	 --a5S1%.	<<33~~Hxxq~~ >?HQx!CDr    c                    	 dd l 	dd lj                  	j                  ddgj                  j
                        }|j                         \  }}t        |d      j                         d    	fd} |dddd	       d
D ]b  }|dk(  rd}n
|dk(  rd}nd} |dj                  |      ||d        |dj                  |      ||d        |dj                  |      ||d       d  |dddd       y )Nr   -cz&import sys; print(sys.stdout.encoding)stdoutrn   asciic                 X   	 t        t        d|      5 }|j                  dj                  | |             d d d        j	                  j
                  t        gj                  j                        }|j                         \  }}|j                        j                         }t        t               |j                  d      }|j                        }	dj                  |	      }
dj                  |	      }j                  d|z  |d	   d
j                  |d	   |             j                  |d   j                  |
      dj                  |d   |
             |d   }j                  ||k(  dj                  ||             y # 1 sw Y   VxY w# t        t               w xY w)Nrd   )encodingz}{0}if 1:
                        import traceback;
                        raise RuntimeError('{1}')
                        r   backslashreplacezraise RuntimeError('{0}')zRuntimeError: {0}zline %srJ   z)Invalid line number: {0!r} instead of {1}rL   z.Invalid traceback line: {0!r} instead of {1!r}ra   z-Invalid error message: {0!r} instead of {1!r})rj   r   rk   formatPopen
executablePIPESTDOUTcommunicatedecoderl   r   encoderW   rU   endswith)
firstlinesmessagecharsetlinenooutputprocessr   rn   encoded_messagemessage_asciierr_lineerr_msgactual_err_msgoutput_encodingr0   
subprocesssyss                r   do_testz1TracebackCases.test_encoded_file.<locals>.do_test   s   &#8 9FLL " #F:w799 %**CNNF+C%??:3D3D + F!(!4!4!67BBDv &nn_-?AO ,22?CM299-HH)00?GMM9v-q	;BB1Iv'( OOF1I..x8@GG1Ix)* $AYNOONg5?FF"G-.;9 9 vs"   F "FA2F FF F)r   foora   )r   z
iso-8859-1utf-8GBKr   u   丂儀u   hé hoz# coding: {0}
rI   z#!shebang
# coding: {0}
   z 	
# coding: {0}
zx=0
# coding: GBK
r   )
r   r   r   r   r   r   r   strrl   r   )
r0   r   r   rn   r   r   textr   r   r   s
   `      @@@r   test_encoded_filez TracebackCases.test_encoded_file   s   
 	
 ""CNND$L$N*4//*4*;*; # = !,,.fg.99;A>"	.H 	E7A&> 	&G'!E!%!%,,W5'1&077@'1&,33G<'1&	& 	&
GQ?r    c                     t        j                  d      }t        d|      \  }}}g d}| j                  |j	                         |       y )Na  
            import sys
            import traceback

            class PrintExceptionAtExit(object):
                def __init__(self):
                    try:
                        x = 1 / 0
                    except Exception as e:
                        self.exc = e
                        # self.exc.__traceback__ contains frames:
                        # explicitly clear the reference to self in the current
                        # frame to break a reference cycle
                        self = None

                def __del__(self):
                    traceback.print_exception(self.exc)

            # Keep a reference in the module namespace to call the destructor
            # when the module is unloaded
            obj = PrintExceptionAtExit()
        r   )rg   s&     File "<string>", line 8, in __init__ri   )rr   rs   r   rS   rl   )r0   r   rv   r   rn   expecteds         r   test_print_traceback_at_exitz+TracebackCases.test_print_traceback_at_exit   sN        , .dD9FF< 	**,h7r    c                     t               }t        j                  t        t        d      d |       | j	                  |j                         d       y N	projectorfileException: projector
r   r.   print_exceptionr   rS   getvaluer0   r   s     r   test_print_exceptionz#TracebackCases.test_print_exception?  s?    !!y-t&	
 	*,DEr    c                     t               }t        j                  t        d      |       | j	                  |j                         d       y r   r   r   s     r   test_print_exception_excz'TracebackCases.test_print_exception_excF  s6    !!)K"8vF*,DEr    c                 .   t        d      }t        j                  |      }| j                  |dg       | j	                  t
        d      5  t        j                  |j                  |       d d d        | j	                  t
        d      5  t        j                  |j                  |j                         d d d        | j	                  t        d      5  t        j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   KxY w# 1 sw Y   y xY w)Nr   r   zBoth or neitherr%   zpositional-only)r2   )	r   r.   format_exceptionrS   assertRaisesRegexr-   r~   __traceback__	TypeError)r0   r   r   s      r   test_format_exception_excz(TracebackCases.test_format_exception_excK  s    k"++A.":!;<##J0AB 	7&&q{{A6	7##J0AB 	H&&q{{qG	H##I/@A 	.&&1-	. 	.		7 	7	H 	H	. 	.s$   
!C3	,C?D3C<?DDc                 f    t        j                  t        d            }| j                  |dg       y )Nr   r   )r.   r/   r   rS   r   s     r   test_format_exception_only_excz-TracebackCases.test_format_exception_only_excV  s+    00;1GH":!;<r    c                    d}t               }t        j                  d |       | j                  |j	                         |       t               }t        j                  d d d |       | j                  |j	                         |       t               }t        j
                  d |       | j                  |j	                         |       | j                  t        j                  d       |       | j                  t        j                  d       |g       | j                  t        j                  d d d       |g       | j                  t        j                  d       |g       | j                  t        j                  d d       |g       y )NzNoneType: None
r   )	r   r.   r   rS   r   	print_exc
format_excr   r/   )r0   NONE_EXC_STRINGexcfiles      r   test_exception_is_Nonez%TracebackCases.test_exception_is_NoneZ  s@   ,*!!$W5))+_=*!!$dA))+_=*Dw/))+_=--d3_E33D9O;LM&&tT48?:K	M++D1O3D	F++D$7/9J	Lr    c                 l   | j                  t        t        j                  t        j
                              d       | j                  t        t        j                  t        j                              d       | j                  t        t        j                  t        j                              d       y )NzL(exc, /, value=<implicit>, tb=<implicit>, limit=None, file=None, chain=True)zA(exc, /, value=<implicit>, tb=<implicit>, limit=None, chain=True)z(exc, /, value=<implicit>))rS   r   inspect	signaturer.   r   r   r/   r:   s    r   test_signatureszTracebackCases.test_signaturesq  s    !!)";";<=2	4
 	!!)"<"<=>	
 	!!)"A"ABC(	*r    N)r   r   r   r4   r;   r=   r?   rA   rC   rE   rG   r\   rb   rp   rt   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r    r   r+   r+   )   s    =<&>CL*+#/J7&0257E C@ C@J8>FF
	.=L.*r    r+   c                   F    e Zd ZddZej                  j
                  dz   Zy)"PurePythonExceptionFormattingMixinc                     	  |        | j                  d       y #  t        j                         j                         || cY S xY w)NNo exception thrown.)failr.   r   rl   )r0   callableslice_start	slice_ends       r   get_exceptionz0PurePythonExceptionFormattingMixin.get_exception  sA    	NJII,-	N'')446{9MMs	    'ArL   Nr   )r   r   r   r   __code__co_firstlinenocallable_liner   r    r   r   r     s     N "**99A=Mr    r   c                   J    e Zd ZdZddZej
                  j                  dz   Zy)CAPIExceptionFormattingMixinr   c                    ddl m} 	  |        | j                  d       y # t        $ r_}t	        d      5 } ||| j
                         d d d        n# 1 sw Y   nxY wj                         j                         || cY d }~S d }~ww xY w)Nr   exception_printr   rn   )	_testcapir   r   r   r   LEGACYr   rl   )r0   r   r   r   r   r   tbstderrs          r   r   z*CAPIExceptionFormattingMixin.get_exception  s{    -	KJII,- 	K * 0h4;;/0 0 0$$&113K	JJ	Ks1   ! 	B	BA		BA	'B>B	B	ra   Nr   )r   r   r   r   r   r   r   r   r   r    r   r   r     s%    FK "**99A=Mr    r   c                       e Zd ZdZy)"CAPIExceptionFormattingLegacyMixinrJ   N)r   r   r   r   r   r    r   r   r     s    Fr    r   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!y )!#TracebackErrorLocationCaretTestBasezF
    Tests for printing code error expressions as part of PEP 657
    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      t        d      )Nzbasic caret testsr-   r   r    r   rm   z?TracebackErrorLocationCaretTestBase.test_basic_caret.<locals>.f  s    %&9::r    +Traceback (most recent call last):
  File "", line *, in get_exception
    callable()
  File "rJ   zm, in f
    if True: raise ValueError("basic caret tests")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
r   r   __file__r   r   rS   rl   )r0   rm   lineno_f
expected_fresult_liness        r   test_basic_caretz4TracebackErrorLocationCaretTestBase.test_basic_caret  s    	; ::,,j););(< =j! 5CC 	 ))!,z'<'<'>?r    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      t        d      )Nu   Ĥellö Wörldr   r   r    r   f_with_unicodezRTracebackErrorLocationCaretTestBase.test_line_with_unicode.<locals>.f_with_unicode  s    %&677r    r   r  r  rJ   uq   , in f_with_unicode
    if True: raise ValueError("Ĥellö Wörld")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
r  )r0   r  r  r  r  s        r   test_line_with_unicodez:TracebackErrorLocationCaretTestBase.test_line_with_unicode  s    	8 "**99j););(< =j! 5== 	 )).9z'<'<'>?r    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                  $    dt         dt        fd} y )Nareturnc                      y)Nr   r   )r  s    r   r   zcTracebackErrorLocationCaretTestBase.test_caret_in_type_annotation.<locals>.f_with_type.<locals>.foo  s    r    )THIS_DOES_NOT_EXISTint)r   s    r   f_with_typezVTracebackErrorLocationCaretTestBase.test_caret_in_type_annotation.<locals>.f_with_type  s    *  r    r   r  r  rJ   za, in f_with_type
    def foo(a: THIS_DOES_NOT_EXIST ) -> int:
               ^^^^^^^^^^^^^^^^^^^
r  )r0   r  r  r  r  s        r   test_caret_in_type_annotationzATracebackErrorLocationCaretTestBase.test_caret_in_type_annotation  s    	 ''66j););(< =j! 533 	 ))+6z'<'<'>?r    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      t        d      )Nzerror over multiple linesr   r   r    r   f_with_multilinez]TracebackErrorLocationCaretTestBase.test_caret_multiline_expression.<locals>.f_with_multiline  s    %+ r    r   r  r  rJ   zS, in f_with_multiline
    if True: raise ValueError(
             ^^^^^^^^^^^^^^^^^r  r0   r  r  r  r  s        r   test_caret_multiline_expressionzCTracebackErrorLocationCaretTestBase.test_caret_multiline_expression  s    	
 $,,;;j););(< =j! 5-- 	 ))*:;z'<'<'>?r    c           	         t        j                  d      fd}|j                  j                  }dt         d| j
                   dt         d|dz    d	}| j                  |      }| j                  ||j                                y )Nz
        def foo(*args, **kwargs):
            pass

        a, b, c = 1, 2, 3

        foo(a, z
                for z in
                    range(10), b, c)
        c                      t         dd      S )Nr6   r7   r8   )r   s   r   r  zjTracebackErrorLocationCaretTestBase.test_caret_multiline_expression_syntax_error.<locals>.f_with_multiline  s    4f--r    r   r  r  rL   z, in f_with_multiline
    return compile(code, "?", "exec")
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "?", line 7
    foo(a, z
           ^)	rr   rs   r   r   r  r   r   rS   rl   )r0   r  r  r  r  r   s        @r   ,test_caret_multiline_expression_syntax_errorzPTracebackErrorLocationCaretTestBase.test_caret_multiline_expression_syntax_error  s      	  		. $,,;;j););(< =j! 5 	 ))*:;z'<'<'>?r    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      dddz  z   S NrL   rJ   r   r   r   r    r   r  zdTracebackErrorLocationCaretTestBase.test_caret_multiline_expression_bin_op.<locals>.f_with_multiline  s    A r    r   r  r  rL   z-, in f_with_multiline
    2 + 1 /
        ^^^r  r  s        r   &test_caret_multiline_expression_bin_opzJTracebackErrorLocationCaretTestBase.test_caret_multiline_expression_bin_op  s    	 $,,;;j););(< =j! 5 	 ))*:;z'<'<'>?r    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      d} d| dz  z   dz   S N   
   r      r   divisors    r   f_with_binary_operatorzcTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators.<locals>.f_with_binary_operator%  s    G!#b((r    r   r  r  rL   zY, in f_with_binary_operator
    return 10 + divisor / 0 + 30
                ~~~~~~~~^~~
r  r0   r*  r  expected_errorr  s        r   test_caret_for_binary_operatorszCTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators$  s    	) *22AAj););(< =j! 5,, 	 ))*@A~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      d} d| dz  z   dz   S r$  r   )   áóís    r   r*  zpTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators_with_unicode.<locals>.f_with_binary_operator6  s    F
?R''r    r   r  r  rL   uT   , in f_with_binary_operator
    return 10 + áóí / 0 + 30
                ~~~~^~~
r  r+  s        r   ,test_caret_for_binary_operators_with_unicodezPTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators_with_unicode5  s    	( *22AAj););(< =j! 5(( 	 ))*@A~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      d} d| dz  z   dz   S r$  r   r(  s    r   r*  zlTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators_two_char.<locals>.f_with_binary_operatorG  s    G1$r))r    r   r  r  rL   z[, in f_with_binary_operator
    return 10 + divisor // 0 + 30
                ~~~~~~~~^^~~
r  r+  s        r   (test_caret_for_binary_operators_two_charzLTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators_two_charF  s    	* *22AAj););(< =j! 5-- 	 ))*@A~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      d} d}| |z   S )NrJ   r   r   )r  bs     r   r*  zTracebackErrorLocationCaretTestBase.test_caret_for_binary_operators_with_spaces_and_parenthesis.<locals>.f_with_binary_operatorX  s    AAq= r    r   r  r  ra   zN, in f_with_binary_operator
    return ( a   )   + b
           ~~~~~~~~~~^~~
r  r+  s        r   ;test_caret_for_binary_operators_with_spaces_and_parenthesisz_TracebackErrorLocationCaretTestBase.test_caret_for_binary_operators_with_spaces_and_parenthesisW  s    	!
 *22AAj););(< =j! 5)) 	 ))*@A~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                  $    ddd ii} | d   d   d   S NxrP   zr   	some_dicts    r   f_with_subscriptzVTracebackErrorLocationCaretTestBase.test_caret_for_subscript.<locals>.f_with_subscriptj  s$    sDk*IS>#&s++r    r   r  r  rL   z^, in f_with_subscript
    return some_dict['x']['y']['z']
           ~~~~~~~~~~~~~~~~~~~^^^^^
r  r0   r@  r  r,  r  s        r   test_caret_for_subscriptz<TracebackErrorLocationCaretTestBase.test_caret_for_subscripti  s    	, $,,;;j););(< =j! 544 	 ))*:;~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                  2    dddddiiii} | d   d   d   d   S )N   ó   á   íthetarJ   betar   r>  s    r   r@  z^TracebackErrorLocationCaretTestBase.test_caret_for_subscript_unicode.<locals>.f_with_subscript{  s3    tgq\&:;<IT?4(.v66r    r   r  r  rL   uq   , in f_with_subscript
    return some_dict['ó']['á']['í']['beta']
           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
r  rA  s        r    test_caret_for_subscript_unicodezDTracebackErrorLocationCaretTestBase.test_caret_for_subscript_unicodez  s    	7 $,,;;j););(< =j! 5<< 	 ))*:;~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                      g } dx}}||    |z   S NrJ   r   )r  r7  cs      r   r*  zxTracebackErrorLocationCaretTestBase.test_caret_for_subscript_with_spaces_and_parenthesis.<locals>.f_with_binary_operator  s    AIAa?Q&&r    r   r  r  ra   zV, in f_with_binary_operator
    return b     [    a  ] + c
           ~~~~~~^^^^^^^^^
r  r+  s        r   4test_caret_for_subscript_with_spaces_and_parenthesiszXTracebackErrorLocationCaretTestBase.test_caret_for_subscript_with_spaces_and_parenthesis  s    	'
 *22AAj););(< =j! 5++ 	 ))*@A~'@'@'BCr    c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                  *    d} | dk(  r| dk(  sJ d       y )Nra   rJ   rL   z
Bug found?r   )tests    r   f_assertzUTracebackErrorLocationCaretTestBase.test_caret_for_failed_assertion.<locals>.f_assert  s!    D198L8*r    r   r  r  rL   zb, in f_assert
    assert test == 1 and test == 2, "Bug found?"
           ^^^^^^^^^^^^^^^^^^^^^^^
r  )r0   rS  r  r,  r  s        r   test_caret_for_failed_assertionzCTracebackErrorLocationCaretTestBase.test_caret_for_failed_assertion  s    	9 $$33j););(< =j! 533 	 ))(3~'@'@'BCr    c           	         t        dt        d      }t        t        d      5 }|j                  d       d d d        | j	                  t
        t               t        t        |      }| j                  |      }|j                  }dt         d| j                   dt         d| d	}| j                  ||j                                y # 1 sw Y   xY w)	Nz1 / 0 / 1 / 2
r7   rd   z1 $ 0 / 1 / 2
r   r  r  z*, in <module>
    1 $ 0 / 1 / 2
    ^^^^^
)r9   r   rj   rk   
addCleanupr   r   r7   r   r   r  r   rS   rl   )r0   bytecoder   r1   r  r  r,  s          r   /test_traceback_specialization_with_syntax_errorzSTracebackErrorLocationCaretTestBase.test_traceback_specialization_with_syntax_error  s    ,ff=&# 	*$JJ()	* 	'tX&))$/**j););(< =hhxj 1 	 	~'@'@'BC#	* 	*s   CCc                    d}t        |t        d      }t        t        d      5 }|j                  |       d d d        | j	                  t
        t               t        t        |      }| j                  |      }|j                  }dt         d| j                   dt         d| d| dd	t        d
      z  dz    d}| j                  ||j                                y # 1 sw Y   xY w)Na	  if True: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar7   rd   r   r  r  z, in <module>
    z
     z	if True: a   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^rN   )r9   r   rj   rk   rV  r   r   r7   r   r   r  r   rT   rS   rl   )r0   sourcerW  r   r1   r  r  r,  s           r   test_traceback_very_long_linezATracebackErrorLocationCaretTestBase.test_traceback_very_long_line  s    (6662&# 	$JJv	'tX&))$/**j););(< =hhxj 1( s;'''12"6 	 	~'@'@'BC!	 	s   CC%c           	          d }|j                   j                  }dt         d| j                   dt         d|dz    d	}| j	                  |      }| j                  ||j                                y )Nc                  &    ddd ii} | d   d   d    y r;  r   r>  s    r   r@  z]TracebackErrorLocationCaretTestBase.test_secondary_caret_not_elided.<locals>.f_with_subscript  s!    sDk*IcN3$r    r   r  r  rL   zP, in f_with_subscript
    some_dict['x']['y']['z']
    ~~~~~~~~~~~~~~~~~~~^^^^^
r  rA  s        r   test_secondary_caret_not_elidedzCTracebackErrorLocationCaretTestBase.test_secondary_caret_not_elided  s    	% $,,;;j););(< =j! 5-- 	 ))*:;~'@'@'BCr    c           	          d }dt          d| j                   dt          d|j                  j                  dz    d	}| j	                  |      }| j                  ||j                                y )Nc                  B    t        dt        d      t        d      g      NegrJ   rL   ExceptionGroupr-   r   r   r    r   r2   zKTracebackErrorLocationCaretTestBase.test_caret_exception_group.<locals>.exc  s    )$A	!0MNNr    C  + Exception Group Traceback (most recent call last):
  |   File "r  z2, in get_exception
  |     callable()
  |   File "rJ   aB  , in exc
  |     if True: raise ExceptionGroup("eg", [ValueError(1), TypeError(2)])
  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  | ExceptionGroup: eg (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
)r  r   r   r   r   rS   rl   )r0   r2   r,  r  s       r   test_caret_exception_groupz>TracebackErrorLocationCaretTestBase.test_caret_exception_group  s{    
	O$:Xd.@.@-A B$:Xcll.I.IA.M-N O$
% 	 ))#.~'@'@'BCr    c                 p    | j                  |      }|d   }| j                  |j                         |       y )Nr   )r   rS   lstrip)r0   r1   expected_specializationr  specialization_lines        r   assertSpecializedz5TracebackErrorLocationCaretTestBase.assertSpecialized  s8    ))$/*2.,3357NOr    c                 >   | j                  d d       | j                  d d       | j                  d d       | j                  d d       | j                  d d       | j                  d	 d       | j                  d
 d       | j                  d d       | j                  d d       | j                  d d       | j                  d d       | j                  d d       | j                  d d       | j                  d d       | j                  d d       y )Nc                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>
  s
    qs r    z~^~c                      ddz  dz  S NrJ   r   ra   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  s    qs1u r    c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  
    q1u r    z~~^~~c                      ddz  dz  S rp  r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  s    q1uqy r    c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  
    q!t r    z~^~~c                      ddz  dz  S rp  r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  s    q!tAv r    c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  s
    qqy r    z	~~~~~^~~~c                      ddz  dz  S )NrJ   r   r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  s    qqyQ r    c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  ru  r    z~~^~c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  ru  r    z~^^~c                      ddz  dz  S NrJ   r   rI   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>  s    q!tQw r    c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>   s
    qAv r    z~~^^~~c                      ddz  dz  S r|  r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>"  s    qAv{ r    c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>$  rr  r    z~~^^~c                      ddz  S r   r   r   r    r   r   zTTracebackErrorLocationCaretTestBase.test_specialization_variations.<locals>.<lambda>&  rr  r    z~^^~~)rl  r:   s    r   test_specialization_variationszBTracebackErrorLocationCaretTestBase.test_specialization_variations	  s#   {&+	-}&+	-}&-	/0&-	/|&,	.~&,	.0&1	36&1	3|&,	.|&,	.&,	.~&.	02&.	0}&-	/}&-	/r    c                 8  	 d d 		fd}| j                  |      }|j                  j                  }j                  j                  }dt         d| j                   dt         d|dz    dt         d|dz    d	}| j                  ||j                                	fd
}| j                  |      }|j                  j                  }dt         d| j                   dt         d|dz    dt         d|dz    d	}| j                  ||j                                y )Nc                     t         N)r   r1   s    r   	dec_errorz`TracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct.<locals>.dec_error*  s    Or    c                     | S r  r   r  s    r   dec_finez_TracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct.<locals>.dec_fine,  s    Kr    c                       d               } y )Nc                       y r  r   r   r    r   gzkTracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct.<locals>.applydecs.<locals>.g/  s    r    r   )r  r  r  s    r   	applydecsz`TracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct.<locals>.applydecs.  s      r    r   r  r  rJ   z5, in applydecs
    @dec_error
     ^^^^^^^^^
  File "z#, in dec_error
    raise TypeError
c                  .     G d d                    } y )Nc                       e Zd Zy)qTracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct.<locals>.applydecs_class.<locals>.AN)r   r   r   r   r    r   Ar  B  s    r    r  r   )r  r  r  s    r   applydecs_classzfTracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct.<locals>.applydecs_classA  s    M  r    z;, in applydecs_class
    @dec_error
     ^^^^^^^^^
  File ")r   r   r   r  r   rS   rl   )
r0   r  r  lineno_applydescslineno_dec_errorr,  r  lineno_applydescs_classr  r  s
           @@r   )test_decorator_application_lineno_correctzMTracebackErrorLocationCaretTestBase.test_decorator_application_lineno_correct)  sU   			 )))4%..==$--<<j););(< =j):Q)>(? @  j)9A)=(> ?$$ 	 	~'@'@'BC	 ))/:"1":":"I"Ij););(< =j)@1)D(E F  j)9A)=(> ?$$ 	 	~'@'@'BCr    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	d
g}| j                  ||       y )Nc                  $    d j                          y r  methodr   r    r   rm   zKTracebackErrorLocationCaretTestBase.test_multiline_method_call_a.<locals>.fT  s     r    "Traceback (most recent call last):  File "r  , in get_exception    callable()rL   , in fz    .methodz     ^^^^^^r   r  r   r   r   rS   r0   rm   actualr   s       r   test_multiline_method_call_az@TracebackErrorLocationCaretTestBase.test_multiline_method_call_aS  sz    	 ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	g}| j                  ||       y )
Nc                  $    d j                          y r  r  r   r    r   rm   zKTracebackErrorLocationCaretTestBase.test_multiline_method_call_b.<locals>.fd  s     r    r  r  r  r  r  rL   r  z
    methodr  r  s       r   test_multiline_method_call_bz@TracebackErrorLocationCaretTestBase.test_multiline_method_call_bc  sw    	 ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	d
g}| j                  ||       y )Nc                  $    d j                          y r  r  r   r    r   rm   zKTracebackErrorLocationCaretTestBase.test_multiline_method_call_c.<locals>.fs  s    & r    r  r  r  r  r  rL   r  z    . methodz      ^^^^^^r  r  s       r   test_multiline_method_call_cz@TracebackErrorLocationCaretTestBase.test_multiline_method_call_cr  sz    	 ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	g}| j                  ||       y )
Nc                      t          y r  widthr   r    r   rm   zhTracebackErrorLocationCaretTestBase.test_wide_characters_unicode_with_problematic_byte_offset.<locals>.f  s    r    r  r  r  r  r  rJ   r  u       ｗｉｄｔｈr  r  s       r   9test_wide_characters_unicode_with_problematic_byte_offsetz]TracebackErrorLocationCaretTestBase.test_wide_characters_unicode_with_problematic_byte_offset  sw    	 ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP!
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	g}| j                  ||       y )
Nc                      d} t        |       rM  r   r  s    r   rm   z[TracebackErrorLocationCaretTestBase.test_byte_offset_with_wide_characters_middle.<locals>.f  s    O_--r    r  r  r  r  r  rL   r  u%       raise ValueError(ｗｉｄｔｈ)r  r  s       r   ,test_byte_offset_with_wide_characters_middlezPTracebackErrorLocationCaretTestBase.test_byte_offset_with_wide_characters_middle  sw    	. ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP3
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	d
g}| j                  ||       y )Nc                  0    d} d}t        d | |             y r   print)wwwths     r   rm   zITracebackErrorLocationCaretTestBase.test_byte_offset_multiline.<locals>.f  s     IF!Y r    r  r  r  r  r  rI   r  u       print(1, ｗｗｗ(z             ^^^^^^^r  r  s       r   test_byte_offset_multilinez>TracebackErrorLocationCaretTestBase.test_byte_offset_multiline  sz    	 ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP%"
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	d
g}| j                  ||       y )Nc                      d} d}| |z  S r   r   )   说明说明   şçöğıĤellös     r   rm   zcTracebackErrorLocationCaretTestBase.test_byte_offset_with_wide_characters_term_highlight.<locals>.f  s    L !"333r    r  r  r  r  r  ra   r  u+       return 说明说明 / şçöğıĤellöz            ~~~~~~~~~^~~~~~~~~~~~r  r  s       r   4test_byte_offset_with_wide_characters_term_highlightzXTracebackErrorLocationCaretTestBase.test_byte_offset_with_wide_characters_term_highlight  sz    	4
 ##A&0z4+=+=*>>PQz1::+D+Dq+H*IP9.
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	d
g}| j                  ||       y )Nc                  &    dt        dd      z   dz   S )Nu   ✨🐍u   📗🚛   🐍)   func_说明说明r   r    r   rm   zZTracebackErrorLocationCaretTestBase.test_byte_offset_with_emojis_term_highlight.<locals>.f  s$    0  $% %r    r  r  r  r  r  rJ   r  u4       return "✨🐍" + func_说明说明("📗🚛",z!                    ^^^^^^^^^^^^^r  r  s       r   +test_byte_offset_with_emojis_term_highlightzOTracebackErrorLocationCaretTestBase.test_byte_offset_with_emojis_term_highlight  sz    	% ##A&0z4+=+=*>>PQz1::+D+Dq+H*IPB/
 	*r    c                     d }| j                  |      }ddt         d| j                   dddt         d|j                  j                  dz    dd	d
g}| j                  ||       y )Nc                  4    dddd iii} | d   d   d   d   d   S )Nu
   ✨🚛✨u   说明u   🐍🐍🐍r  u   🐍🐍r   )my_dcts    r   rm   zTTracebackErrorLocationCaretTestBase.test_byte_offset_wide_chars_subscript.<locals>.f  s?    &F ,'1&9(CJOOr    r  r  r  r  r     r  uG       return my_dct["✨🚛✨"]["说明"]["🐍"]["说明"]["🐍🐍"]z)           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^r  r  s       r   %test_byte_offset_wide_chars_subscriptzITracebackErrorLocationCaretTestBase.test_byte_offset_wide_chars_subscript  s{    	P ##A&0z4+=+=*>>PQz1::+D+Dq+H*IPU7
 	*r    N)"r   r   r   __doc__r  r  r  r  r  r!  r-  r1  r4  r8  rB  rJ  rO  rT  rX  r\  r_  rg  rl  r  r  r  r  r  r  r  r  r  r  r  r   r    r   r   r     s    @$@$@"@(!@F@*D"D"D"D$D"D"D$D"D,D,D$D0P
/@(DT+ ++ +++&+"+ +r    r   c                       e Zd ZdZy)"PurePythonTracebackErrorCaretTestst
    Same set of tests as above using the pure Python implementation of
    traceback printing in traceback.py.
    Nr   r   r   r  r   r    r   r  r    s    r    r  c                       e Zd ZdZy)CPythonTracebackErrorCaretTestsS
    Same set of tests as above but with Python's internal traceback printing.
    Nr  r   r    r   r  r        r    r  c                       e Zd ZdZy)%CPythonTracebackLegacyErrorCaretTestszZ
    Same set of tests as above but with Python's legacy internal traceback printing.
    Nr  r   r    r   r  r    r  r    r  c                       e Zd Zd Zedd       Zd Zd Zd Zd Z	d Z
 e       d	        Ze e       d
               Zd Zed        Zd Zed        Zd Zed        Zd Zy)TracebackFormatTestsc                     t        d      )Nblah)KeyErrorr:   s    r   some_exceptionz#TracebackFormatTests.some_exception  s    vr    Nc                    ddl m} 	 | j                          t        d      # t        $ r4}|j
                  }| ||j                         ddj                  t        j                  |            z   }t               } |||       |j                         }t        d      5 }t        j                  |       d d d        n# 1 sw Y   nxY wt               }	t        j                  ||	       t        d      5 }
t        j                          d d d        n# 1 sw Y   nxY wt        j                         }t               }t        j                  |       Y d }~nd }~ww xY w| j!                  ||       | j!                  j                         |	j                                | j!                  
j                         |j                                | j!                  ||j                                |j#                         }|d   }| j!                  t%        |      d       |d	   |d
   }}| j'                  |j)                  d             | j'                  |j)                  d             | j'                  |j)                  d             y )Nr   )traceback_printz&unable to create test traceback stringz#Traceback (most recent call last):
r   rn   r   r   r   	Traceback  Filez	    raise)r   r  r  r   r  r   r(   r   r.   	format_tbr   r   r   print_tbr   r   rS   rl   rT   rU   
startswith)r0   cleanup_funcr  r   r%   traceback_fmtfile_
python_fmtr   tbfile	excstderrexcfmtr   tb_linesbannerlocationsource_lines                    r   check_traceback_formatz+TracebackFormatTests.check_traceback_format  s   -	B!, @AA+  	.B'RZZ(BGGI$7$7$;<=MJEB&..*J * 'h""2&' ' 'ZFr/ * &i##%& & &))+FjGW--'	.0 	
3**,foo.?@++-w/?/?/AB!1!1!34 ((*!X* (hrl+))+67++H56..{;<sE   # 
E!A5E"C8	EC
	3E9D	ED 	;EE!c                 $    | j                          y r  r  r:   s    r   test_traceback_formatz*TracebackFormatTests.test_traceback_format@  s    ##%r    c                 ,    d }| j                  |       y )Nc                 8    | j                   j                          y r  )r&   clearr   s    r   
cleanup_tbzRTracebackFormatTests.test_traceback_format_with_cleared_frames.<locals>.cleanup_tbE  s    KKr    r  )r0   r  s     r   )test_traceback_format_with_cleared_framesz>TracebackFormatTests.test_traceback_format_with_cleared_framesC  s    	 ##J/r    c                    t        d      5 }t        j                  t        j                  d             d d d        t               }t        j                  t        j                  d      |       | j                  j                         |j                                t        j                  t        j                  d            }| j                  |j                         dj                  |             y # 1 sw Y   xY w)Nrn   rJ   r   r   )
r   r.   print_stackr   	_getframer   rS   r   format_stackr   )r0   ststderrstfilestfmts       r   test_stack_formatz&TracebackFormatTests.test_stack_formatI  s     X& 	4(!!#--"23	4cmmA.V<**,foo.?@&&s}}Q'78**,bggen=	4 	4s   )C77D c           	         d }t        d      5 } |        d d d        |j                  j                  }| j                  j	                         j                         dd  dt        |dz   fz  ddt        |dz   fz  d	g       y # 1 sw Y   mxY w)
Nc                  ,    t        j                          y r  )r.   r  r   r    r   prnz2TracebackFormatTests.test_print_stack.<locals>.prnW  s    !!#r    rn   z)  File "%s", line %d, in test_print_stackra   z	    prn()z  File "%s", line %d, in prnrJ   z    traceback.print_stack())r   r   r   rS   r   rl   r  )r0   r  rn   r   s       r   test_print_stackz%TracebackFormatTests.test_print_stackV  s    	$X& 	&E	,,*557<78VAX:NN*hq-AA)	?
 		 	s   BBc                 
   d | _         fdt        d      5 }	          | j                  d       d d d        j                  j
                  }dt         d|dz    dt         d|dz    d	t         d|dz    d	t         d|dz    d
}|j                         }j                         j                         }| j                  |d d |d d        | j                  |d   |d          | j                  |d   |d          t        j                         }| j                  t        t        j                   d|d         j#                               t%        |dz
  |             d$fd	t        d      5 }	          | j                  d       d d d        j                  j
                  }	dt         d|	dz    dt         d|	dz    dt         d|	dz    dt         d|	dz    d}
dt         d|	dz    d}||
z   j                         }j                         j                         }| j                  ||       d$fd	t        d      5 }	          | j                  d       d d d        j                  j
                  }dt         d|dz    dt         d|dz    dt         d|dz    dt         d|dz    dt         d|dz    d}||
z   j                         }j                         j                         }| j                  ||       t        d      5 }	  t(        j*                         | j                  d       d d d        dt         d|	dz    dt         d|	dz    dt         d|	dz    dt         d|	dz    d}
dt         d|	dz    d }||
z   j                         }|j                         j                         }| j                  ||       t        d      5 }	  t(        j*                  dz          | j                  d       d d d        dt         d|	dz    dt         d|	dz    dt         d|	dz    d!t         d|	dz    d}
dt         d|	d"z    d#}||
z   j                         }|j                         j                         }| j                  ||       y # t        $ r  |        Y sw xY w# 1 sw Y   yxY w# t&        $ r  |        Y @w xY w# 1 sw Y   FxY w# t&        $ r  |        Y w xY w# 1 sw Y   xY w# t&        $ r  |        Y w xY w# 1 sw Y   xY w# t&        $ r  |        Y 6w xY w# 1 sw Y   <xY w)%Nc                                y r  r   rm   s   r   rm   zBTracebackFormatTests._check_recursive_traceback_display.<locals>.fk  s    Cr    rn   zno recursion occurredr   r  r   z8, in _check_recursive_traceback_display
    f()
  File "rJ   z, in f
    f()
  File "zn, in f
    f()
  \[Previous line repeated (\d+) more times\]
RecursionError: maximum recursion depth exceeded
r  r   z\d+<   c                 *    | r | dz
        S t         rM  r   )rY   r  s    r   r  zBTracebackFormatTests._check_recursive_traceback_display.<locals>.g  s    qz!r    zno value error was raisedr  rL   z;, in g
    return g(count-1)
           ^^^^^^^^^^
  File "zc, in g
    return g(count-1)
           ^^^^^^^^^^
  [Previous line repeated 7 more times]
  File "ra   z', in g
    raise ValueError
ValueError
   z0, in _check_recursive_traceback_display
    g()
c                 .    | r | dz
        S          y rM  r   )rY   r  hs    r   r  zBTracebackFormatTests._check_recursive_traceback_display.<locals>.h  s    qz!Cr    z8, in _check_recursive_traceback_display
    h()
  File "z;, in h
    return h(count-1)
           ^^^^^^^^^^
  File "zc, in h
    return h(count-1)
           ^^^^^^^^^^
  [Previous line repeated 7 more times]
  File "z, in h
    g()
zno error raisedM   zK, in _check_recursive_traceback_display
    g(traceback._RECURSIVE_CUTOFF)
zb, in g
    return g(count-1)
           ^^^^^^^^^^
  [Previous line repeated 1 more time]
  File "l   zO, in _check_recursive_traceback_display
    g(traceback._RECURSIVE_CUTOFF + 1)
)r&  )maxDiffr   r   RecursionErrorr   r   r  rl   r   rS   assertRegexrW   r   getrecursionlimitr  researchgroupranger-   r.   _RECURSIVE_CUTOFF)r0   
render_excstderr_fr  result_fr   r  	rec_limitstderr_glineno_gresult_gtb_linestderr_hlineno_hresult_hrm   r  r  s                  @@@r   "_check_recursive_traceback_displayz7TracebackFormatTests._check_recursive_traceback_displayd  s    	 X& 	3(3 		12	3 ::,,j! 5j! 5j! 5j! 5AA 	$ &&(""$//1 	hsm4Xb\2hrlF2J/ ))+	c"))FF2J7==?@%	RTV_B`a	
 X& 	7(7 		56	7 ::,,xj! 5  j! 5  j! 5  j! 5 	 j! 5 	
 h&224""$//1*	
 X& 	7(7 		56	7 ::,,j! 5j! 5  j! 5  j! 5  j! 5 	" x'335""$//1* X& 	-(-)--. 		+,	- xj! 5  j! 5  j! 5  j! 5 	j" 633 	
 h&224""$//1* X& 	-(-)--12 		+,	- xj! 5  j! 5  j! 5  j! 5 	 j# 777 	
 h&224""$//1*] " 	3 	3d  	7 	7T  	7 	7D  	- 	-D  	- 	-s   R,RR,2S4R9;SS4SS4TT(TT<T%1T<R)%R,(R))R,,R69S	SSSSS1-S40S11S44S>TTTTT"%T95T<8T99T<<Uc                 B    | j                  t        j                         y r  )r  r.   r   r:   s    r   test_recursive_traceback_pythonz4TracebackFormatTests.test_recursive_traceback_python!  s    //	0C0CDr    c                 >    ddl m fd}| j                  |       y )Nr   r   c                  :      t        j                                y r  )r   	exceptionr   s   r   r  zRTracebackFormatTests.test_recursive_traceback_cpython_internal.<locals>.render_exc)  s    CMMO,r    )r   r   r  )r0   r  r   s     @r   )test_recursive_traceback_cpython_internalz>TracebackFormatTests.test_recursive_traceback_cpython_internal%  s     	.	-//
;r    c                     d } |       }|j                   j                  }| j                  |dd  dt        |dz   fz  dt        |dz   fz  g       y )Nc                  *    t        j                         S r  )r.   r  r   r    r   fmtz3TracebackFormatTests.test_format_stack.<locals>.fmt.  s    ))++r    r  z>  File "%s", line %d, in test_format_stack
    result = fmt()
rL   zA  File "%s", line %d, in fmt
    return traceback.format_stack()
rJ   )r   r   rS   r  )r0   r(  resultr   s       r   test_format_stackz&TracebackFormatTests.test_format_stack-  se    	,,,#&.q%9:47?6JK'
 	r    c                    ddl m}  G d dt              } |d      } |d      }	 ||# |$ r 	 |# |$ r}|}Y d }~nd }~ww xY wY nw xY wt        d      5 } ||       d d d        n# 1 sw Y   nxY wj	                         j                         j                         }| j                  dt        |             | j                  t        j                         |d	          | j                  d
|d          | j                  d|d          y )Nr   r   c                       e Zd Zd Zy)ATracebackFormatTests.test_unhashable.<locals>.UnhashableExceptionc                      yNTr   r0   others     r   __eq__zHTracebackFormatTests.test_unhashable.<locals>.UnhashableException.__eq__>      r    Nr   r   r   r2  r   r    r   UnhashableExceptionr-  =      r    r5  ex1ex2rn      r   zUnhashableException: ex2ra   zUnhashableException: ex1r&  )r   r   r   r   r   rV   rl   rS   rT   context_messagerW   )	r0   r   r5  r7  r8  r   exc_valr  r%   s	            r   test_unhashablez$TracebackFormatTests.test_unhashable9  s   -	) 	 "%(!%(	3" 		& 		 X& 	%(G$	% 	% 	%  &&(335SW%..0"Q%80"Q%80"R&9s8   * A	2A>A	AA	A		A))A2c                 V    t        d      }t        d      D ]  }t        d|g      } |S )NrJ     rc  )r   r  re  )r0   r   is      r   deep_egzTracebackFormatTests.deep_egT  s1    aLt 	*AtaS)A	*r    c                 `   ddl m} d}| j                         }t        d      5 }t	        j
                  |      5   ||       d d d        d d d        j                         }| j                  d|       | j                  |j                  d      |       y # 1 sw Y   UxY w# 1 sw Y   YxY w)Nr   r   K   rn   	max_depthre  )
r   r   r@  r   r   infinite_recursionr   rW   assertLessEqualrY   )r0   r   LIMITrc  r  r   s         r   (test_exception_group_deep_recursion_capiz=TracebackFormatTests.test_exception_group_deep_recursion_capiZ  s    -\\^X& 	$(++e< $#$	$ ""$&/V\\*:;UC	$ $	$ 	$s"   B$	BB$B!	B$$B-c                    d}| j                         }t        d      5 }t        j                  |      5  t	        j
                  t        |      ||j                         d d d        d d d        j                         }| j                  d|       | j                  |j                  d      |       y # 1 sw Y   UxY w# 1 sw Y   YxY w)NrB  rn   rC  re  )r@  r   r   rE  r.   r   typer   r   rW   rF  rY   )r0   rG  rc  r  r   s        r   -test_exception_group_deep_recursion_tracebackzBTracebackFormatTests.test_exception_group_deep_recursion_tracebackf  s    \\^X& 	J(++e< J))$r(B8H8HIJ	J ""$&/V\\*:;UC	J J	J 	Js"   C +B4 C 4B=	9C  C	c                     ddl m} t        d      5 } |d       d d d        | j                  j	                         d       y # 1 sw Y   *xY w)Nr   r   rn   *   zFTypeError: print_exception(): Exception expected for value, int found
)r   r   r   rS   r   )r0   r   rn   s      r   "test_print_exception_bad_type_capiz7TracebackFormatTests.test_print_exception_bad_type_capip  sI    -X& 	 &B	 OO9	
	  	 s   	AAc                     d}| j                  t        |      5  t        j                  d       d d d        y # 1 sw Y   y xY w)Nz'Exception expected for value, int foundrM  )r   r   r.   r   )r0   msgs     r   $test_print_exception_bad_type_pythonz9TracebackFormatTests.test_print_exception_bad_type_python{  s:    7##Is3 	*%%b)	* 	* 	*s	   8Ar  )r   r   r   r  r   r  r  r  r  r   r  r
   r!  r%  r*  r<  r@  rH  rK  rN  rQ  r   r    r   r  r    s     *= *=X&0>{+z E E <  <
 : :4 	D 	DD 
 
*r    r  zG
The above exception was the direct cause of the following exception:

zF
During handling of the above exception, another exception occurred:

rQ   |ry   c                       e Zd Zd Zej                  j
                  dz   Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#y )!BaseExceptionReportingTestsc                 h    t        |t              r|S 	  |        y # t        $ r}|cY d }~S d }~ww xY wr  )
isinstanceBaseExceptionr   )r0   exception_or_callabler   s      r   r   z)BaseExceptionReportingTests.get_exception  s3    +];((	!# 	H	s    	1,11rI   c                     ddz   y r   r   r:   s    r   zero_divz$BaseExceptionReportingTests.zero_div  s	    	!r    c                 h   |j                         }t               r9| j                  |d   j                  d             | j	                  d|d          n8| j                  |d   j                  d             | j	                  d|d          | j                  |d   j                  d      |d          y )Nr  z1/0 # In zero_divr  r  r   ZeroDivisionError)rl   r   rU   r  rW   )r0   rP  ro   s      r   check_zero_divz*BaseExceptionReportingTests.check_zero_div  s      OOE"I00:;MM-uRy9OOE"I00:;MM-uRy9b	,,-@A59Mr    c                 D   	 ddz   | j                        j                         }t               r?| j	                  t        |      d       | j                  |d   j                  d             n>| j	                  t        |      d       | j                  |d   j                  d             | j                  |d   j                  d             | j                  |d   j                  d             | j                  d	|d
          y # t         $ r}|}Y d }~d }~ww xY w)NrJ   r   rI   ra   r]  r   r  r  z1/0 # MarkerrL   )	r]  
get_reportrl   r   rS   rT   rU   r  rW   r0   r   r   ro   s       r   test_simplez'BaseExceptionReportingTests.test_simple  s    	aC "--/ SZ+OOE!H//0CDESZ+OOE!H//0CDEa++K89a++H56neAh/ ! 	A	s   D	 		DDDc                      fdfd}t         j                   j                  |            } j                  t	        |      d        j                  |d   t
                j                  |d           j                  d|d          y )Nc                  X    	 j                          y # t        $ r} t        | d } ~ ww xY wr  rZ  r]  r  )r   r0   s    r   inner_raisez;BaseExceptionReportingTests.test_cause.<locals>.inner_raise  s)    &$ &A%&s    	)$)c                                y r  r   rf  s   r   outer_raisez;BaseExceptionReportingTests.test_cause.<locals>.outer_raise      Mr    ra   rJ   r   inner_raise() # MarkerrL   
boundariessplitr`  rS   rT   cause_messager^  rW   r0   ri  blocksrf  s   `  @r   
test_causez&BaseExceptionReportingTests.test_cause  ss    	&
	!!$//+">?Va(M2F1I&.q	:r    c                      fdfd}t         j                   j                  |            } j                  t	        |      d        j                  |d   t
                j                  |d           j                  d|d          y )Nc                  N    	  j                          y # t        $ r t        w xY wr  re  r:   s   r   rf  z=BaseExceptionReportingTests.test_context.<locals>.inner_raise  s%    $ s    $c                                y r  r   rh  s   r   ri  z=BaseExceptionReportingTests.test_context.<locals>.outer_raise  rj  r    ra   rJ   r   rk  rL   )rm  rn  r`  rS   rT   r:  r^  rW   rp  s   `  @r   test_contextz(BaseExceptionReportingTests.test_context  ss    	
	!!$//+">?Va(O4F1I&.q	:r    c                    	 	 t         #  t        d xY w# t        $ r}|}Y d }~nd }~ww xY w| j                  |      j                         }| j	                  t        |      d       | j                  |d   j                  d             | j                  |d   j                  d             | j                  |d   j                  d             | j                  d|d	          y )
NrI   ra   r]  r   r  rJ   r  zZeroDivisionError from NonerL   )	r   r]  r`  rl   rS   rT   rU   r  rW   ra  s       r   test_context_suppressionz4BaseExceptionReportingTests.test_context_suppression  s    	22'T1  	A	"--/UQ'a++,?@Aa++K89a++H563U1X>s   	 	 	*%*c                      fdfd}t         j                   j                  |            } j                  t	        |      d        j                  |d   t
                j                  |d           j                  d|d          y )Nc                      	 j                          	 t         y # t        $ r} | }Y d } ~ d } ~ ww xY w# t        $ r t        w xY wr  )rZ  r]  xyzzy	NameErrorr  )_er   r0   s     r   rf  zGBaseExceptionReportingTests.test_cause_and_context.<locals>.inner_raise  sH    & %   &A%&s    3 	0+0Ac                                y r  r   rh  s   r   ri  zGBaseExceptionReportingTests.test_cause_and_context.<locals>.outer_raise  rj  r    ra   rJ   r   rk  rL   rl  rp  s   `  @r   test_cause_and_contextz2BaseExceptionReportingTests.test_cause_and_context  ss    	&	!!$//+">?Va(M2F1I&.q	:r    c                 r     fdfd}t         j                   j                  |            } j                  t	        |      d        j                  |d   t
                j                  d|d           j                  d|d           j                  d|d	           j                  |d	          y )
Nc                      	 	 j                          y # t        $ r} | }t        | d } ~ ww xY w# t        $ r} | d } ~ ww xY wr  re  )r   r=  r0   s     r   rf  zEBaseExceptionReportingTests.test_cause_recursive.<locals>.inner_raise  sK    *MMO( *A")*  Qs"    	,	',/ 	A ;A c                                y r  r   rh  s   r   ri  zEBaseExceptionReportingTests.test_cause_recursive.<locals>.outer_raise  rj  r    ra   rJ   zraise KeyError from er   z1/0rk  rL   )	rm  rn  r`  rS   rT   ro  rW   assertNotInr^  rp  s   `  @r   test_cause_recursivez0BaseExceptionReportingTests.test_cause_recursive  s    		!!$//+">?Va(M2-vay9q	* 	.q	:F1I&r    c                     d }| j                  |      j                         }| j                  |d   d       d }| j                  |      j                         }| j                  |d   d       y )Nc                      t        dd      )Nr   )r   r   r   hello)rR   r   r    r   r   zFBaseExceptionReportingTests.test_syntax_error_offset_at_eol.<locals>.e  s    b"566r    r  z	        ^c                      t        d       y )Nzx = 5 | 4 |)r7   r   r    r   r   zFBaseExceptionReportingTests.test_syntax_error_offset_at_eol.<locals>.e  s
    r    z               ^)r`  rl   rS   r0   r   rP  s      r   test_syntax_error_offset_at_eolz;BaseExceptionReportingTests.test_syntax_error_offset_at_eol  sc    	7ooa ++-R+.	 ooa ++-R"45r    c                    t        d      }| j                  |      j                         }| j                  |dg       d|_        | j                  |      j                         }| j                  |ddg       t        d      }d|_        | j                  |      j                         }| j                  |dg       d|_        | j                  |      j                         }| j                  |ddg       y )Nr`   zSyntaxError: bad syntaxd   z  File "<string>", line 100z	myfile.pyz#SyntaxError: bad syntax (myfile.py)z  File "myfile.py", line 100)rR   r`  rl   rS   r   filenamer  s      r   test_syntax_error_no_linenoz7BaseExceptionReportingTests.test_syntax_error_no_lineno  s     %ooa ++-&'	)ooa ++-*,EF	H % 
ooa ++-23	5ooa ++-+-FG	Ir    c                 b   | j                  t        d             }| j                  d|       | j                  t        d            }| j                  d|       | j                  t                     }| j                  d|       | j                  t        d            }| j                  d|       y )NzException: None
Nonez
Exception
r   )r`  r   rW   rZ   s     r   test_message_nonez-BaseExceptionReportingTests.test_message_none/  s    ooio.)3/ooi/0)3/ooik*mS)ooim,mS)r    c                 f   t        dd      D ]!  }dD ]  }d|z  d|z  z   }dg}|dk  r#|j                  d|j                         z         nx|d	k  r=|j                  d|j                         z         |j                  d
d|dz
  z  z         n6|j                  d|j                         z         |j                  d
dz         |j                  d       |j                  d       | j                  t	        ddd||z   |f            }dj                  |      }| j                  ||        $ y )Nr&  )r   rL   rZ  ztext%dz  File "file.py", line 1rJ   z    %sr   z    %s^z     zSyntaxError: msgr   rP  zfile.pyrN   )r  appendri  r`  rR   r   rS   )r0   offsetaddr   r   r[   exps          r   !test_syntax_error_various_offsetsz=BaseExceptionReportingTests.test_syntax_error_various_offsets:  s   Bm 	+F +3wF!2267A:OOHt{{}$<=q[OOHt{{}$<=OOIfQh$@AOOHt{{}$<=OOI$78 23#ook%)Qs
TX9Y&Z[ii)  c*+	+r    c                    t        d      }| j                  |      }|j                  d       | j                  | j                  |      |dz          |`|j                  d       | j                  | j                  |      |dz          |`|j                  d       | j                  | j                  |      |dz          |`| j                  | j                  |      |       y )N{   zMy NotezMy Note
r   rN   z	Your Notez
Your Note
)r-   r`  add_noterS   	__notes__r0   r   vanillas      r   test_exception_with_notez4BaseExceptionReportingTests.test_exception_with_noteM  s    sO//!$	

9+W{-BCK	

2+Wt^<K	

;+W}-DEK+W5r    c                 z   t        d      }| j                  |      } G d d      } G d d      } |       |_        d}| j                  | j                  |      ||z   dz           |       |_        d}| j                  | j                  |      ||z   dz           |       d	g|_        d
}| j                  | j                  |      ||z   dz           |       d	g|_        d}| j                  | j                  |      ||z   dz          d|_        d}| j                  | j                  |      ||z   dz          d|_        d}| j                  | j                  |      ||z   dz           G d dt              } |d      }| j                  |      }d|_        | j                  | j                  |      |dz          y )Nr  c                       e Zd Zd Zd Zy)OBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BadThingc                      y)Nbad strr   r:   s    r   r   zWBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BadThing.__str__e  s     r    c                      y)Nbad reprr   r:   s    r   __repr__zXBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BadThing.__repr__h  s    !r    Nr   r   r   r   r  r   r    r   BadThingr  d  s    !"r    r  c                       e Zd Zd Zy)RBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.Unprintablec                     t        d      N	bad valuer   r:   s    r   r  z[BaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.Unprintable.__repr__m  s     --r    N)r   r   r   r  r   r    r   Unprintabler  l  s    .r    r  r  rN   z<__notes__ repr() failed>z
Final Noter  z
Final Note
z<note str() failed>zplease do not explode mez'please do not explode me's    please do not show me as numbersz#b'please do not show me as numbers'c                       e Zd ZdZd Zy)VBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BrokenExceptionFc                 L    | j                   rt        d|       t        |      )Nzno )brokenr-   AttributeError)r0   names     r   __getattr__zbBaseExceptionReportingTests.test_exception_with_invalid_notes.<locals>.BrokenException.__getattr__  s%    ;;$s4&\22$T**r    N)r   r   r   r  r  r   r    r   BrokenExceptionr    s    F+r    r  Tz<Ignored error getting __notes__: ValueError('no __notes__')
)r-   r`  r  rS   r   r  )	r0   r   r  r  r  
notes_reprr   bad_noter  s	            r   !test_exception_with_invalid_notesz=BaseExceptionReportingTests.test_exception_with_invalid_notes_  s   sO//!$	" 	"	. 	. j
+Wz-AD-HI!m-+Ww->-EF !
L1+Wx-?BR-RS $|4'+Ww->AQ-QR1.+Ww->-EF:7+Ww->-EF	+i 	+ C //!$OOAUU	Wr    c                     t        d      t        d      fD ]  }| j                  |      5  | j                  |      }|j	                  d       |j	                  d       |j	                  d       | j                  | j                  |      |dz   dz   d	z          |`|j	                  d
       |`|j	                  d       |j	                  d       | j                  | j                  |      |dz   dz          d d d         y # 1 sw Y   xY w)NrM  r`   )r   zNote 1zNote 2zNote 3zNote 1
zNote 2
zNote 3
zNote 4zNote 5zNote 6zNote 5
zNote 6
)r-   rR   subTestr`  r  rS   r  r  s      r   "test_exception_with_multiple_notesz>BaseExceptionReportingTests.test_exception_with_multiple_notes  s    R.+l";< 	7A" 7//!,

8$

8$

8$  OOA&j(:5
BD K

8$K

8$

8$  OOA&j(:57#7 7	77 7s   CDD	c                 N    G d d      }| j                  |j                  j                               }d}dj                  |j                  j                  j                  |j                  j                  j
                  g      }|d|d}| j                  |t        |z          y )Nc                        e Zd Z G d d      Zy)>BaseExceptionReportingTests.test_exception_qualname.<locals>.Ac                   "    e Zd Z G d de      Zy)@BaseExceptionReportingTests.test_exception_qualname.<locals>.A.Bc                       e Zd Zd Zy)BBaseExceptionReportingTests.test_exception_qualname.<locals>.A.B.Xc                      yNI am Xr   r:   s    r   r   zJBaseExceptionReportingTests.test_exception_qualname.<locals>.A.B.X.__str__  s    'r    Nr   r   r    r   r   r    s    (r    r   N)r   r   r   r   r   r   r    r   Br    s    (	 (r    r  N)r   r   r   r  r   r    r   r  r    s    ( (r    r  r  r   r   rN   )r`  r  r   r   r   r   rS   MODULE_PREFIX)r0   r  r[   r   r   r  s         r   test_exception_qualnamez3BaseExceptionReportingTests.test_exception_qualname  sy    	( 	( ooacceeg&	88QSSUU--qssuu/A/ABC$i0mc12r    c                 `    G d dt               }dD ]  }||_        | j                  |      5  | j                   |             }d}|dv r|j                  }n'dj                  |j                  |j                  g      }|d|d	}| j                  ||       d d d         y # 1 sw Y   xY w)
Nc                       e Zd Zd Zy)@BaseExceptionReportingTests.test_exception_modulename.<locals>.Xc                      yr  r   r:   s    r   r   zHBaseExceptionReportingTests.test_exception_modulename.<locals>.X.__str__      r    Nr   r   r    r   r   r         r    r   )r   r   some_module)
modulenamer  )r   r   r   r   rN   )r   r   r  r`  r   r   rS   )r0   r   r  r[   r   r   r  s          r   test_exception_modulenamez5BaseExceptionReportingTests.test_exception_modulename  s    	 	 	  @ 
	+J%AL4 +ooac*$	!99 ~~H"xxq~~(FGH$,i8  c*+ +
	++ +s   A+B$$B-	c                     t        j                  d      }t        |dd      }i i }}t        |||       | j	                  |d         }d}| j                  ||       y )Nz~
            try:
                raise ValueError(42)
            except Exception as e:
                exc = e
            z<does not exist>r7   r2   z>  File "<does not exist>", line 3, in <module>
ValueError: 42
)rr   rs   r9   r7   r`  rW   )r0   srcr   r  lr[   r  s          r   'test_exception_angle_bracketed_filenamezCBaseExceptionReportingTests.test_exception_angle_bracketed_filename  s`    oo   s.721T1aooah'Pc3r    c                      G d dt               }d|_        | j                   |             }d|j                   d}| j	                  ||       y )Nc                       e Zd Zd Zy)LBaseExceptionReportingTests.test_exception_modulename_not_unicode.<locals>.Xc                      yr  r   r:   s    r   r   zTBaseExceptionReportingTests.test_exception_modulename_not_unicode.<locals>.X.__str__  r  r    Nr   r   r    r   r   r    r  r    r   rM  z
<unknown>.z	: I am X
)r   r   r`  r   rS   )r0   r   r[   r  s       r   %test_exception_modulename_not_unicodezABaseExceptionReportingTests.test_exception_modulename_not_unicode  sJ    	 	 	  ooac"1>>**5c"r    c                      G d dt               }| j                   |             }d}dj                  |j                  |j                  g      }| j                  t        |z   | d| d       y )Nc                       e Zd Zd Zy)@BaseExceptionReportingTests.test_exception_bad__str__.<locals>.Xc                     ddz   y r   r   r:   s    r   r   zHBaseExceptionReportingTests.test_exception_bad__str__.<locals>.X.__str__  r   r    Nr   r   r    r   r   r    r   r    r   r   r   r   rN   )r   r`  r   r   r   rS   r  r   s        r   test_exception_bad__str__z5BaseExceptionReportingTests.test_exception_bad__str__  sb    		 	 ooac".	88Q\\1>>:;,
"YKr.JKr    c           	          d }dt          d| j                   dt          d|j                  j                  dz    d	}| j	                  |      }| j                  ||       y )Nc                  B    t        dt        d      t        d      g      rb  rd  r   r    r   r2   zCBaseExceptionReportingTests.test_exception_group_basic.<locals>.exc  s     
1y|'DEEr    rf  r  ?, in get_exception
  |     exception_or_callable()
  |   File "rJ   a  , in exc
  |     raise ExceptionGroup("eg", [ValueError(1), TypeError(2)])
  | ExceptionGroup: eg (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
    +------------------------------------
r  r   r   r   r`  rS   r0   r2   r   reports       r   test_exception_group_basicz6BaseExceptionReportingTests.test_exception_group_basic  sp    	F$:Xd.@.@-A B$:Xcll.I.IA.M-N O;
< 	 %*r    c                    d }dt          d|j                  j                  dz    dt          d| j                   dt          d|j                  j                  dz    d}| j	                  |      }| j                  ||       y )	Nc                      t         } 	  | dt        d      t        d      g      # t        $ r#} | dt        d      t        d      g      |d }~ww xY w)Neg1rJ   rL   eg2ra   rI   re  r-   r   r   )EGr   s     r   r2   zCBaseExceptionReportingTests.test_exception_group_cause.<locals>.exc	  sU    BFA	! =>> FA	! =>AEFs   % 	AAArf  r  ra   a  , in exc
  |     raise EG("eg1", [ValueError(1), TypeError(2)])
  | ExceptionGroup: eg1 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
    +------------------------------------

The above exception was the direct cause of the following exception:

  + Exception Group Traceback (most recent call last):
  |   File "r  r   a  , in exc
  |     raise EG("eg2", [ValueError(3), TypeError(4)]) from e
  | ExceptionGroup: eg2 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 3
    +---------------- 2 ----------------
    | TypeError: 4
    +------------------------------------
r  r   r   r   r`  rS   r  s       r   test_exception_group_causez6BaseExceptionReportingTests.test_exception_group_cause  s    	F##+*HS\\5P5PST5T4U V# $,*HT5G5G4H I##+*HS\\5P5PST5T4U VBC0 %*r    c                 D   d }dt          d|j                  j                  dz    dt          d|j                  j                  dz    dt          d| j                   dt          d|j                  j                  d	z    d
}| j	                  |      }| j                  ||       y )Nc                      t         } 	 	  | dt        d      t        d      g      #   | dt        d      t        d      g      xY w#  t        d      xY w)Nr  rJ   rL   r  ra   rI   r   )re  r-   r   ImportError)r  s    r   r2   zRBaseExceptionReportingTests.test_exception_group_context_with_context.<locals>.exc,  s^    B%CUZ]IaL$ABBCUZ]IaL$ABB%!!n$s   & AA Arf  r  rI   a  , in exc
  |     raise EG("eg1", [ValueError(1), TypeError(2)])
  | ExceptionGroup: eg1 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | TypeError: 2
    +------------------------------------

During handling of the above exception, another exception occurred:

  + Exception Group Traceback (most recent call last):
  |   File "r   a  , in exc
  |     raise EG("eg2", [ValueError(3), TypeError(4)])
  | ExceptionGroup: eg2 (2 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 3
    +---------------- 2 ----------------
    | TypeError: 4
    +------------------------------------

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "z7, in get_exception
    exception_or_callable()
  File "r  z1, in exc
    raise ImportError(5)
ImportError: 5
r  r  s       r   )test_exception_group_context_with_contextzEBaseExceptionReportingTests.test_exception_group_context_with_context+  s    	%$:Xcll.I.IA.M-N O %:Xcll.I.IA.M-N O !z$*<*<)= > z#,,*E*E*I)J K 7! 	@ %*r    c                 D   d }dt          d|j                  j                  dz    dt          d|j                  j                  dz    dt          d| j                   dt          d|j                  j                  d	z    d
}| j	                  |      }| j                  ||       y )Nc                      t         } t        }t        }	 	  | d |d       |d      g      # t        $ r}|}Y d }~nd }~ww xY w | d |d      | |d      g      #   | d |d      g      xY w)	NnestedrL   ra   rc  rJ   rI   topr   r  )r  VETEr   r2   s        r   r2   zDBaseExceptionReportingTests.test_exception_group_nested.<locals>.excZ  s    BBB)X1r!u~66  C1sBqE233)A((s#   , 	A<A AA A.rf  r  	   a  , in exc
  |     raise EG("eg", [VE(1), exc, VE(4)])
  | ExceptionGroup: eg (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 1
    +---------------- 2 ----------------
    | Exception Group Traceback (most recent call last):
    |   File "r   a  , in exc
    |     raise EG("nested", [TE(2), TE(3)])
    | ExceptionGroup: nested (2 sub-exceptions)
    +-+---------------- 1 ----------------
      | TypeError: 2
      +---------------- 2 ----------------
      | TypeError: 3
      +------------------------------------
    +---------------- 3 ----------------
    | ValueError: 4
    +------------------------------------

During handling of the above exception, another exception occurred:

  + Exception Group Traceback (most recent call last):
  |   File "r  r9  z, in exc
  |     raise EG("top", [VE(5)])
  | ExceptionGroup: top (1 sub-exception)
  +-+---------------- 1 ----------------
    | ValueError: 5
    +------------------------------------
r  r  s       r   test_exception_group_nestedz7BaseExceptionReportingTests.test_exception_group_nestedY  s    	)##+*HS\\5P5PST5T4U V% &.Jhs||7R7RUV7V6W X# $,*HT5G5G4H I##+*HS\\5P5PSU5U4V WB3C@ %*r    c                     g }t        d      D ]  }|j                  t        |              t        d|      }d}| j	                  |      }| j                  ||       y )N  rc  a>    | ExceptionGroup: eg (1000 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 0
    +---------------- 2 ----------------
    | ValueError: 1
    +---------------- 3 ----------------
    | ValueError: 2
    +---------------- 4 ----------------
    | ValueError: 3
    +---------------- 5 ----------------
    | ValueError: 4
    +---------------- 6 ----------------
    | ValueError: 5
    +---------------- 7 ----------------
    | ValueError: 6
    +---------------- 8 ----------------
    | ValueError: 7
    +---------------- 9 ----------------
    | ValueError: 8
    +---------------- 10 ----------------
    | ValueError: 9
    +---------------- 11 ----------------
    | ValueError: 10
    +---------------- 12 ----------------
    | ValueError: 11
    +---------------- 13 ----------------
    | ValueError: 12
    +---------------- 14 ----------------
    | ValueError: 13
    +---------------- 15 ----------------
    | ValueError: 14
    +---------------- ... ----------------
    | and 985 more exceptions
    +------------------------------------
)r  r  r-   re  r`  rS   )r0   excsr?  rc  r   r  s         r    test_exception_group_width_limitz<BaseExceptionReportingTests.test_exception_group_width_limit  s_    t 	'AKK
1&	'D$'!BF $*r    c           	          t        d      }t        d      D ]'  }t        d| t        |      |t        |       g      }) d}| j	                  |      }| j                  ||       y )Nbad typer  rc  a    | ExceptionGroup: eg999 (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | ValueError: 999
    +---------------- 2 ----------------
    | ExceptionGroup: eg998 (3 sub-exceptions)
    +-+---------------- 1 ----------------
      | ValueError: 998
      +---------------- 2 ----------------
      | ExceptionGroup: eg997 (3 sub-exceptions)
      +-+---------------- 1 ----------------
        | ValueError: 997
        +---------------- 2 ----------------
        | ExceptionGroup: eg996 (3 sub-exceptions)
        +-+---------------- 1 ----------------
          | ValueError: 996
          +---------------- 2 ----------------
          | ExceptionGroup: eg995 (3 sub-exceptions)
          +-+---------------- 1 ----------------
            | ValueError: 995
            +---------------- 2 ----------------
            | ExceptionGroup: eg994 (3 sub-exceptions)
            +-+---------------- 1 ----------------
              | ValueError: 994
              +---------------- 2 ----------------
              | ExceptionGroup: eg993 (3 sub-exceptions)
              +-+---------------- 1 ----------------
                | ValueError: 993
                +---------------- 2 ----------------
                | ExceptionGroup: eg992 (3 sub-exceptions)
                +-+---------------- 1 ----------------
                  | ValueError: 992
                  +---------------- 2 ----------------
                  | ExceptionGroup: eg991 (3 sub-exceptions)
                  +-+---------------- 1 ----------------
                    | ValueError: 991
                    +---------------- 2 ----------------
                    | ExceptionGroup: eg990 (3 sub-exceptions)
                    +-+---------------- 1 ----------------
                      | ValueError: 990
                      +---------------- 2 ----------------
                      | ... (max_group_depth is 10)
                      +---------------- 3 ----------------
                      | ValueError: -990
                      +------------------------------------
                    +---------------- 3 ----------------
                    | ValueError: -991
                    +------------------------------------
                  +---------------- 3 ----------------
                  | ValueError: -992
                  +------------------------------------
                +---------------- 3 ----------------
                | ValueError: -993
                +------------------------------------
              +---------------- 3 ----------------
              | ValueError: -994
              +------------------------------------
            +---------------- 3 ----------------
            | ValueError: -995
            +------------------------------------
          +---------------- 3 ----------------
          | ValueError: -996
          +------------------------------------
        +---------------- 3 ----------------
        | ValueError: -997
        +------------------------------------
      +---------------- 3 ----------------
      | ValueError: -998
      +------------------------------------
    +---------------- 3 ----------------
    | ValueError: -999
    +------------------------------------
)r   r  re  r-   r`  rS   )r0   r2   r?  r   r  s        r    test_exception_group_depth_limitz<BaseExceptionReportingTests.test_exception_group_depth_limit  sp    
#t 	6A QCAZ^46C	6
FBP %*r    c                 D   d }dt          d| j                   dt          d|j                  j                  dz    dt          d|j                  j                  dz    dt          d|j                  j                  dz    d	}| j	                  |      }| j                  ||       y )
Nc                      	 g } dD ]  }	 t        |       t        d|       # t         $ r/}|j                  d|        | j                  |       Y d }~Od }~ww xY w# t        $ r}|j                  d        d }~ww xY w)Nr  zterrible valuethe r  t>> Multi line note
>> Because I am such
>> an important exception.
>> empty lines work too

(that was an empty line)r-   r  r  re  r  rP  r   s      r   r2   zHBaseExceptionReportingTests.test_exception_group_with_notes.<locals>.exc	  s    : 'C'(o-' %Xt44 & '

T#<0A' " 

 7 9 s<   A "A 	A%AA AA 	A=&A88A=rf  r  r  r  aQ  , in exc
  |     raise ExceptionGroup("nested", excs)
  | ExceptionGroup: nested (2 sub-exceptions)
  | >> Multi line note
  | >> Because I am such
  | >> an important exception.
  | >> empty lines work too
  | 
  | (that was an empty line)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "r   z, in exc
    |     raise ValueError(msg)
    | ValueError: bad value
    | the bad value
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File "z, in exc
    |     raise ValueError(msg)
    | ValueError: terrible value
    | the terrible value
    +------------------------------------
r  r  s       r   test_exception_group_with_notesz;BaseExceptionReportingTests.test_exception_group_with_notes  s    	&##+*HT5G5G4H I##+*HS\\5P5PST5T4U V% &.Jhs||7R7RUV7V6W X% &.Jhs||7R7RUV7V6W XB)C4 %*r    c                 D   d }dt          d| j                   dt          d|j                  j                  dz    dt          d|j                  j                  dz    dt          d|j                  j                  dz    d	}| j	                  |      }| j                  ||       y )
Nc                  J   	 g } dD ]  }	 t        |       t        d|       # t         $ rC}|j                  d|        |j                  d|        | j                  |       Y d }~cd }~ww xY w# t        $ r(}|j                  d       |j                  d        d }~ww xY w)Nr  r  zGoodbye r  r  zGoodbye!r	  r
  s      r   r2   zQBaseExceptionReportingTests.test_exception_group_with_multiple_notes.<locals>.exc:  s    : 'C'(o-' %Xt44	 & '

T#<0

XcU#34A'
 " 

 7 9 

:&s<   A1 "A1 	A.9A)$A1 )A..A1 1	B":#BB"rf  r  r  r&  a^  , in exc
  |     raise ExceptionGroup("nested", excs)
  | ExceptionGroup: nested (2 sub-exceptions)
  | >> Multi line note
  | >> Because I am such
  | >> an important exception.
  | >> empty lines work too
  | 
  | (that was an empty line)
  | Goodbye!
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "r   z, in exc
    |     raise ValueError(msg)
    | ValueError: bad value
    | the bad value
    | Goodbye bad value
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File "z, in exc
    |     raise ValueError(msg)
    | ValueError: terrible value
    | the terrible value
    | Goodbye terrible value
    +------------------------------------
r  r  s       r   (test_exception_group_with_multiple_noteszDBaseExceptionReportingTests.test_exception_group_with_multiple_notes9  s    	*##+*HT5G5G4H I##+*HS\\5P5PSU5U4V W% &.Jhs||7R7RUV7V6W X% &.Jhs||7R7RUV7V6W XB-C: %*r    c                    d }d } |       }d}|j                   j                  }t        j                  ||||      }t	               }||_        dt         d| d}| j                  |      }	dj                  |	j                  d      D 
cg c]  }
|
j                          c}
      }	| j                  |	|       y c c}
w )Nc                  *    t        j                         S r  r   r  r   r    r   rm   zTBaseExceptionReportingTests.test_KeyboardInterrupt_at_first_line_of_frame.<locals>.fq  s    ==?"r    r   r   r  z', in f
    def f():

KeyboardInterrupt
rN   )r   r   typesTracebackTyper}   r   r  r`  r   rn  rstriprS   )r0   rm   r(   r!   lastir   r%   r2   r   r  r  s              r   -test_KeyboardInterrupt_at_first_line_of_framezIBaseExceptionReportingTests.test_KeyboardInterrupt_at_first_line_of_frameo  s    	# **  %?!'j 9*+ %T0BC1AHHJCD* Ds   
B;N)$r   r   r   r   r   r   r   rZ  r^  rb  rr  rv  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r    r   rT  rT    s     "**99A=MN0 ;;?;('.	6I2	*+&6$8Wt7.3+" 	#L+(!+F,+\/+b*+XP+d/+b4+l+r    rT  c                       e Zd Zd Zy)PyExcReportingTestsc                 n   | j                  |      }dj                  t        j                  t	        |      ||j
                              }t        d      5 }t        j                  t	        |      ||j
                         d d d        | j                  j                         |       |S # 1 sw Y   +xY w)Nr   rn   )
r   r   r.   r   rJ  r   r   r   rS   r   )r0   r   ssios       r   r`  zPyExcReportingTests.get_report  s    q!GG&&tAw1??CEX& 	C#%%d1gq!//B	C+	C 	Cs   +B++B4N)r   r   r   r`  r   r    r   r  r    s    r    r  c                       e Zd Zed        Zy)CExcReportingTestsc                     ddl m} | j                  |      }t        d      5 } ||       d d d        |j	                         S # 1 sw Y   j	                         S xY w)Nr   r   rn   )r   r   r   r   r   )r0   r   r   r  s       r   r`  zCExcReportingTests.get_report  sO    -q!X& 	!A	zz|	zz|s   	AAN)r   r   r   r   r`  r   r    r   r  r    s    
  r    r  c                   ^    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)
LimitTestsze Tests for limit argument.
        It's enough to test extact_tb, extract_stack and format_exception c                     t        d      )NzLast raisedr   r:   s    r   last_raises1zLimitTests.last_raises1  s    &&r    c                 $    | j                          y r  )r#  r:   s    r   last_raises2zLimitTests.last_raises2      r    c                 $    | j                          y r  )r%  r:   s    r   last_raises3zLimitTests.last_raises3  r&  r    c                 $    | j                          y r  )r(  r:   s    r   last_raises4zLimitTests.last_raises4  r&  r    c                 $    | j                          y r  )r*  r:   s    r   last_raises5zLimitTests.last_raises5  r&  r    c                 *    t        j                         S r  r  r:   s    r   last_returns_frame1zLimitTests.last_returns_frame1  s    }}r    c                 "    | j                         S r  )r.  r:   s    r   last_returns_frame2zLimitTests.last_returns_frame2      ''))r    c                 "    | j                         S r  )r0  r:   s    r   last_returns_frame3zLimitTests.last_returns_frame3  r1  r    c                 "    | j                         S r  )r3  r:   s    r   last_returns_frame4zLimitTests.last_returns_frame4  r1  r    c                 "    | j                         S r  )r5  r:   s    r   last_returns_frame5zLimitTests.last_returns_frame5  r1  r    c                 \     j                         fd} fd}t        j                  t        dd      5   |       } j	                  t        |      d        j                   |d      |dd          | |d	      |d
d  d        j                   |d      |d d         | |d
      |d d	 t        |      dz
  dz
          j                   |d      g        t        ` | |       |d       dt        _         j                   |       |dd          j                   |d      |dd          j                   |d      |d d        dt        _         j                   |       g        dt        _         j                   |       g        d d d        y # 1 sw Y   y xY w)Nc                  0    t        j                  fi | S r  r.   extract_stack)kwargsr!   s    r   extractz.LimitTests.test_extract_stack.<locals>.extract  s    **5;F;;r    c                     j                  | d | |d |        j                  | |dz   d  ||dz   d         j                  t        |       t        |             y rM  )rS   rT   )r  r   ignorer0   s      r   assertEqualExceptz8LimitTests.test_extract_stack.<locals>.assertEqualExcept  s^    VGV_hw.?@VF1HI.0CDS[#h-8r    tracebacklimitr  r   rL   limitr  r  iirJ   r   ra   r\  r   )r7  r   	swap_attrr   assertGreaterrT   rS   rA  )r0   r=  r@  nolimr!   s   `   @r   test_extract_stackzLimitTests.test_extract_stack  s   ((*	<	9
 s$4d; 	,IEs5z1-W1-uRSz:gC0%,EW2.bq	:gD15#;E
1QOW1-r2"gi5!"CWYbc
3W1-uRSz:W2.bq	:!"CWY+!#CWY+#	, 	, 	,s   E!F""F+c                    	 | j                          fd}t        j                  t
        dd      5   |       }| j                  t        |      d       | j                   |d      |d d        | j                   |d      |       | j                   |d      |dd         | j                   |d	      |       | j                   |d
      g        t
        `| j                   |       |       dt
        _        | j                   |       |d d        | j                   |d      |d d        | j                   |d      |dd         d
t
        _        | j                   |       g        dt
        _        | j                   |       g        d d d        y # t        $ r}|j                  Y d }~d }~ww xY w# 1 sw Y   y xY w)Nc                  0    t        j                  fi | S r  )r.   
extract_tb)r<  r%   s    r   r=  z+LimitTests.test_extract_tb.<locals>.extract  s    ''5f55r    rA  r  r   rL   rB  r&  r  r   ra   r\  r   )	r,  r   r   r   rD  r   rS   rT   rA  )r0   r   r=  rF  r%   s       @r   test_extract_tbzLimitTests.test_extract_tb  s   	!	6 s$4d; 	,IESZ-W1-uRay9W2.6W2.bc
;W3/7W1-r2"WY.!"CWYbq	2W1-uRay9W2.bc
;!"CWY+!#CWY+#	, 	,  	!B	!
	, 	,s#   F  E$G 	G )F;;G Gc                    	 | j                          fd}t        j                  t        dd      5   |       }| j                  t        |      d       | j                   |d      |d d        | j                   |d      |       | j                   |d      |dd         | j                   |d	      |       | j                   |d
      g        t        `| j                   |       |       dt        _        | j                   |       |d d        | j                   |d      |d d        | j                   |d      |dd         d
t        _        | j                   |       g        dt        _        | j                   |       g        d d d        y # t        $ r}|Y d }~d }~ww xY w# 1 sw Y   y xY w)Nc                  6    t        j                  fi | dd S )NrJ   r   )r.   r   )r<  r2   s    r   r=  z1LimitTests.test_format_exception.<locals>.extract	  s     --c<V<QrBBr    rA  r  r   rL   rB  r&  r  rK  r   ra   r\  r   )r,  r   r   rD  r   rS   rT   rA  )r0   r   r=  rF  r2   s       @r   test_format_exceptionz LimitTests.test_format_exception	  s   	
	C s$4d; 	,IESZ-W1-uRay9W2.6W2.bc
;W3/7W1-r2"WY.!"CWYbq	2W1-uRay9W2.bc
;!"CWY+!#CWY+#	, 	,  	C		, 	,s#   F  E$F9 	F6)F11F69GN)r   r   r   r  r#  r%  r(  r*  r,  r.  r0  r3  r5  r7  rG  rL  rO  r   r    r   r   r     sI    N'****,8,6,r    r   c                       e Zd Zd Zd Zy)MiscTracebackCasesc                    fd}fdd 	  |        j                  j                  j                  j                  }| j	                  t        |j                        d       t        j                  |       | j	                  t        |j                        d       y # t         $ r}|j                  }Y d }~d }~ww xY w)Nc                                y r  r   )middles   r   outerz,MiscTracebackCases.test_clear.<locals>.outer%	  s    Hr    c                                y r  r   )inners   r   rT  z-MiscTracebackCases.test_clear.<locals>.middle'	  s    Gr    c                      d} ddz   y r   r   )r?  s    r   rW  z,MiscTracebackCases.test_clear.<locals>.inner)	  s    AaCr    rJ   r   )	rW  r   r(   r&   rS   rT   r$   r.   clear_frames)r0   rU  r   r%   inner_framerW  rT  s        @@r   
test_clearzMiscTracebackCases.test_clear$	  s    				!G
 jj((0099[112A6 	r" 	[112A6  	!B	!s   B" "	C+B<<Cc                     d } |       }|j                   j                  }| j                  |dd  t        |dz   ddft        |dz   ddfg       | j                  t	        |d	         d
       y )Nc                  *    t        j                         S r  r:  r   r    r   r=  z6MiscTracebackCases.test_extract_stack.<locals>.extract=	  s    **,,r    r  rL   rG  zresult = extract()rJ   r=  z return traceback.extract_stack()r   rI   )r   r   rS   r  rT   )r0   r=  r)  r   s       r   rG  z%MiscTracebackCases.test_extract_stack<	  sw    	-!!00vax!57KLvax,NO' 	 	VAY+r    N)r   r   r   r[  rG  r   r    r   rQ  rQ  	  s    
70	,r    rQ  c                   *    e Zd Zd Zd Zd Zd Zd Zy)	TestFramec                 @   t        j                          t        j                  dt                      t	        j
                  ddd      }| j                  |d       | j                  t        |      d       | j                  |t	        j
                  ddd             | j                  |t        |             | j                  t        |      |       | j                  |j                         | j                  |t                      | j                  |t               y )Nrm   rJ   dummy)rm   rJ   ra  %"""Test cases for traceback module""")	linecache
clearcache	lazycacheglobalsr.   FrameSummaryrS   tupleassertIsNonelocalsassertNotEqualobjectr	   r0   rm   s     r   test_basicszTestFrame.test_basicsJ	  s    C+""373F	HqF	HI2237CDE!H% 	q1%!((#Avx(I&r    c                 
   t        j                          t        j                  dddd      }| j	                  d |j
                         t        j                  dt                      | j	                  d|j                         y )Nrm   rJ   ra  F)lookup_linerb  )	rc  rd  r.   rg  rS   _linere  rf  linerm  s     r   test_lazy_lineszTestFrame.test_lazy_lines[	  sb    ""37Fqww'C+3FF	r    c                 j    t        j                  dd d      }| j                  |j                  d        y )Nrm   ra  r.   rg  rS   rr  rm  s     r   test_no_linezTestFrame.test_no_lined	  s*    ""3g6&r    c                 n    t        j                  dddd      }| j                  d|j                         y )Nrm   rJ   ra  rr  rr  ru  rm  s     r   test_explicit_linezTestFrame.test_explicit_lineh	  s,    ""37@(r    c                 l    t        j                  dddd      }| j                  t        |      d       y )Nrm   rJ   ra  rr  rx  rI   )r.   rg  rS   rT   rm  s     r   test_lenzTestFrame.test_lenl	  s,    ""37@Q#r    N)r   r   r   rn  rs  rv  ry  r{  r   r    r   r_  r_  H	  s    '"')$r    r_  c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)	TestStackc                     d }t        t        j                  d             } |       }| j                  t	        |      t	        |      z
  d       | j                  |dd  |       y )Nc                  >    t        t        j                  d             S r  )listr.   
walk_stackr   r    r   deeperz)TestStack.test_walk_stack.<locals>.deepert	  s    	,,T233r    rJ   )r  r.   r  rS   rT   )r0   r  s1s2s       r   test_walk_stackzTestStack.test_walk_stacks	  sV    	4)&&t,-XR3r7*A.AB$r    c                     	 ddz   t        t        j                              }| j                  t        |      d       y # t         $ r}|j                  }Y d }~Td }~ww xY wr   )r   r   r  r.   walk_tbrS   rT   )r0   r   r%   r  s       r   test_walk_tbzTestStack.test_walk_tb{	  sT    	!aC ""2&'Q#  	!B	!s   A 	A 
AA c                     t         j                  j                  t        j                  d             }| j	                  |t         j                         y r  )r.   StackSummaryr=  r  assertIsInstancer0   r  s     r   rG  zTestStack.test_extract_stack	  s9    ""**9+?+?+EFa!7!78r    c                     t         j                  j                  t        j                  d       d      }| j	                  t        |      d       y )Nr   rB  )r.   r  r=  r  rS   rT   r  s     r   test_extract_stack_limitz"TestStack.test_extract_stack_limit	  s<    ""**9+?+?+EQ*OQ#r    c                 Z   t        j                          t        j                  dt                      t	        dd      }t        |d d       }t        j                  j                  t        |dfg      d      }t        j                          | j                  |d   j                  d       y )N/foo.pyr  r   Tlookup_linesr   
import sys)rc  rd  updatecacherf  	test_code
test_framer.   r  r=  r   rS   rr  r0   rN  rm   r  s       r   test_extract_stack_lookup_linesz)TestStack.test_extract_stack_lookup_lines	  s    i3i*q$%""**4!Q>*M1L1r    c                 r   t        j                          t        dd      }t        |d d       }t        j
                  j                  t        |dfg      d      }| j                  i t         j                         t        j                  dt                      | j                  |d   j                  d       y )Nr  r  r   Fr  r   r  )rc  rd  r  r  r.   r  r=  r   rS   cacher  rf  rr  r  s       r   *test_extract_stackup_deferred_lookup_linesz4TestStack.test_extract_stackup_deferred_lookup_lines	  s    i*q$%""**4!Q>*NY__-i31L1r    c                     t         j                  j                  dg      }| j                  dg|j	                                y Nfoo.pyrJ   fredrr  z*  File "foo.py", line 1, in fred
    line
r.   r  	from_listrS   r   r  s     r   test_from_listzTestStack.test_from_list	  s9    "",,.K-LM;<HHJ	r    c                     t         j                  j                  dg      }d|d<   t         j                  j                  |      }| j                  dg|j	                                y )Nr  )r  rL   r  rr  r   z*  File "foo.py", line 2, in fred
    line
r  )r0   r  r  s      r   test_from_list_edited_stackz%TestStack.test_from_list_edited_stack	  sX    "",,.K-LM,!##--a0;<IIK	r    c                     t         j                  j                  dg      }| j                  dg|j	                                y r  r  r  s     r   test_format_smokezTestStack.test_format_smoke	  s;     "",,.K-LM;<HHJ	r    c                 "   t        j                  dt                      t        dd      }t	        |t               ddi      }t
        j                  j                  t        |dfg      d      }| j                  |d   j                  dd	i       y )
Nr  r  	somethingrJ   r   Tcapture_localsr   1rc  r  rf  r  r  r.   r  r=  r   rS   rj  r  s       r   test_localszTestStack.test_locals	  sw    i3i*q')k1%56""**4!Q>$*O1{C&89r    c                    t        j                  dt                      t        dd      }t	        |t               ddi      }t
        j                  j                  t        |dfg            }| j                  |d   j                  d        y )Nr  r  r  rJ   r   r   r  r  s       r   test_no_localszTestStack.test_no_locals	  sm    i3i*q')k1%56""**4!Q>:1d+r    c                     d } |dd      }| j                  dt        |j                  j                  dz   fz  g|j	                                y )Nc                 t    d}d}t         j                  j                  t        j                  d       dd      S )NrJ   rL   T)r  rC  )r.   r  r=  r  )kvr  r7  s       r   
some_innerz0TestStack.test_format_locals.<locals>.some_inner	  s>    AA))11$$T*4q 2 J Jr    ra   rI   zw  File "%s", line %d, in some_inner
    return traceback.StackSummary.extract(
    a = 1
    b = 2
    k = 3
    v = 4
)rS   r  r   r   r   )r0   r  r  s      r   test_format_localszTestStack.test_format_locals	  sZ    	J
 q!
 '
(;(;(J(JQ(NOP  xxz	r    c                      G d dt         j                        fd} |       }| j                  |j                         t         d|j
                  j                  dz    g       y )Nc                       e Zd Zd Zy)>TestStack.test_custom_format_frame.<locals>.CustomStackSummaryc                 8    |j                    d|j                   S )N:)r  r   )r0   frame_summarys     r   format_frame_summaryzSTestStack.test_custom_format_frame.<locals>.CustomStackSummary.format_frame_summary	  s!    '001=3G3G2HIIr    N)r   r   r   r  r   r    r   CustomStackSummaryr  	  s    Jr    r  c                  P     j                  t        j                  d       d      S )NrJ   rB  )r=  r.   r  )r  s   r   r  z6TestStack.test_custom_format_frame.<locals>.some_inner	  s+    %--$$T*! . 5 5r    r  rJ   )r.   r  rS   r   r  r   r   )r0   r  r  r  s      @r   test_custom_format_framez"TestStack.test_custom_format_frame	  s`    	J!7!7 	J	5 LHHJz:..==ABCD	Fr    c                 b   d fd} |       } G d dt         j                        }|j                  t        j                  |            j	                         }| j                  t        |      d       j                  j                  dz   }| j                  |d   dt         d| d	       y )
Nc                      ddz   y r   r   r   r    r   rm   z)TestStack.test_dropping_frames.<locals>.f	  	    aCr    c                  Z    	          y # t         $ r} | j                  cY d } ~ S d } ~ ww xY wr  )r   r   )r   rm   s    r   r  z)TestStack.test_dropping_frames.<locals>.g	  s'    ' '&'s    	*%**c                        e Zd Z fdZ xZS ).TestStack.test_dropping_frames.<locals>.Skip_Gc                 B    |j                   dk(  ry t        | 	  |      S )Nr  )r  superr  )r0   r  r~   s     r   r  zCTestStack.test_dropping_frames.<locals>.Skip_G.format_frame_summary	  s$     %%,w3MBBr    )r   r   r   r  __classcell__r~   s   @r   Skip_Gr  	  s    C Cr    r  rJ   r   r  r  z, in f
    1/0
)
r.   r  r=  r  r   rS   rT   r   r   r  )r0   r  r%   r  stacklnorm   s         @r   test_dropping_frameszTestStack.test_dropping_frames	  s    		' S	CY++ 	C b!##)68 	 	UQ'jj''!+!Hxj->?	
r    N)r   r   r   r  r  rG  r  r  r  r  r  r  r  r  r  r  r  r   r    r   r}  r}  q	  sI    %$9$22:, F
r    r}  c                       e Zd ZdefdZy)Unrepresentabler  c                     t        d      )Nr  r"  r:   s    r   r  zUnrepresentable.__repr__	  s    )**r    N)r   r   r   r   r  r   r    r   r  r  	  s    +# +r    r  c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z e       d        Zy)TestTracebackExceptionc                 j   	 ddz   | j                  d j                         | j                  d |j                         | j                  d|j                         | j                  |j                         | j                  t              |j                         | j                  t        |      t        |             y # t         $ rh}|}t        j                  j                  |      }t        j                  j                  t        j                  |j                              }Y d }~&d }~ww xY w)NrJ   r   Fr   r.   TracebackExceptionfrom_exceptionr  r=  r  r   rS   	__cause____context____suppress_context__r  rJ  exc_typer   )r0   r   exc_objr2   expected_stacks        r   
test_smokez!TestTracebackException.test_smoke
  s    	4aC 	s}}-s/ 8 893g5Ws3x0  	4G..==a@C&33;;!!!//24N	4s   C 	D2
AD--D2c                    d }	  |        | j                  }| j                  }| j                  d |j                         | j                  d |j                         | j                  d|j                         | j                  ||j                         | j                  t              |j                          | j                  t#        |      t#        |             y # t         $ r|}|}|j                  }t        j                  j	                  t        j
                  |      ddd      | _        t        j                  j                  |ddd      | _	        Y d }~Rd }~ww xY w)Nc                      ddz   y r   r   r   r    r   r   z7TestTracebackException.test_from_exception.<locals>.foo
  r  r    rJ   FT)rC  r  r  )r   r   r.   r  r=  r  r  r  r  r2   rS   r  r  r  r  rJ  r  r   )r0   r   r   r  r%   r  r2   s          r   test_from_exceptionz*TestTracebackException.test_from_exception
  s,   			EE ,,hhs}}-s/ 8 893g5Ws3x0  	EGB"+"8"8"@"@!!"%QU# #A #%D !33BBt C EDHH	Es   C 	E#'A1EE#c                    	 	 ddz   t        j                         }t        j                  j	                  |      }t        d      }t        d      |# t        j                         }t        j                  j	                  |      }t        d      }t        d      |xY w# t
        $ rg}|}t        j                  j	                  |      }t        j                  j                  t        j                  |j                              }Y d }~nd }~ww xY wt        j                  t
        d       }| j                  ||j                         | j                  |j                         | j                  d|j                         | j                  ||j                         | j                  t        |      |j                          | j                  t#        |      t#        |             y )NrJ   r   causeuh ohTr   r$  r.   r  r  r   r  r=  r  r   rS   r  r  r  r  rJ  r  r   )r0   r2   exc_contextr  r   r  r  	exc_causes           r   rr  z!TestTracebackException.test_cause'
  sq   	44!mmo'::II#N!'*(e3 mmo'::II#N!'*(e3 	4G..==a@C&33;;!!!//24N	4
 00E4H	CMM2coo6s7783g5Ws3x0s+   A A
B  ABB   	D)ADDc                 j   	 	 ddz   t        j                         }t        j                  j	                  |      }t        d      # t        j                         }t        j                  j	                  |      }t        d      xY w# t
        $ rg}|}t        j                  j	                  |      }t        j                  j                  t        j                  |j                              }Y d }~nd }~ww xY w| j                  d |j                         | j                  |j                         | j                  d|j                         | j                  ||j                         | j                  t        |      |j                          | j                  t#        |      t#        |             y )NrJ   r   r  Fr  r0   r2   r  r   r  r  s         r   rv  z#TestTracebackException.test_context=
  sE   	4)!mmo'::II#N(( mmo'::II#N(( 	4G..==a@C&33;;!!!//24N	4
 	s}}-coo6 8 893g5Ws3x0s)   A >B ?BB 	C8AC33C8c           	         fd	          | j                  d       t        j                  j	                        }t        |j                               }| j                  t        |      t        j                                | j                  t        |D cg c]	  }d|v s| c}      t        j                         dz         | j                  d|d          y # t        $ r}|}Y d }~d }~ww xY wc c}w )Nc                  .    	 ddz   y #            Y y xY wr   r   r  s   r   rm   z9TestTracebackException.test_long_context_chain.<locals>.fR
  s    !s   	 	zException not raisedzZeroDivisionError:g      ?z0RecursionError: maximum recursion depth exceededr   )r   r  r.   r  r  r  r   rE  rT   r   r  rW   )r0   r   r  teresr  rm   s         @r   test_long_context_chainz.TestTracebackException.test_long_context_chainQ
  s    		.C II,-))88A299; 	3s8S%:%:%<=C=q#71#<=>!!#c)	+ 	>B	I  	G	 >s#   C 	C6#C6	C3'C..C3c                    	 	 ddz   t        d      }t        d      |# t        d      }t        d      |xY w# t         $ ri}|}t        j                  j                  |d      }t        j                  j                  t        j                  |j                              }Y d }~nd }~ww xY wt        j                  t         d       }| j                  ||j                         | j                  d |j                         | j                  d|j                         | j                  ||j                         | j                  t        |      |j                         | j                  t        |      t        |             y )NrJ   r   r  r  Tcompactr  )r0   r  r   r  r2   r  r  s          r   test_compact_with_causez.TestTracebackException.test_compact_with_causej
  s6   
	:4!!'*(e3 "'*(e3 	:G..==gt=TC&33;;!!'"7"78:N	:
 00E4H	CMM2s/s7783g5Ws3x0s"    : 7: 	B,AB''B,c                 n   	 	 ddz   t        j                         }t        j                  j	                  |      }t        d      # t        j                         }t        j                  j	                  |      }t        d      xY w# t
        $ ri}|}t        j                  j	                  |d      }t        j                  j                  t        j                  |j                              }Y d }~nd }~ww xY w| j                  d |j                         | j                  |j                         | j                  d|j                         | j                  ||j                         | j                  t        |      |j                          | j                  t#        |      t#        |             y )NrJ   r   r  Tr  Fr  r  s         r   test_compact_no_causez,TestTracebackException.test_compact_no_cause~
  sL   	:)!mmo'::II#N(( mmo'::II#N(( 	:G..==a=NC&33;;!!'"7"78:N	:
 	s}}-coo6 8 893g5Ws3x0s)   A >B ?BB 	C:AC55C:c                    	 ddz   t        j                        }t        j                  |j                        }t        j
                  j                  |      }| j                  t        j                  |      |       | j                  t        j                  |j                        |       y # t         $ r}|}Y d }~d }~ww xY wr   )r   r   getrefcountr   r.   r  r  rS   )r0   r   r  refcnt1refcnt2r2   s         r   /test_no_refs_to_exception_and_traceback_objectszFTestTracebackException.test_no_refs_to_exception_and_traceback_objects
  s    	aC //'*//'"7"78**99'B17;)>)>?I  	G	s   B/ /	C8B??Cc                 d   	 ddz   | j	                         | j                  ||       | j                  |t                      | j                  |t               y # t         $ rJ}|}t        j                  j                  |      }t        j                  j                  |      }Y d }~d }~ww xY wr   )	r   r.   r  r  assertIsNotrS   rk  rl  r	   )r0   r   r  r2   exc2s        r   test_comparison_basicz,TestTracebackException.test_comparison_basic
  s    	HaC
 	d#d#C*i(  	HG..==gFC//>>wGD	Hs   A 	B/%A B**B/c                    d fd}	  |        t        j                  j                        }t        j                  j                  |d      }t        j                  j                  |d      }| j	                  ||       | j                  ||       t        j                  j                  |d      }| j                  ||       t        j                  j                  |d      }t        j                  j                  |dd	      }	| j	                  ||	       t        j                  j                  |d
      }
t        j                  j                  |d
d	      }| j                  |
|       y # t         $ r}|}Y d }~td }~ww xY w)Nc                  &    	 t        d      #   xY wr  r   r   r    r   	raise_exczKTestTracebackException.test_comparison_params_variations.<locals>.raise_exc
  s     --s    c                      d\  } }         y )N)rJ   rL   r   )r<  rP   r   s     r   raise_with_localszSTestTracebackException.test_comparison_params_variations.<locals>.raise_with_locals
  s    DAqKr    r&  rB  rL   Tr  r   )rC  r  r  )r   r.   r  r  rS   rk  )r0   r  r   r  r2   exc1r  exc3exc4exc5exc6exc7r   s               @r   !test_comparison_params_variationsz8TestTracebackException.test_comparison_params_variations
  sa   			 **99'B++::7":M++::7!:Ld#C& ++::7SW:XC& ++::7":M++::7"]a:bt$ ++::7":M++::7"]a:bD$'-  	G	s   E5 5	F>FFc                 x   g }t        d      D ]  }	 ddz   
 | j                  |d   |d          | j                  t        |d   j                               t        |d   j                                      y # t        $ r8}|j                  t        j                  j                  |             Y d }~d }~ww xY wr   )	r  r   r  r.   r  r  rS   r  r   )r0   r  r   r   s       r   /test_comparison_equivalent_exceptions_are_equalzFTestTracebackException.test_comparison_equivalent_exceptions_are_equal
  s    q 	LAL!	L
 	a$q'*d1gnn./d1gnn6F1GH  LI88GGJKKLs   A88	B9.B44B9c                 R    G d dt               } |d      } |d      }	 ||# |$ r 	 |# |$ r}|}Y d }~nd }~ww xY wY nw xY wt        j                  j                  |      }t	        |j                               }| j                  d|d          | j                  d|d          y )	Nc                       e Zd Zd Zy)CTestTracebackException.test_unhashable.<locals>.UnhashableExceptionc                      yr/  r   r0  s     r   r2  zJTestTracebackException.test_unhashable.<locals>.UnhashableException.__eq__
  r3  r    Nr4  r   r    r   r5  r  
  r6  r    r5  r7  r8  zUnhashableException: ex2
rL   zUnhashableException: ex1
r   )r   r.   r  r  r  r   rW   )r0   r5  r7  r8  r   r  r2   	formatteds           r   r<  z&TestTracebackException.test_unhashable
  s    	) 	 "%(!%(	3" 		& 		
 **99'B&	2IaLA2IaLAs)   $ A,=8A=AAc                 D   fd	  d       | j                  j                         y # t         $ ri}t        j                  j                  |d      }t        j                  j                  t        j                  |j                        d      }Y d }~d }~ww xY w)Nc                 ,    | r | dz
         y ddz   y r   r   )nrecurses    r   r  z2TestTracebackException.test_limit.<locals>.recurse
  s    !!r    r&  r   rB  )
r   r.   r  r  r  r=  r  r   rS   r  )r0   r   r2   r  r  s       @r   
test_limitz!TestTracebackException.test_limit
  s    	
	=BK
 	3	  	=..==aq=IC&33;;!!!//2! < =N	=s   - 	BABBc                    t        j                          t        d      }t        dd      }t	        |d d       }t        |dd d      }t        j                  t        ||d      }| j                  t         j                  i        t        j                  dt                      | j                  |j                  d   j                  d       y )	Nr  r  r  r   r   Fr  r  )rc  rd  r   r  r  test_tbr.   r  rS   r  r  rf  r  rr  r0   r   rN  rm   r%   r2   s         r   test_lookup_linesz(TestTracebackException.test_lookup_lines
  s    gi*q$%Q4#**9a%P"-i31**L9r    c                 `   t        j                  dt                      t        d      }t	        dd      }t        |t               ddt               d      }t        |dd d      }t        j                  t        ||d	
      }| j                  |j                  d   j                  dddd       y )Nr  r  r  rJ   string)r  r1  unrepresentabler   r   Tr  r  z'string'z<local repr() failed>)rc  r  rf  r   r  r  r  r  r.   r  rS   r  rj  r  s         r   r  z"TestTracebackException.test_locals  s    i3gi*q')1x\k\m%noQ4#**q"T3IIaL
G^_	ar    c                 @   t        j                  dt                      t        d      }t	        dd      }t        |t               ddi      }t        |dd d      }t        j                  t        ||      }| j                  |j                  d   j                  d        y )Nr  r  r  r  rJ   r   r   )rc  r  rf  r   r  r  r  r.   r  rS   r  rj  r  s         r   r  z%TestTracebackException.test_no_locals  s    i3gi*q')k1%56Q4#**9a<1,,d3r    c                     t        j                  t        t        d      d       }| j                  t	        |j                               dg       y )NhavenzException: haven
)r.   r  r   rS   r  r   )r0   r2   s     r   test_traceback_headerz,TestTracebackException.test_traceback_header  s<     **9i6H$Ocjjl+.B-CDr    c                     d }t         j                  j                   |       d      }t               }|j	                  |       | j                  |j                         j                  d      dd  g d       y )Nc                  D    d} 	 | dz   y # t         $ r}|cY d }~S d }~ww xY w)N   r   r"  )r<  r   s     r   rm   z,TestTracebackException.test_print.<locals>.f"  s(    A! s   
 	Tr  r   rN   r  )z    x/0z    ~^~z
    x = 12z#ZeroDivisionError: division by zeror   )r.   r  r  r   r  rS   r   rn  )r0   rm   r2   r   s       r   
test_printz!TestTracebackException.test_print   sj    	 **99!#d9S		v	OO##D)"#.	r    N)r   r   r   r  r  rr  rv  r  r  r  r  r  r	  r  r<  r  r  r  r  r   r
   r$  r   r    r   r  r  	  su    11.1,1(I21(1(
J
)#(JIB&4	:
a4E  r    r  c                   H     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
 xZS )	&TestTracebackException_ExceptionGroupsc                 L    t         |           | j                         | _        y r  )r  setUp_get_exception_grouprc  )r0   r~   s    r   r(  z,TestTracebackException_ExceptionGroups.setUp5  s    ++-r    c                    d }d }|j                   j                  | _        |j                   j                  | _        	 	 	  |        	  |d       t        dg      # t        $ r}|}Y d }~'d }~ww xY w# t        $ r}|}Y d }~6d }~ww xY w# t
        $ r}|}Y d }~nd }~ww xY w	  |d       n# t        $ r}|}Y d }~nd }~ww xY wt        d|g      # t
        $ r}|cY d }~S d }~ww xY w)Nc                      ddz   y r   r   r   r    r   rm   zFTestTracebackException_ExceptionGroups._get_exception_group.<locals>.f:  r  r    c                     t        |       r  r   r  s    r   r  zFTestTracebackException_ExceptionGroups._get_exception_group.<locals>.g=  s    Q-r    rM  r     r  )r   r   lno_flno_gr   re  r   )	r0   rm   r  r   r  r  r  r  rc  s	            r   r)  z;TestTracebackException_ExceptionGroups._get_exception_group9  s    		  ZZ..
ZZ..
	CbE %UT4L99 ! D ! D " "  t55 	I	s    A A6 B 	A3'A.)B .A33B 6	B?BB BB 	B#BC B##C 'B0 /C 0	C9C ;C  CC 	C+C& C+&C+c                     | j                   }t        j                  t        |      ||j                        }t        j                  j                  |      }| j                  ||       | j                  ||       y r  )rc  r.   r  rJ  r   r  r  rS   )r0   rc  teg1teg2s       r   !test_exception_group_constructionzHTestTracebackException_ExceptionGroups.test_exception_group_constructionY  s_    WW++DHb":J:JK++::2>t$t$r    c                     t         j                  j                  | j                        }dj	                  |j                               j                  d      }dj                  d      }| j                  ||       y )Nr   rN   z'ExceptionGroup: eg2 (2 sub-exceptions)
)r.   r  r  rc  r   r/   rn  rS   )r0   tegr  r   s       r   *test_exception_group_format_exception_onlyzQTestTracebackException_ExceptionGroups.test_exception_group_format_exception_only`  s^    **99$''BGGC5578>>tD	=CCDIH-r    c                 r   t         j                  j                  | j                        }dj	                  |j                               j                  d      }| j                  }| j                  }g ddt         d|dz    ddd	d
ddt         d|dz    ddddddt         d|dz    dddt         d|dz    dddddddt         d|dz    dddt         d|dz    dddd d!d"dt         d|d#z    dd$dt         d|dz    dd%d&d' }| j                  ||       y )(Nr   rN   z6  + Exception Group Traceback (most recent call last):z  |   File "r  r_   z, in _get_exception_groupz1  |     raise ExceptionGroup("eg2", [exc3, exc4])z*  | ExceptionGroup: eg2 (2 sub-exceptions)(  +-+---------------- 1 ----------------z8    | Exception Group Traceback (most recent call last):z    |   File "   z3    |     raise ExceptionGroup("eg1", [exc1, exc2])z,    | ExceptionGroup: eg1 (2 sub-exceptions)*    +-+---------------- 1 ----------------z*      | Traceback (most recent call last):z      |   File "r  z      |     f()rJ   r  z      |     1/0z      |     ~^~z+      | ZeroDivisionError: division by zero*      +---------------- 2 ----------------   z      |     g(42)z, in gz      |     raise ValueError(v)z      | ValueError: 42+      +------------------------------------(    +---------------- 2 ----------------z(    | Traceback (most recent call last):r%  z    |     g(24)z    |     raise ValueError(v)z    | ValueError: 24)    +------------------------------------)r.   r  r  rc  r   r   rn  r/  r0  r  rS   )r0   r6  r  r/  r0  r   s         r   test_exception_group_formatzBTestTracebackException_ExceptionGroups.test_exception_group_formatg  sf   **99$''BGGCJJL)//5	



"L""8*HU2XJ>WX" H" A	"
 ?" O" %XJhuRxj@YZ" J" C" A" A" 'xjq	AZ[" &" 'xjq	H" &"  &!"" B#"$ A%"& A'"( 'xjr
B[\)"* (+", 'xjq	H-". 6/"0 -1"2 B3"4 ?5"6 ?7"8 %XJhuRxj@YZ9": &;"< %XJhuQwivF="> 4?"@ +A"B @C"D E"H 	H-r    c                    g }g }t        d      D ]  }|j                  t        |              t        d      D ]  }|j                  t        |              t        } |d |d|       |d|      g      }t
        j                  j                  |d      }dj                  |j                               j                  d	      }g d
}| j                  ||       y )Nra   r&  rc  r  r  rL   )max_group_widthr   rN   )z)  | ExceptionGroup: eg (2 sub-exceptions)r9  z,    | ExceptionGroup: eg1 (3 sub-exceptions)r;  z      | ValueError: 0r<        | ValueError: 1,      +---------------- ... ----------------z      | and 1 more exceptionr>  r?  z-    | ExceptionGroup: eg2 (10 sub-exceptions)r;  z      | TypeError: 0r<  z      | TypeError: 1rE  z      | and 8 more exceptionsr>  r   )r  r  r-   r   re  r.   r  r  r   r   rn  rS   )	r0   excs1excs2r?  r  rc  r6  r  r   s	            r   test_max_group_widthz;TestTracebackException_ExceptionGroups.test_max_group_width  s    q 	(ALLA'	(r 	'ALL1&	' r%'E5)9:;**99"a9PGGCJJL)//5	, 	H-r    c           	      H   t        d      }t        d      D ]$  }t        dt        |       |t        |      g      }& t        j
                  j                  |d      }dj                  |j                               j                  d      }g d}| j                  ||       y )	Nr  ra   r2   rL   )max_group_depthr   rN   )z*  | ExceptionGroup: exc (3 sub-exceptions)r9  z    | ValueError: -2r?  z,    | ExceptionGroup: exc (3 sub-exceptions)r;  z      | ValueError: -1r<  z"      | ... (max_group_depth is 2)z*      +---------------- 3 ----------------rD  r>  z(    +---------------- 3 ----------------z    | ValueError: 2r@  r   )r   r  re  r-   r.   r  r  r   r   rn  rS   )r0   r2   r?  r6  r  r   s         r   test_max_group_depthz;TestTracebackException_ExceptionGroups.test_max_group_depth  s    
#q 	NA QBjm(LMC	N **99#q9QGGCJJL)//5	$ 	H-r    c                    	 | j                   # t        $ r}|}Y d }~nd }~ww xY wt        d      D ]  }	 |# t        $ r}|}Y d }~d }~ww xY w t        j
                  j                        }t        j
                  j                  |      }t        j
                  j                  |d      }t        j
                  j                  |d      }| j                  ||       | j                  ||       | j                  ||       | j                  ||       | j                  |t                      | j                  |t               y )Nr   i,  rB  ra   )rc  re  r  r   r.   r  r  r  rS   rk  rl  r	   )r0   r   r2   r   r  r  r  nes           r   test_comparisonz6TestTracebackException_ExceptionGroups.test_comparison  s   	''M 	C	q 	A	 	
 **99'B++::7C++::7#:N))888Jd#d#d#C$C*i(s%    	##7	A AA)r   r   r   r(  r)  r4  r7  rA  rH  rK  rN  r  r  s   @r   r&  r&  4  s.    .*@%.+.Z$.L.8)r    r&  c                       e Zd Zd!dZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d  Z!y)"SuggestionFormattingTestBaseNc                 N    fd}n}| j                  |dd       }|d   S )Nc                      t                y r  )getattr)	attr_nameobjs   r   r   z=SuggestionFormattingTestBase.get_suggestion.<locals>.callable  s    Y'r    r   r   r   r   )r   )r0   rU  rT  r   r  s    ``  r   get_suggestionz+SuggestionFormattingTestBase.get_suggestion  s=     ( H))" * 
 Ar    c           	      &    G d d      } G d d      } G d d      } G d d      } G d	 d
      } G d d      } G d d      }|df|df|df|df|df|df|df|dffD ].  \  }}	| j                   |       d      }
| j                  |	|
       0 y )Nc                        e Zd ZdxZxZxZZdZy)KSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.SubstitutionN)r   r   r   noise
more_noiser  bcblechr   r    r   SubstitutionrZ    s    *..E.J.REr    r_  c                        e Zd ZdxZxZxZZdZy)JSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.EliminationN)r   r   r   r[  r\  r  r]  blchr   r    r   Eliminationra    s    *..E.J.RDr    rc  c                        e Zd ZdxZxZxZZdZy)GSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.AdditionN)r   r   r   r[  r\  r  r]  bluchinr   r    r   Additionre    s    *..E.J.RGr    rg  c                       e Zd ZdZdZy)ZSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.SubstitutionOverEliminationN)r   r   r   blachblucr   r    r   SubstitutionOverEliminationri  	  s    EDr    rl  c                       e Zd ZdZdZy)WSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.SubstitutionOverAdditionN)r   r   r   rj  bluchir   r    r   SubstitutionOverAdditionrn    s    EFr    rp  c                       e Zd ZdZdZy)VSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.EliminationOverAdditionN)r   r   r   bluchark  r   r    r   EliminationOverAdditionrr    s    FDr    rt  c                       e Zd ZdZdZdZy)YSuggestionFormattingTestBase.test_getattr_suggestions.<locals>.CaseChangeOverSubstitutionN)r   r   r   LuchfluchBLuchr   r    r   CaseChangeOverSubstitutionrv    s    DEEr    rz  
'bluchin'?'blech'?'blch'?'blach'?'bluc'?'BLuch'?bluchrW  rW   )r0   r_  rc  rg  rl  rp  rt  rz  cls
suggestionr  s              r   test_getattr_suggestionsz5SuggestionFormattingTestBase.test_getattr_suggestions  s    	 		 		 		 		 		 		 	 |$:&)$|$(*5%z2$i0'4	 
 	.OC ((8FMM*f-	.r    c                 j     G d d      }| j                   |       d      }| j                  d|       y )Nc                       e Zd ZdZy)cSuggestionFormattingTestBase.test_getattr_suggestions_do_not_trigger_for_long_attributes.<locals>.ANr   r   r   r^  r   r    r   r  r  (      Er    r  somethingverywrongr^  rW  r  r0   r  r  s      r   ;test_getattr_suggestions_do_not_trigger_for_long_attributeszXSuggestionFormattingTestBase.test_getattr_suggestions_do_not_trigger_for_long_attributes'  s3    	 	 $$QS*>?&)r    c                 p    G d d      }dD ]  }| j                  |      5  | j                  ||      }| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d	|       | j                  d
|       d d d         y # 1 sw Y   xY w)Nc                        e Zd ZdxZxZxZxZZy)oSuggestionFormattingTestBase.test_getattr_error_bad_suggestions_do_not_trigger_for_small_names.<locals>.MyClassN)r   r   r   vvvmomrd   idpythor   r    r   MyClassr  /  s    )--C-#--Br    r  r7  r  mpyr  Did you meanz'vvv'mom''id''w''pytho'r  rW  r  )r0   r  r  r  s       r   Atest_getattr_error_bad_suggestions_do_not_trigger_for_small_namesz^SuggestionFormattingTestBase.test_getattr_error_bad_suggestions_do_not_trigger_for_small_names.  s    	. 	. * 	4D4( 4,,Wd;  8  0  &1  0  /  F34 4	44 4s   A?B,,B5	c                      G d d      }t        d      D ]  }t        |d| d         | j                   |       d      }| j                  d|       y )Nc                       e Zd ZdZy)]SuggestionFormattingTestBase.test_getattr_suggestions_do_not_trigger_for_big_dicts.<locals>.ANr  r   r    r   r  r  =  r  r    r  r>  index_r  r^  )r  setattrrW  r  )r0   r  indexr  s       r   5test_getattr_suggestions_do_not_trigger_for_big_dictszRSuggestionFormattingTestBase.test_getattr_suggestions_do_not_trigger_for_big_dicts<  sZ    	 	 4[ 	/EAw'.	/ $$QS'2&)r    c                      G d d      }| j                   |       d      }| j                  d|        G d d      }| j                   |       d      }| j                  d|       y )Nc                       e Zd ZdZd Zy)HSuggestionFormattingTestBase.test_getattr_suggestions_no_args.<locals>.ANc                     t               r  r  r0   attrs     r   r  zTSuggestionFormattingTestBase.test_getattr_suggestions_no_args.<locals>.A.__getattr__J  s    $&&r    r   r   r   r^  r  r   r    r   r  r  H  s    E'r    r  r  r^  c                       e Zd ZdZd Zy)r  Nc                     t         r  r  r  s     r   r  zTSuggestionFormattingTestBase.test_getattr_suggestions_no_args.<locals>.A.__getattr__R  s    $$r    r  r   r    r   r  zHSuggestionFormattingTestBase.test_getattr_suggestions_no_args.<locals>.AP  s    E%r    r  r  s      r    test_getattr_suggestions_no_argsz=SuggestionFormattingTestBase.test_getattr_suggestions_no_argsG  s^    	' 	'
 $$QS'2gv&	% 	%
 $$QS'2gv&r    c                      G d d       G fdd      } G d d      } G d d      }|||fD ]+  }| j                   |       d	      }| j                  d
|       - y )Nc                       e Zd ZdZdZy)]SuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.NonStringifyClassNr  r   r    r   NonStringifyClassr  Y  s    GHr    r  c                       e Zd ZdZ fdZy)MSuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.ANc                 $    t                      r  r  )r0   r  r  s     r   r  zYSuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.A.__getattr___  s    $%6%899r    r  )r  s   r   r  r  ]  s    E:r    r  c                       e Zd ZdZd Zy)MSuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.BNc                     t        dd      )Nr   r_   r  r  s     r   r  zYSuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.B.__getattr__d  s    $Wb11r    r  r   r    r   r  r  b  s    E2r    r  c                       e Zd ZdZd Zy)MSuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.CNc                     t        d      )Nr_   r  r  s     r   r  zYSuggestionFormattingTestBase.test_getattr_suggestions_invalid_args.<locals>.C.__getattr__i  s    $R((r    r  r   r    r   Cr  g  s    E)r    r  r  r^  r  )r0   r  r  r  r  r  r  s         @r   %test_getattr_suggestions_invalid_argszBSuggestionFormattingTestBase.test_getattr_suggestions_invalid_argsX  sd    	 		: 	:
	2 	2
	) 	)
 q!9 	+C((8FMM'6*	+r    c                 j     G d d      }| j                   |       d      }| j                  d|       y )Nc                       e Zd Zd Zy)NSuggestionFormattingTestBase.test_getattr_suggestions_for_same_name.<locals>.Ac                     dgS )Nr^  r   r:   s    r   __dir__zVSuggestionFormattingTestBase.test_getattr_suggestions_for_same_name.<locals>.A.__dir__r  s
    y r    N)r   r   r   r  r   r    r   r  r  q  s    !r    r  r^  r  r  r  s      r   &test_getattr_suggestions_for_same_namezCSuggestionFormattingTestBase.test_getattr_suggestions_for_same_namep  s2    	! 	! $$QS'20r    c                      G d d      }| j                   |       d      }| j                  d|       | j                  d|       y )Nc                       e Zd ZdZd Zy)NSuggestionFormattingTestBase.test_attribute_error_with_failing_dict.<locals>.TrJ   c                     t        d      )Noh no!r  r:   s    r   r  zVSuggestionFormattingTestBase.test_attribute_error_with_failing_dict.<locals>.T.__dir__z  s    $X..r    N)r   r   r   r  r  r   r    r   Tr  x  s    E/r    r  blichr^  r  r  )r0   r  r  s      r   &test_attribute_error_with_failing_dictzCSuggestionFormattingTestBase.test_attribute_error_with_failing_dictw  sB    	/ 	/
 $$QS'2&)6*r    c                 \    d }| j                  |dd       }| j                  d|d          y )Nc                      t        dd      )Nr#  r_   )r  rU  r  r   r    r   #raise_attribute_error_with_bad_namezlSuggestionFormattingTestBase.test_attribute_error_with_bad_name.<locals>.raise_attribute_error_with_bad_name  s     bb11r    r   rV  r6   r   r  r0   r  r  s      r   "test_attribute_error_with_bad_namez?SuggestionFormattingTestBase.test_attribute_error_with_bad_name  s<    	2 ))/R4 * 
 	l2./r    c                      G d d       G fdd      }| j                   |       d      }| j                  d|       | j                  d|       y )Nc                       e Zd ZdZy)RSuggestionFormattingTestBase.test_attribute_error_inside_nested_getattr.<locals>.ArJ   N)r   r   r   r  r   r    r   r  r    s    Er    r  c                       e Zd Z fdZy)RSuggestionFormattingTestBase.test_attribute_error_inside_nested_getattr.<locals>.Bc                 *            }|j                   S r  )r  )r0   r  r  r  s      r   __getattribute__zcSuggestionFormattingTestBase.test_attribute_error_inside_nested_getattr.<locals>.B.__getattribute__  s    Cwwr    N)r   r   r   r  )r  s   r   r  r    s    r    r  r  r  r  r  )r0   r  r  r  s      @r   *test_attribute_error_inside_nested_getattrzGSuggestionFormattingTestBase.test_attribute_error_inside_nested_getattr  sI    	 		 	
 $$QS+6nf-gv&r    c                    t        t        j                               }| j                  t        j
                  |       t        j                  j                  t        |             | j                  t        j                  j                         dj                  t        j                  t        j                  d            }||dz   z  }|j!                  |       |S )Nr   r:  )r  z.py)r   tempfilemkdtemprV  shutilrmtreer   pathr  r   popr   randomchoicesr  ascii_letters
write_text)r0   r   tmpdirmod_namemodules        r   make_modulez(SuggestionFormattingTestBase.make_module  s    h&&()v.F$%776>>&*>*>"EF8e+,$r    c                       j                  |       fd} j                  t                j                  |dd       }|d   S )Nc                      	 t        d d        y # t        $ r} | d d } ~ wt        $ r'} j                  dt	        |               Y d } ~ y d } ~ ww xY w)Nzfrom z import zExpected ImportError but got )r7   r  r   r   rJ  )r   modnamer  r0   s    r   r   zISuggestionFormattingTestBase.get_import_from_suggestion.<locals>.callable  s\    EuWIXdV45 "T! E		9$q'CDDEs    	A!AAAr   rV  r   )r  rV  r   r   )r0   mod_dictr  r   r  r  s   ` `  @r   get_import_from_suggestionz7SuggestionFormattingTestBase.get_import_from_suggestion  sQ    ""8,	E 	())" * 
 Ar    c           	         t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }t        j                  d      }|df|d	f|d
f|df|df|df|df|dffD ])  \  }}	| j                  |d      }
| j                  |	|
       + y )NzP            noise = more_noise = a = bc = None
            blech = None
        zP
            noise = more_noise = a = bc = None
            blch = None
        zS
            noise = more_noise = a = bc = None
            bluchin = None
        z:
            blach = None
            bluc = None
        z<
            blach = None
            bluchi = None
        z;
            blucha = None
            bluc = None
        zS
            Luch = None
            fluch = None
            BLuch = None
        r{  r|  r}  r~  r  r  r  )rr   rs   r  rW   )r0   substitutioneliminationadditionsubstitutionOverEliminationsubstitutionOverAdditioneliminationOverAdditioncaseChangeOverSubstitutionr   r  r  s              r   test_import_from_suggestionsz9SuggestionFormattingTestBase.test_import_from_suggestions  s    ( 
 oo ' 
 ?? $ 
 '/oo 7 '#
 $,?? 4 $ 
 #+// 3 #
 &.__ 6 &" |$:&)$|$(*5%z2$i0'4	!
 	.D* 44T7CFMM*f-	.r    c                 P    d}| j                  |d      }| j                  d|       y )Nzblech = Noner  r^  r  )r0   r   r  s      r   ?test_import_from_suggestions_do_not_trigger_for_long_attributesz\SuggestionFormattingTestBase.test_import_from_suggestions_do_not_trigger_for_long_attributes  s*    $$T+?@&)r    c                 `   d}dD ]  }| j                  |      5  | j                  ||      }| j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d	|       d d d         y # 1 sw Y   xY w)
Nz!vvv = mom = w = id = pytho = Noner  r  r  z'vvv'r  r  r  r  )r  r  r  )r0   r   r  r  s       r   Etest_import_from_error_bad_suggestions_do_not_trigger_for_small_nameszbSuggestionFormattingTestBase.test_import_from_error_bad_suggestions_do_not_trigger_for_small_names  s    2) 	4D4( 488tD  8  &1  &1  0  /  F34 4	44 4s   A?B$$B-	c                     t        d      D cg c]  }d| d
 }}|j                  d       dj                  |      }| j                  |d      }| j	                  d|       y c c}w )N   r  z = z NonerZ  r  r^  )r  r  r   r  r  )r0   r  chunksr   r  s        r   >test_import_from_suggestions_do_not_trigger_for_big_namespacesz[SuggestionFormattingTestBase.test_import_from_suggestions_do_not_trigger_for_big_namespaces  sc    38:>%F5'%>>gxx00w?&)	 ?s   A$c                 \    d }| j                  |dd       }| j                  d|d          y )Nc                      t        ddd      )Nr#  r_   r9  )r  rU  	name_from)r  r   r    r   r  znSuggestionFormattingTestBase.test_import_from_error_with_bad_name.<locals>.raise_attribute_error_with_bad_name  s    22<<r    r   rV  r6   r  r  s      r   $test_import_from_error_with_bad_namezASuggestionFormattingTestBase.test_import_from_error_with_bad_name  s<    	= ))/R4 * 
 	l2./r    c                     d }d }d }d }d }d }|df|df|d	f|d
f|df|dffD ](  \  }}| j                  |      }	| j                  ||	       * y )Nc                  6    d x} x}x}}d }t        t               y r  r  r  )r[  r\  r  r]  r^  s        r   r_  zNSuggestionFormattingTestBase.test_name_error_suggestions.<locals>.Substitution  s"    *..E.J.RE%Lr    c                  6    d x} x}x}}d }t        t               y r  r
  )r[  r\  r  r]  rb  s        r   rc  zMSuggestionFormattingTestBase.test_name_error_suggestions.<locals>.Elimination  s"    *..E.J.RD%Lr    c                  6    d x} x}x}}d }t        t               y r  r
  )r[  r\  r  r]  rf  s        r   rg  zJSuggestionFormattingTestBase.test_name_error_suggestions.<locals>.Addition  s"    *..E.J.RG%Lr    c                  *    d } d }t        t               y r  r
  )rj  rk  s     r   rl  z]SuggestionFormattingTestBase.test_name_error_suggestions.<locals>.SubstitutionOverElimination  s    ED%Lr    c                  *    d } d }t        t               y r  r
  )rj  ro  s     r   rp  zZSuggestionFormattingTestBase.test_name_error_suggestions.<locals>.SubstitutionOverAddition   s    EF%Lr    c                  *    d } d }t        t               y r  r
  )rs  rk  s     r   rt  zYSuggestionFormattingTestBase.test_name_error_suggestions.<locals>.EliminationOverAddition%  s    FD%Lr    r|  r}  r{  z	'blucha'?r~  r  )
r0   r_  rc  rg  rl  rp  rt  r1   r  r  s
             r   test_name_error_suggestionsz8SuggestionFormattingTestBase.test_name_error_suggestions  s    	
	
	
	
	
	
 #/
!;!,i 8!)< 8!8+ F!<j I!9: F!H 	.D* ((.FMM*f-	.r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  "    t        t               y r  )r  global_for_suggestior   r    r   r1   zSSuggestionFormattingTestBase.test_name_error_suggestions_from_globals.<locals>.func4  s    &'r    z'global_for_suggestions'?r  r0   r1   r  s      r   (test_name_error_suggestions_from_globalszESuggestionFormattingTestBase.test_name_error_suggestions_from_globals3  s&    	($$T*16:r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  "    t        t               y r  )r  ZeroDivisionErrrrrr   r    r   r1   zTSuggestionFormattingTestBase.test_name_error_suggestions_from_builtins.<locals>.func:  s    $%r    'ZeroDivisionError'?r  r  s      r   )test_name_error_suggestions_from_builtinszFSuggestionFormattingTestBase.test_name_error_suggestions_from_builtins9  s&    	&$$T*,f5r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  p    t               j                         } t        | d<   t        t	        d|              y )N__builtins__r  )rf  copyr   r  eval)custom_globalss    r   r1   zlSuggestionFormattingTestBase.test_name_error_suggestions_from_builtins_when_builtins_is_module.<locals>.func@  s*    $Y^^-N-5N>*$+^<=r    r  r  r  s      r   Atest_name_error_suggestions_from_builtins_when_builtins_is_modulez^SuggestionFormattingTestBase.test_name_error_suggestions_from_builtins_when_builtins_is_module?  s(    	> $$T*,f5r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  &    d } t        t               y r  )r  somethingverywronghe)somethingverywronghehehehehehes    r   r1   zdSuggestionFormattingTestBase.test_name_error_suggestions_do_not_trigger_for_long_names.<locals>.funcH  s    -1*&'r    somethingverywrongheher  r  s      r   9test_name_error_suggestions_do_not_trigger_for_long_nameszVSuggestionFormattingTestBase.test_name_error_suggestions_do_not_trigger_for_long_namesG  s*    	( $$T*16:r    c                    d }d }d }d }d|fd|fd|fd|ffD ]  \  }}| j                  |	      5  | j                  |      }| j                  d
|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       | j                  d|       d d d         y # 1 sw Y   xY w)Nc                  $    d x} x}x}x}}t          y r  )r7  r  r  rd   r  r  s        r   f_bzhSuggestionFormattingTestBase.test_name_error_bad_suggestions_do_not_trigger_for_small_names.<locals>.f_bP      )--C-#--Br    c                  $    d x} x}x}x}}t          y r  r-  r*  s        r   f_vzhSuggestionFormattingTestBase.test_name_error_bad_suggestions_do_not_trigger_for_small_names.<locals>.f_vT  r,  r    c                  $    d x} x}x}x}}t          y r  )r  r*  s        r   f_mzhSuggestionFormattingTestBase.test_name_error_bad_suggestions_do_not_trigger_for_small_names.<locals>.f_mX  r,  r    c                  $    d x} x}x}x}}t          y r  )r  r*  s        r   f_pyziSuggestionFormattingTestBase.test_name_error_bad_suggestions_do_not_trigger_for_small_names.<locals>.f_py\  s    )--C-#--Br    r7  r  r  r  r  zyou meanr  r  r  r  r  r  )r0   r+  r.  r0  r2  r  r1   r  s           r   >test_name_error_bad_suggestions_do_not_trigger_for_small_namesz[SuggestionFormattingTestBase.test_name_error_bad_suggestions_do_not_trigger_for_small_namesN  s    				  :SzC:d|L 	4JD$4( 4,,T2  V4  /  /  0  /  F34 4	44 4s   A>B<<C	c                 P    d }| j                  |      }| j                  |d       y )Nc                     d x} x}x}x}x}x}x}x}x}x}	x}
x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x} x}!x}"x}#x}$x}%x}&x}'x}(x})x}*x}+x},x}-x}.x}/x}0x}1x}2x}3x}4x}5x}6x}7x}8x}9x}:x};x}<x}=x}>x}?x}@x}Ax}Bx}Cx}Dx}Ex}Fx}Gx}Hx}Ix}Jx}Kx}Lx}Mx}Nx}Ox}Px}Qx}Rx}Sx}Tx}Ux}Vx}Wx}Xx}Yx}Zx}[x}\x}]x}^x}_x}`x}ax}bx}cx}dx}ex}fx}gx}hx}ix}jx}kx}lx}mx}nx}ox}px}qx}rx}sx}tx}ux}vx}wx}xx}yx}zx}{x}|x}}x}~x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x} x}x}x}x}x}x}x}x}x}	x}
x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x} x}!x}"x}#x}$x}%x}&x}'x}(x})x}*x}+x},x}-x}.x}/x}0x}1x}2x}3x}4x}5x}6x}7x}8x}9x}:x};x}<x}=x}>x}?x}@x}Ax}Bx}Cx}Dx}Ex}Fx}Gx}Hx}Ix}Jx}Kx}Lx}Mx}Nx}Ox}Px}Qx}Rx}Sx}Tx}Ux}Vx}Wx}Xx}Yx}Zx}[x}\x}]x}^x}_x}`x}ax}bx}cx}dx}ex}fx}gx}hx}ix}jx}kx}lx}mx}nx}ox}px}qx}rx}sx}tx}ux}vx}wx}xx}yx}zx}{x}|x}}x}~x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x} x}x}x}x}x}x}x}x}x}	x}
x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x} x}!x}"x}#x}$x}%x}&x}'x}(x})x}*x}+x},x}-x}.x}/x}0x}1x}2x}3x}4x}5x}6x}7x}8x}9x}:x};x}<x}=x}>x}?x}@x}Ax}Bx}Cx}Dx}Ex}Fx}Gx}Hx}Ix}Jx}Kx}Lx}Mx}Nx}Ox}Px}Qx}Rx}Sx}Tx}Ux}Vx}Wx}Xx}Yx}Zx}[x}\x}]x}^x}_x}`x}ax}bx}cx}dx}ex}fx}gx}hx}ix}jx}kx}lx}mx}nx}ox}px}qx}rx}sx}tx}ux}vx}wx}xx}yx}zx}{x}|x}}x}~x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x} x}x}x}x}x}x}x}x}x}	x}
x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}x}}t        t               y r  )r  a0(   a1a2a3a4a5a6a7a8a9a10a11a12a13a14a15a16a17a18a19a20a21a22a23a24a25a26a27a28a29a30a31a32a33a34a35a36a37a38a39a40a41a42a43a44a45a46a47a48a49a50a51a52a53a54a55a56a57a58a59a60a61a62a63a64a65a66a67a68a69a70a71a72a73a74a75a76a77a78a79a80a81a82a83a84a85a86a87a88a89a90a91a92a93a94a95a96a97a98a99a100a101a102a103a104a105a106a107a108a109a110a111a112a113a114a115a116a117a118a119a120a121a122a123a124a125a126a127a128a129a130a131a132a133a134a135a136a137a138a139a140a141a142a143a144a145a146a147a148a149a150a151a152a153a154a155a156a157a158a159a160a161a162a163a164a165a166a167a168a169a170a171a172a173a174a175a176a177a178a179a180a181a182a183a184a185a186a187a188a189a190a191a192a193a194a195a196a197a198a199a200a201a202a203a204a205a206a207a208a209a210a211a212a213a214a215a216a217a218a219a220a221a222a223a224a225a226a227a228a229a230a231a232a233a234a235a236a237a238a239a240a241a242a243a244a245a246a247a248a249a250a251a252a253a254a255a256a257a258a259a260a261a262a263a264a265a266a267a268a269a270a271a272a273a274a275a276a277a278a279a280a281a282a283a284a285a286a287a288a289a290a291a292a293a294a295a296a297a298a299a300a301a302a303a304a305a306a307a308a309a310a311a312a313a314a315a316a317a318a319a320a321a322a323a324a325a326a327a328a329a330a331a332a333a334a335a336a337a338a339a340a341a342a343a344a345a346a347a348a349a350a351a352a353a354a355a356a357a358a359a360a361a362a363a364a365a366a367a368a369a370a371a372a373a374a375a376a377a378a379a380a381a382a383a384a385a386a387a388a389a390a391a392a393a394a395a396a397a398a399a400a401a402a403a404a405a406a407a408a409a410a411a412a413a414a415a416a417a418a419a420a421a422a423a424a425a426a427a428a429a430a431a432a433a434a435a436a437a438a439a440a441a442a443a444a445a446a447a448a449a450a451a452a453a454a455a456a457a458a459a460a461a462a463a464a465a466a467a468a469a470a471a472a473a474a475a476a477a478a479a480a481a482a483a484a485a486a487a488a489a490a491a492a493a494a495a496a497a498a499a500a501a502a503a504a505a506a507a508a509a510a511a512a513a514a515a516a517a518a519a520a521a522a523a524a525a526a527a528a529a530a531a532a533a534a535a536a537a538a539a540a541a542a543a544a545a546a547a548a549a550a551a552a553a554a555a556a557a558a559a560a561a562a563a564a565a566a567a568a569a570a571a572a573a574a575a576a577a578a579a580a581a582a583a584a585a586a587a588a589a590a591a592a593a594a595a596a597a598a599a600a601a602a603a604a605a606a607a608a609a610a611a612a613a614a615a616a617a618a619a620a621a622a623a624a625a626a627a628a629a630a631a632a633a634a635a636a637a638a639a640a641a642a643a644a645a646a647a648a649a650a651a652a653a654a655a656a657a658a659a660a661a662a663a664a665a666a667a668a669a670a671a672a673a674a675a676a677a678a679a680a681a682a683a684a685a686a687a688a689a690a691a692a693a694a695a696a697a698a699a700a701a702a703a704a705a706a707a708a709a710a711a712a713a714a715a716a717a718a719a720a721a722a723a724a725a726a727a728a729a730a731a732a733a734a735a736a737a738a739a740a741a742a743a744a745a746a747a748a749a750a751a752a753a754a755a756a757a758a759a760a761a762a763a764a765a766a767a768a769a770a771a772a773a774a775a776a777a778a779a780a781a782a783a784a785a786a787a788a789a790a791a792a793a794a795a796a797a798a799a800s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r   r1   ziSuggestionFormattingTestBase.test_name_error_suggestions_do_not_trigger_for_too_many_locals.<locals>.funck  sO'   d aPB P Pb P2 P PR P" Pr PB P PPPP!P$'P*-P03P69P<?PBEPPPP!P$'P*-P03P69P<?PBEP P P P "P %(P +.P 14P 7:P =@P CFP 	P 	P 	P "	P %(	P +.	P 14	P 7:	P =@	P CF	P
 P
 P
 P
 "P
 %(P
 +.P
 14P
 7:P
 =@P
 CFP P P P "P %(P +.P 14P 7:P =@P CFP P P P "P %(P +.P 14P 7:P =@P CFP P P P "P %(P +.P 14P 7:P =@P CFP P P P "P %(P +.P 14P 7:P =@P CGP P P P "&P )-P 04P 7;P >BP EIP LPP P P P "&P )-P 04P 7;P >BP EIP LPP P P P "&P )-P 04P 7;P >BP EIP LPP P P P "&P )-P 04P 7;P >BP EIP LPP P P P "&P )-P 04P 7;P >BP EIP LPP P P P "&P )-P 04P 7;P >BP EIP LPP  !P  !P  !P  "&!P  )-!P  04!P  7;!P  >B!P  EI!P  LP!P" #P" #P" #P" "&#P" )-#P" 04#P" 7;#P" >B#P" EI#P" LP#P$ %P$ %P$ %P$ "&%P$ )-%P$ 04%P$ 7;%P$ >B%P$ EI%P$ LP%P& 'P& 'P& 'P& "&'P& )-'P& 04'P& 7;'P& >B'P& EI'P& LP'P( )P( )P( )P( "&)P( )-)P( 04)P( 7;)P( >B)P( EI)P( LP)P* +P* +P* +P* "&+P* )-+P* 04+P* 7;+P* >B+P* EI+P* LP+P, -P, -P, -P, "&-P, )--P, 04-P, 7;-P, >B-P, EI-P, LP-P. /P. /P. /P. "&/P. )-/P. 04/P. 7;/P. >B/P. EI/P. LP/P0 1P0 1P0 1P0 "&1P0 )-1P0 041P0 7;1P0 >B1P0 EI1P0 LP1P2 3P2 3P2 3P2 "&3P2 )-3P2 043P2 7;3P2 >B3P2 EI3P2 LP3P4 5P4 5P4 5P4 "&5P4 )-5P4 045P4 7;5P4 >B5P4 EI5P4 LP5P6 7P6 7P6 7P6 "&7P6 )-7P6 047P6 7;7P6 >B7P6 EI7P6 LP7P8 9P8 9P8 9P8 "&9P8 )-9P8 049P8 7;9P8 >B9P8 EI9P8 LP9P: ;P: ;P: ;P: "&;P: )-;P: 04;P: 7;;P: >B;P: EI;P: LP;P< =P< =P< =P< "&=P< )-=P< 04=P< 7;=P< >B=P< EI=P< LP=P> ?P> ?P> ?P> "&?P> )-?P> 04?P> 7;?P> >B?P> EI?P> LP?P@ AP@ AP@ AP@ "&AP@ )-AP@ 04AP@ 7;AP@ >BAP@ EIAP@ LPAPB CPB CPB CPB "&CPB )-CPB 04CPB 7;CPB >BCPB EICPB LPCPD EPD EPD EPD "&EPD )-EPD 04EPD 7;EPD >BEPD EIEPD LPEPF GPF GPF GPF "&GPF )-GPF 04GPF 7;GPF >BGPF EIGPF LPGPH IPH IPH IPH "&IPH )-IPH 04IPH 7;IPH >BIPH EIIPH LPIPJ KPJ KPJ KPJ "&KPJ )-KPJ 04KPJ 7;KPJ >BKPJ EIKPJ LPKPL MPL MPL MPL "&MPL )-MPL 04MPL 7;MPL >BMPL EIMPL LPMPN OPN OPN OPN "&OPN )-OPN 04OPN 7;OPN >BOPN EIOPN LPOPP QPP QPP QPP "&QPP )-QPP 04QPP 7;QPP >BQPP EIQPP LPQPR SPR SPR SPR "&SPR )-SPR 04SPR 7;SPR >BSPR EISPR LPSPT UPT UPT UPT "&UPT )-UPT 04UPT 7;UPT >BUPT EIUPT LPUPV WPV WPV WPV "&WPV )-WPV 04WPV 7;WPV >BWPV EIWPV LPWPX YPX YPX YPX "&YPX )-YPX 04YPX 7;YPX >BYPX EIYPX LPYPZ [PZ [PZ [PZ "&[PZ )-[PZ 04[PZ 7;[PZ >B[PZ EI[PZ LP[P\ ]P\ ]P\ ]P\ "&]P\ )-]P\ 04]P\ 7;]P\ >B]P\ EI]P\ LP]P^ _P^ _P^ _P^ "&_P^ )-_P^ 04_P^ 7;_P^ >B_P^ EI_P^ LP_P` aP` aP` aP` "&aP` )-aP` 04aP` 7;aP` >BaP` EIaP` LPaPb cPb cPb cPb "&cPb )-cPb 04cPb 7;cPb >BcPb EIcPb LPcPd ePd ePd ePd "&ePd )-ePd 04ePd 7;ePd >BePd EIePd LPePf gPf gPf gPf "&gPf )-gPf 04gPf 7;gPf >BgPf EIgPf LPgPh iPh iPh iPh "&iPh )-iPh 04iPh 7;iPh >BiPh EIiPh LPiPj kPj kPj kPj "&kPj )-kPj 04kPj 7;kPj >BkPj EIkPj LPkPl mPl mPl mPl "&mPl )-mPl 04mPl 7;mPl >BmPl EImPl LPmPn oPn oPn oPn "&oPn )-oPn 04oPn 7;oPn >BoPn EIoPn LPoPp qPp qPp qPp "&qPp )-qPp 04qPp 7;qPp >BqPp EIqPp LPqPr sPr sPr sPr "&sPr )-sPr 04sPr 7;sPr >BsPr EIsPr LPsPt uPt uPt uPt "&uPt )-uPt 04uPt 7;uPt >BuPt EIuPt LPuPv wPv wPv wPv "&wPv )-wPv 04wPv 7;wPv >BwPv EIwPv LPwPx yPx yPx yPx "&yPx )-yPx 04yPx 7;yPx >ByPx EIyPx LPyPz {Pz {Pz {Pz "&{Pz )-{Pz 04{Pz 7;{Pz >B{Pz EI{Pz LP{P| }P| }P| }P| "&}P| )-}P| 04}P| 7;}P| >B}P| EI}P| LP}P~ P~ P~ P~ "&P~ )-P~ 04P~ 7;P~ >BP~ EIP~ LPP@ AP@ AP@ AP@ "&AP@ )-AP@ 04AP@ 7;AP@ >BAP@ EIAP@ LPAPB CPB CPB CPB "&CPB )-CPB 04CPB 7;CPB >BCPB EICPB LPCPD EPD EPD EPD "&EPD )-EPD 04EPD 7;EPD >BEPD EIEPD LPEPF GPF GPF GPF "&GPF )-GPF 04GPF 7;GPF >BGPF EIGPF LPGPH IPH IPH IPH "&IPH )-IPH 04IPH 7;IPH >BIPH EIIPH LPIPJ KPJ KPJ KPJ "&KPJ )-KPJ 04KPJ 7;KPJ >BKPJ EIKPJ LPKPL MPL MPL MPL "&MPL )-MPL 04MPL 7;MPL >BMPL EIMPL LPMPN OPN OPN OPN "&OPN )-OPN 04OPN 7;OPN >BOPN EIOPN LPOPP QPP QPP QPP "&QPP )-QPP 04QPP 7;QPP >BQPP EIQPP LPQPR SPR SPR SPR "&SPR )-SPR 04SPR 7;SPR >BSPR EISPR LPSPT UPT UPT UPT "&UPT )-UPT 04UPT 7;UPT >BUPT EIUPT LPUPV WPV WPV WPV "&WPV )-WPV 04WPV 7;WPV >BWPV EIWPV LPWPX YPX YPX YPX "&YPX )-YPX 04YPX 7;YPX >BYPX EIYPX LPYPZ [PZ [PZ [PZ "&[PZ )-[PZ 04[PZ 7;[PZ >B[PZ EI[PZ LP[P\ ]P\ ]P\ ]P\ "&]P\ )-]P\ 04]P\ 7;]P\ >B]P\ EI]P\ LP]P^ _P^ _P^ _P^ "&_P^ )-_P^ 04_P^ 7;_P^ >B_P^ EI4"Ir    zNameError.*a1)rW  assertNotRegexr  s      r   >test_name_error_suggestions_do_not_trigger_for_too_many_localsz[SuggestionFormattingTestBase.test_name_error_suggestions_do_not_trigger_for_too_many_localsj  s,    S	j $$T*F$45r    c                     d }| j                  |      }| j                  d|       d }| j                  |      }| j                  d|       y )Nc                      d } t               r  r|  r^  s    r   r1   zQSuggestionFormattingTestBase.test_name_error_with_custom_exceptions.<locals>.func  s    E+r    r^  c                      d } t         r  r[  r\  s    r   r1   zQSuggestionFormattingTestBase.test_name_error_with_custom_exceptions.<locals>.func  s    EOr    r  r  s      r   &test_name_error_with_custom_exceptionszCSuggestionFormattingTestBase.test_name_error_with_custom_exceptions  sP    	 $$T*&)	 $$T*&)r    c                      G d d      } |       }| j                  |j                        }| j                  d|       y )Nc                       e Zd Zd Zd Zy)ESuggestionFormattingTestBase.test_name_error_with_instance.<locals>.Ac                     d | _         y r  r\  r:   s    r   __init__zNSuggestionFormattingTestBase.test_name_error_with_instance.<locals>.A.__init__  	    !
r    c                     d}t         }y rM  r\  )r0   r  r<  s      r   r   zISuggestionFormattingTestBase.test_name_error_with_instance.<locals>.A.foo  s    r    Nr   r   r   rc  r   r   r    r   r  ra    s    "r    r  
self.blech)rW  r   rW   r0   r  instancer  s       r   test_name_error_with_instancez:SuggestionFormattingTestBase.test_name_error_with_instance  s7    	 	 3$$X\\2lF+r    c                      G d d      } |       }| j                  |j                        }| j                  d|       y )Nc                       e Zd Zd Zd Zy)NSuggestionFormattingTestBase.test_unbound_local_error_with_instance.<locals>.Ac                     d | _         y r  r\  r:   s    r   rc  zWSuggestionFormattingTestBase.test_unbound_local_error_with_instance.<locals>.A.__init__  rd  r    c                     d}}d}y rM  r   )r0   r  r^  r<  s       r   r   zRSuggestionFormattingTestBase.test_unbound_local_error_with_instance.<locals>.A.foo  s    r    Nrf  r   r    r   r  rm    s    "r    r  rg  )rW  r   r  rh  s       r   &test_unbound_local_error_with_instancezCSuggestionFormattingTestBase.test_unbound_local_error_with_instance  s9    	 	 3$$X\\2v.r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  "    d} t               d}y )Nra   r  )r  	somethongs     r   r1   zRSuggestionFormattingTestBase.test_unbound_local_error_does_not_match.<locals>.func  s    I)Ir    r  r  r  s      r   'test_unbound_local_error_does_not_matchzDSuggestionFormattingTestBase.test_unbound_local_error_does_not_match  s)    	
 $$T*f-r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  ,    t         j                         } y r  )ior   streams    r   r1   zMSuggestionFormattingTestBase.test_name_error_for_stdlib_modules.<locals>.func  s    [[]Fr    zforget to import 'io'r  r  s      r   "test_name_error_for_stdlib_modulesz?SuggestionFormattingTestBase.test_name_error_for_stdlib_modules  s(    	# $$T*-v6r    c                 P    d }| j                  |      }| j                  d|       y )Nc                  ,    t         j                         } y r  )_ior   rx  s    r   r1   zUSuggestionFormattingTestBase.test_name_error_for_private_stdlib_modules.<locals>.func  s    \\^Fr    zforget to import '_io'r  r  s      r   *test_name_error_for_private_stdlib_moduleszGSuggestionFormattingTestBase.test_name_error_for_private_stdlib_modules  s(    	$ $$T*.7r    r  )"r   r   r   rW  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r'  r3  rX  r^  rj  rp  rt  rz  r~  r   r    r   rP  rP    s    
).V*4	*'"+01+0'"0.d*4*0&.P;66;48W6r*
,/.78r    rP  c                       e Zd ZdZy)#PurePythonSuggestionFormattingTestsr  Nr  r   r    r   r  r    s    
r    r  c                       e Zd ZdZy) CPythonSuggestionFormattingTestsr  Nr  r   r    r   r  r    s    r    r  c                   H    e Zd Zd Zd Z ej                  d      d        Zy)MiscTestc                    t               }dh}t        t              D ]J  }|j                  d      s||v rt	        t        |      }t	        |dd       dk(  s:|j                  |       L | j                  t        j                  |       y )N
print_listr   r   r.   )setdirr.   r  rS  r  assertCountEqual__all__)r0   r   denylistr  module_objects        r   test_allzMiscTest.test_all  sz    5 >	N 	#Ds#tx'7#It4M}lD9[HT"	# 	i//:r    c                      fd} |ddd        |ddd        |ddd        |dd	d        |d
dd        |ddd        |ddd        |ddd        |ddd        |ddd        |ddd        |ddd        |ddd        |dd d        |d!d"d#        |d$d%d&        |d$d'd(        |d)d*d        |d)d+d&        |d,d-d       y ).Nc                 X    t        j                  | |d      }j                  ||       y )Ni  )r.   _levenshtein_distancerS   )r  r7  r   r  r0   s       r   CHECKz1MiscTest.test_levenshtein_distance.<locals>.CHECK+  s'    44Q4@FVX.r    r   r   r  rL   r  rJ   AppleApleBananazB@n@n@r   CherryzCherry!z---0---z------abcrP   aabbrI   aaaaaAAAAAr   wxyzwXyZwXyZ123r  PythonJavar#  zC#AbstractFoobarManagerabstract_foobar_managerr  CPythonPyPyr&  pypyr9  r  AttributeErropAttributeErrorTestsABAAABr   )r0   r  s   ` r   test_levenshtein_distancez"MiscTest.test_levenshtein_distance'  s    	/ 	b"ab#qc3gvq!h!$h	1%i1%eS!dD!gw"ffa fi#h#fdA%'@%Hi$i$ 0!4 5r:eUAr    cpuc           	      B   t         j                         s| j                  t          d       t         j                  d      5 }t	        j
                  |      }d d d        D ]  \  }}}t        j                  ||d      }| j                  ||||f       ||dz   |dz   fD ]0  }t        j                  |||      }| j                  |||||f       2 t        |      D ]0  }t        j                  |||      }	| j                  |	||||f       2  y # 1 sw Y   xY w)Nz. is missing. Run `make regen-test-levenshtein`rr  )rP  rJ   rL   )LEVENSHTEIN_DATA_FILEis_filer   rj   jsonloadr.   r  rS   r  rE  )
r0   rm   examplesr  r7  r   res1	thresholdres2res3s
             r   'test_levenshtein_distance_short_circuitz0MiscTest.test_levenshtein_distance_short_circuitD  s;   $,,.II() *5 6
 #'', 	$yy|H	$& 	KNAq(221a>DT8!Q8&1hlC H	 66q!YG  xaI5F GH
 #8_ K	 !66q!YG""4Ay8I"J	K	K	$ 	$s   DDN)r   r   r   r  r  r   requires_resourcer  r   r    r   r  r    s/    	;: Wu%K &Kr    r  )Qr  collectionsr   rw  r   rc  r   r  r   r   unittestr  r  r  r  rR  r   r  test.supportr   r   r   r	   r
   r   r   test.support.os_helperr   r   test.support.script_helperr   r   test.support.import_helperr   r  rr   r.   	functoolsr   pathlibr   r   r  r  co_positionsr  r  r  parentr  TestCaser+   r   r   r   r   r  r  r  r  ro  r:  r9   escaperm  rT  r  r  r   rQ  r_  r}  r  r  r&  global_for_suggestionsrP  r  r  r  mainr   r    r   <module>r     s=   % "   
     	     / / / 2 N -     "*j"88*Abvy9:	7	 !DE

TK
L X--0KK U*X&& U*p
> >> >)E  I	+ I	+ I	+Z &'   '   &'  p*8,, p*h& 
&  RZZ=)9299_+EFH
z+ z+z5x7H7H  4h6G6G u,"" u,p&,** &,R&$!! &$RH
!! H
T+ +rX.. rj	u)X->-> u)p  Q8 Q8j&     AKx   AKH zHMMO r    