+
    lh,                         R t Rt^ RIt^ RIt^ RIt. ROt^ s^ sR tR t	 ! R R]
4      tR t ! R R	4      tR
 tR tR t]R8X  d
   ]	! 4        R# R# )a  The Tab Nanny despises ambiguous indentation.  She knows no mercy.

tabnanny -- Detection of ambiguous indentation

For the time being this module is intended to be called as a script.
However it is possible to import it into an IDE and use the function
check() described below.

Warning: The API provided by this module is likely to change in future
releases; such changes may not be backward compatible.
6NNannyNagc                      R pV  F4  p\         P                  P                  V\        V4      ,           4       RpK6  	  \         P                  P                  R4       \         P                  ! ^4       R# )  
N)sysstderrwritestrexit)argssepargs   *  lib/python3.14/tabnanny.pyerrprintr      sO    
C

s3x(  JJTHHQK    c                     ^ RI p  V P                  \        P                  R,          R4      w  rX F/  w  rEVR8X  d   \
        ^,           sVR8X  g   K"  \        ^,           sK1  	  X'       g#   \	        R\        P                  ^ ,          R4       V F  p\        V4       K  	  R#   T P                   d   p\	        T4        Rp?LRp?ii ; i)    N:   NNqvz-qz-vzUsage:z[-v] file_or_directory ...)getoptr   argverrorr   filename_onlyverbosecheck)r   optsr   msgoar   s          r   mainr!   &   s    ]]388B<6
 9)A-M9kG	 
 388A;(DEc
  << s   )B$ $C
5CC
c                   <   a  ] tR t^8t o RtR tR tR tR tRt	V t
R# )r   z_
Raised by process_tokens() if detecting an ambiguous indent.
Captured and handled in check().
c                0    WVuV n         V n        V n        R # N)linenor   line)selfr%   r   r&   s   &&&&r   __init__NannyNag.__init__=   s    +1(TXtyr   c                    V P                   # r$   )r%   r'   s   &r   
get_linenoNannyNag.get_lineno?   s    {{r   c                    V P                   # r$   )r   r+   s   &r   get_msgNannyNag.get_msgA   s    xxr   c                    V P                   # r$   )r&   r+   s   &r   get_lineNannyNag.get_lineC   s    yyr   )r&   r%   r   N)__name__
__module____qualname____firstlineno____doc__r(   r,   r/   r2   __static_attributes____classdictcell____classdict__s   @r   r   r   8   s#     = r   c                   \         P                  P                  V 4      '       d   \         P                  P                  V 4      '       g   \        '       d   \        V : R24       \         P                  ! V 4      pV F  p\         P                  P                  W4      p\         P                  P                  V4      '       d&   \         P                  P                  V4      '       d*   \         P                  P                  VRR 4      R8X  g   K  \        V4       K  	  R#  \        P                  ! V 4      p\        ^8  d   \        RT ,          4        \        \        P                  ! TP                   4      4        TP%                  4        \        '       d   \        T : R24       R# R#   \         d   p\        T : RT: 24        Rp?R# Rp?ii ; i  \        P"                   d.   p\        T : RT: 24        Rp?TP%                  4        R# Rp?i\&         d.   p\        T : RT: 24        Rp?TP%                  4        R# Rp?i\(         d.   p\        T : RT: 24        Rp?TP%                  4        R# Rp?i\*         d   pTP-                  4       pTP/                  4       p\        '       d=   \        R	Y3,          4       \        R
T: 24       \        TP1                  4       4       MDRT 9   d   RT ,           R,           p \2        '       d   \        T 4       M\        Y\5        T4      4        Rp?TP%                  4        R# Rp?ii ; i  TP%                  4        i ; i)af  check(file_or_dir)

If file_or_dir is a directory and not a symbolic link, then recursively
descend the directory tree named by file_or_dir, checking all .py files
along the way. If file_or_dir is an ordinary Python source file, it is
checked for whitespace related problems. The diagnostic messages are
written to standard output using the print statement.
z: listing directoryNz.pyz: I/O Error: zchecking %r ...z: Token Error: z: Indentation Error: z: Syntax Error: z)%r: *** Line %d: trouble in tab city! ***zoffending line: r   "z: Clean bill of health.)ospathisdirislinkr   printlistdirjoinnormcaser   tokenizeopenOSErrorr   process_tokensgenerate_tokensreadline
TokenErrorcloseIndentationErrorSyntaxErrorr   r,   r2   r/   r   repr)	filenamesnamefullnamefr   nagbadliner&   s	   &        r   r   r   F   sP    
ww}}T277>>$#7#77T34

4 Dww||D/Hh''GGNN8,,  bc+u4h  	MM$
 {$&'x//

;<8 	
	wT34 M  c23  $450 	
	-  c:;( 	
	%  456  	
	  .."||~7=OP$01#++- d{3:#3D}eDktDz2 	
	 	
	s   %F2 )G 2G=GGM2HM M'M(I:M MMJ0M MMB
M!M M MM M0c                   T   a  ] tR t^t o Rw  ttR tR tR tR t	R t
R tR tR	tV tR
# )
Whitespacez 	c                   Wn         \        P                  \        P                  r2. p^ ;p;rgV P                    F  pW8X  d   V^,           pV^,           pK  W8X  d`   V^,           pV^,           pV\	        V4      8  d)   V^ .V\	        V4      ,
          ^,           ,          ,           pWE,          ^,           WE&   ^ pK   M	  W`n        Wpn        \        V4      V3V n        \	        V4      ^8*  V n	        R# r   N)
rawr[   STlennnttuplenorm	is_simple)	r'   wsr_   r`   countbrb   rc   chs	   &&       r   r(   Whitespace.__init__   s    ||Z\\1A((BwEEE!VE
?!QC1s5z>A+=$>>E 8a<  %L!O	Uqr   c                V    V P                   w  r\        \        V4      ^,
          V4      # r   )re   maxra   )r'   rh   trailings   &  r   longest_run_of_spaces Whitespace.longest_run_of_spaces   s"    ))3u:a<**r   c                    V P                   w  r#^ p\        V\        V4      4       F  pWEV,          W%,          ,          ,           pK!  	  W1W@P                  ,           ,          ,           # )r   )re   rangera   rc   )r'   tabsizerh   ro   ilis   &&    r   indent_levelWhitespace.indent_level   sP     ))wE
+Aj58++B ,R''\222r   c                4    V P                   VP                   8H  # r$   )re   )r'   others   &&r   equalWhitespace.equal   s    yyEJJ&&r   c                N   \        V P                  4       VP                  4       4      ^,           p. p\        ^V^,           4       F\  pV P                  V4      VP                  V4      8w  g   K*  VP	                  VV P                  V4      VP                  V4      34       K^  	  V# rm   rn   rp   rs   rw   appendr'   rz   rb   r    tss   &&   r   not_equal_witnessWhitespace.not_equal_witness       **,++-/1231Q3-B  $(:(:2(>>2,,R0 --b13 5  
 r   c                   V P                   VP                   8  d   R # V P                  '       d,   VP                  '       d   V P                  VP                  8*  # \        V P	                  4       VP	                  4       4      ^,           p\        ^V^,           4       F+  pV P                  V4      VP                  V4      8  g   K*   R # 	  R# )FT)rb   rf   rc   rn   rp   rs   rw   )r'   rz   rb   r   s   &&  r   lessWhitespace.less   s    66UWW>>>eooo77ehh&&**,++-/123 1Q3-B  $(:(:2(>>   r   c                N   \        V P                  4       VP                  4       4      ^,           p. p\        ^V^,           4       F\  pV P                  V4      VP                  V4      8  g   K*  VP	                  VV P                  V4      VP                  V4      34       K^  	  V# rm   r~   r   s   &&   r   not_less_witnessWhitespace.not_less_witness  r   r   )rf   rb   re   rc   r^   N)r4   r5   r6   r7   r_   r`   r(   rp   rw   r{   r   r   r   r9   r:   r;   s   @r   r[   r[      s6     DAq*)2+3.'	0"	 	r   r[   c                     R  V  4       pRp\        V 4      ^8  d
   VR,           pVR,           RP                  V4      ,           # )c              3   F   "   T F  p\        V^ ,          4      x  K  	  R# 5ir]   )r   ).0tups   & r   	<genexpr>#format_witnesses.<locals>.<genexpr>  s     'Qcc#a&kkQs   !zat tab sizesr   z, )ra   rF   )wfirstsprefixs   &  r   format_witnessesr     s=    'Q'FF
1vz#C<$))F+++r   c                      \        V 4       R #   \         d1   p\        TP                  TP                  TP
                  4      hR p?ii ; ir$   )_process_tokensTabErrorr   r%   r   text)tokenses   & r   rK   rK     s:    0 0qxx//0s    A
+AA
c                    \         P                  p\         P                  p\         P                  p\         P                  \         P
                  3p\        R 4      .p^ pV  EF  w  rxrpWs8X  d   ^pK  Wq8X  d|   ^ p\        V4      pVR,          P                  V4      '       g>   VR,          P                  V4      pR\        V4      ,           p\        V	^ ,          W4      hVP                  V4       K  Wr8X  d   ^pVR K  V'       g   K  Wt9  g   K  ^ p\        V4      pVR,          P                  V4      '       d   K  VR,          P                  V4      pR\        V4      ,           p\        V	^ ,          W4      h	  R# )r   zindent not greater e.g. zindent not equal e.g. N)rH   INDENTDEDENTNEWLINECOMMENTNLr[   r   r   r   r   r   r{   r   )r   r   r   r   JUNKindentscheck_equaltypetokenstartendr&   thisguywitnessr   s   &              r   r   r     sD   __F__FGX[[(D"~GK+1'e$? K^K 'G2;##G,,!"+66w?03CG3LLuQx33NN7#^ K[T- K &G2;$$W--!"+77@.1A'1JJuQx33Y ,2r   __main__)r   r   rK   )r8   __version__r@   r   rH   __all__r   r   r   r!   	Exceptionr   r   r[   r   rK   r   r4    r   r   <module>r      sv   
$  	 
 
1
$y ?5BD DL,044n zF r   