+
    öÙ†jó,  ã                   ó¤   € 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   *  Ú/usr/lib/python3.14/tabnanny.pyÚerrprintr      sO   € Ø
€CÛˆÜ�
‰
×Ñ˜œs 3›x�Ô(ØŠñ ô ‡J�J×Ñ�TÔÜ‡H‚HˆQ†Kó    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?L–R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�   € ÛðØ—]‘]¤3§8¡8¨B¥<°Ó6‰
ˆó ‰ˆØ�Œ9Ü)¨AÕ-ˆMØ�Ž9Ü •kŠGñ	 ÷
 Ü�œ3Ÿ8™8 A�;Ð(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¸Ð(ˆŒ�T”X˜tžyr   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   € Ø�x‰xˆr   c                ó   € V P                   # r$   )r&   r+   s   &r   Úget_lineÚNannyNag.get_lineC   s   € Ø�y‰yÐ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  € ô 
‡w�w‡}�}�T×Ò¤2§7¡7§>¡>°$×#7Ò#7ß‹7Ü«TÐ3Ô4Ü—
’
˜4Ó ˆÛˆDÜ—w‘w—|‘| DÓ/ˆHÜ—‘—‘˜h×'Ò'Ü—G‘G—N‘N 8×,Ò,Ü—‘× Ñ   b c Ó+¨uÖ4Ü�h–ñ ñ 	ðÜ�MŠM˜$Óˆô
 �„{ÜÐ $Õ&Ô'ðÜ”x×/Ò/°·
±
Ó;Õ<ð8 	
�‰Œ	çƒwÜ«TÐ3Ö4ñ øôM ô Ü«ªcÐ2Ô3Ýûðûô ×Ñô Ü«$²Ð4Ô5Ûð0 	
�‰Ž	ûô- ô Ü³²cÐ:Ô;Ûð( 	
�‰Ž	ûô% ô Ü«4²Ð5Ô6Ûð  	
�‰Ž	ûô ô Ø—.‘.Ó"ˆØ�|‰|‹~ˆß‹7ÜÐ=ÀÀÕOÔPÝª$Ð0Ô1Ü�#—+‘+“-Õ à�dŒ{ 3¨¥:°Õ#3˜Dß‹}œe D�kÜ˜¤t¨D£zÔ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W‚8X  d   V^,           pV^,           pK  Wƒ8X  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›
”?Ø! Q C¨1¬s°5«z­>¸AÕ+=Õ$>Õ>�EØ �8 a�<�‘Ø’áñ ð ŒØŒÜ˜%“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"   € ØŸ)™)‰ˆÜ”3�u“:˜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Ø˜•j 5¥8Õ+Õ+ŠBñ ,à R¯'©'¥\Õ2Õ2Ð2r   c                ó4   € V P                   VP                   8H  # r$   )re   )r'   Úothers   &&r   ÚequalÚWhitespace.equalÒ   s   € Ø�y‰y˜EŸJ™JÑ&Ð&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ˆàˆÜ˜˜1˜Q�3–-ˆ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ž   € Ø�6‰6�U—W‘WÔÙØ�>�>ˆ>˜eŸoŸo˜oØ—7‘7˜eŸh™hÑ&Ð&Ü�×*Ñ*Ó,Ø×+Ñ+Ó-ó/Ø12õ3ˆô ˜˜1˜Q�3–-ˆ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   ø‡ € à�D€A€qò*)ò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   é € Ð'¡Q˜cŒc�#�a•&�kˆk£Qùs   ‚!zat tab sizeÚsr   z, )ra   rF   )ÚwÚfirstsÚprefixs   &  r   Úformat_witnessesr•     s=   € Ù'¡QÓ'€FØ€FÜ
ˆ1ƒv�„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Ü�q—x‘x §¡¨¯©Ó/Ð/ûð0ús   ‚ �A
š+AÁA
c                 ó  € \         P                  p\         P                  p\         P                  p\         P                  \         P
                  3p\        R 4      .p^ pV  EF  w  rxršp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	^ ,          Wë4      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	^ ,          Wë4      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Ñ6°wÓ?�Ø0Ô3CÀGÓ3LÕL�Ü˜u Q�x¨Ó3Ð3Ø�N‰N˜7Ö#àŒ^ð ˆKà˜’ç‰[˜TÖ-ð ˆKÜ  Ó&ˆGØ˜2•;×$Ñ$ W×-Ô-Ø! "�+×7Ñ7¸Ó@�Ø.Ô1AÀ'Ó1JÕJ�Ü˜u Q�x¨Ó3Ð3óY ,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ô ò?5÷BDñ DòL,ò0ò44ðn ˆzÔÙ†Fñ r   