ó
    F\h-  ã                   óž   • S r SrSSKrSSKrSSKr/ SQrSqSqS rS r	 " S S\
5      rS	 r " S
 S5      rS rS rS r\S:X  a  \	" 5         gg)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.
Ú6é    N)ÚcheckÚNannyNagÚprocess_tokensc                  óÞ   • SnU  H0  n[         R                  R                  U[        U5      -   5        SnM2     [         R                  R                  S5        [         R                  " S5        g )NÚ Ú Ú
é   )ÚsysÚstderrÚwriteÚstrÚexit)ÚargsÚsepÚargs      Ú/usr/lib/python3.13/tabnanny.pyÚerrprintr       sO   € Ø
€CÛˆÜ�
‰
×Ñ˜œs 3›x™Ô(ØŠñ ô ‡J�J×Ñ�TÔÜ‡H‚HˆQ…Kó    c                  óp  • SS K n  U R                  [        R                  SS  S5      u  pW H%  u  pEUS:X  a	  [
        S-   qUS:X  d  M  [        S-   qM'     W(       d  [	        S[        R                  S   S5        U H  n[        U5        M     g ! U R                   a  n[	        U5         S nAN…S nAff = f)Nr   r   Úqvz-qz-vzUsage:z[-v] file_or_directory ...)Úgetoptr   ÚargvÚerrorr   Úfilename_onlyÚverboser   )r   Úoptsr   ÚmsgÚoÚar   s          r   Úmainr"   (   sŸ   € ÛðØ—]‘]¤3§8¡8¨A¨B <°Ó6‰
ˆó ‰ˆØ�‹9Ü)¨AÑ-ˆMØ��9Ü ‘kŠGñ	 ö
 Ü�œ3Ÿ8™8 A™;Ð(DÔEÛˆÜˆcŽ
ò øð �<‰<ó Ü��‰ûðús   †%B ÂB5Â B0Â0B5c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	r   é:   z_
Raised by process_tokens() if detecting an ambiguous indent.
Captured and handled in check().
c                 ó.   • XUsU l         U l        U l        g ©N)Úlinenor   Úline)Úselfr'   r   r(   s       r   Ú__init__ÚNannyNag.__init__?   s   € Ø+1¸Ð(ˆŒ�T”X˜t�yr   c                 ó   • U R                   $ r&   )r'   ©r)   s    r   Ú
get_linenoÚNannyNag.get_linenoA   s   € Ø�{‰{Ðr   c                 ó   • U R                   $ r&   )r   r-   s    r   Úget_msgÚNannyNag.get_msgC   s   € Ø�x‰xˆr   c                 ó   • U R                   $ r&   )r(   r-   s    r   Úget_lineÚNannyNag.get_lineE   s   € Ø�y‰yÐr   )r(   r'   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r*   r.   r1   r4   Ú__static_attributes__© r   r   r   r   :   s   † ñò=òòõr   r   c                 ó–  • [         R                  R                  U 5      (       aø  [         R                  R                  U 5      (       dÔ  [        (       a  [        U < S35        [         R                  " U 5      nU H�  n[         R                  R                  X5      n[         R                  R                  U5      (       a$  [         R                  R                  U5      (       a(  [         R                  R                  USS 5      S:X  d  M’  [        U5        MŸ     g [        R                  " U 5      n[        S:”  a  [        SU -  5         [        [        R                  " UR                   5      5         UR%                  5         [        (       a  [        U < S35        gg! [         a  n[        U < SU< 35         SnAgSnAff = f! [        R"                   a,  n[        U < SU< 35         SnAUR%                  5         gSnAf[&         a,  n[        U < S	U< 35         SnAUR%                  5         gSnAf[(         a,  n[        U < S
U< 35         SnAUR%                  5         gSnAf[*         a·  nUR-                  5       nUR/                  5       n[        (       a8  [        SX4-  5        [        SU< 35        [        UR1                  5       5        O:SU ;   a  SU -   S-   n [2        (       a  [        U 5        O[        X[5        U5      5         SnAUR%                  5         gSnAff = f! UR%                  5         f = f)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 directoryéýÿÿÿNz.pyz: I/O Error: r   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   r   Úgenerate_tokensÚreadlineÚ
TokenErrorÚcloseÚIndentationErrorÚSyntaxErrorr   r.   r4   r1   r   Úrepr)	ÚfileÚnamesÚnameÚfullnameÚfr   ÚnagÚbadliner(   s	            r   r   r   H   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Ûð 	
�‰�	ûðûð 	
�‰�	úsy   ÄF# Å)G Æ#
G	Æ-GÇG	ÇL3Ç HÇ2L6 ÈL3ÈH;È&L6 È;L3ÉI/ÉL6 É/L3É<BL.ÌL6 Ì.L3Ì3L6 Ì6Mc                   óH   • \ rS rSrSu  rrS rS rS rS r	S r
S rS	 rS
rg)Ú
Whitespaceé‰   z 	c                 óŒ  • Xl         [        R                  [        R                  p2/ nS=n=pgU R                    HW  nX‚:X  a  US-   nUS-   nM  Xƒ:X  a>  US-   nUS-   nU[	        U5      :¼  a  US/U[	        U5      -
  S-   -  -   nXE   S-   XE'   SnMW    O   X`l        Xpl        [        U5      U4U l        [	        U5      S:*  U l	        g )Nr   r   )
ÚrawrZ   ÚSÚTÚlenÚnÚntÚtupleÚnormÚ	is_simple)	r)   Úwsr^   r_   ÚcountÚbra   rb   Ú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                 óN   • U R                   u  p[        [        U5      S-
  U5      $ ©Nr   )rd   Úmaxr`   )r)   rg   Útrailings      r   Úlongest_run_of_spacesÚ Whitespace.longest_run_of_spaces¹   s"   € ØŸ)™)‰ˆÜ”3�u“:˜a‘< Ó*Ð*r   c                 ó˜   • U R                   u  p#Sn[        U[        U5      5       H  nXEU-  X%   -  -   nM     X1X@R                  -   -  -   $ )Nr   )rd   Úranger`   rb   )r)   Útabsizerg   rn   ÚilÚis         r   Úindent_levelÚWhitespace.indent_level½   sP   € ð Ÿ)™)‰ˆØˆÜ�w¤ E£
Ö+ˆAØ˜‘j 5¡8Ñ+Ñ+ŠBñ ,à R¯'©'¡\Ñ2Ñ2Ð2r   c                 ó4   • U R                   UR                   :H  $ r&   )rd   )r)   Úothers     r   ÚequalÚWhitespace.equalÔ   s   € Ø�y‰y˜EŸJ™JÑ&Ð&r   c                 ó<  • [        U R                  5       UR                  5       5      S-   n/ n[        SUS-   5       H[  nU R                  U5      UR                  U5      :w  d  M)  UR	                  UU R                  U5      UR                  U5      45        M]     U$ rl   ©rm   ro   rr   rv   Úappend©r)   ry   ra   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                 ó~  • U R                   UR                   :¼  a  gU R                  (       a*  UR                  (       a  U R                  UR                  :*  $ [        U R	                  5       UR	                  5       5      S-   n[        SUS-   5       H)  nU R                  U5      UR                  U5      :¼  d  M)    g   g)NFr   é   T)ra   re   rb   rm   ro   rr   rv   )r)   ry   ra   r€   s       r   ÚlessÚWhitespace.lessó   sš   € Ø�6‰6�U—W‘WÓØØ�>�>˜eŸoŸoØ—7‘7˜eŸh™hÑ&Ð&Ü�×*Ñ*Ó,Ø×+Ñ+Ó-ó/Ø12ñ3ˆô ˜˜1˜Q™3–-ˆBØ× Ñ  Ó$¨×(:Ñ(:¸2Ó(>Õ>Ùñ  ð r   c                 ó<  • [        U R                  5       UR                  5       5      S-   n/ n[        SUS-   5       H[  nU R                  U5      UR                  U5      :¼  d  M)  UR	                  UU R                  U5      UR                  U5      45        M]     U$ rl   r}   r   s        r   Únot_less_witnessÚWhitespace.not_less_witness  rƒ   r   )re   ra   rd   rb   r]   N)r6   r7   r8   r9   r^   r_   r*   ro   rv   rz   r�   r†   r‰   r;   r<   r   r   rZ   rZ   ‰   s.   † à�D€A€qò*)ò2+ò3ò.'ò	ò0õ"	r   rZ   c                 ón   • S U  5       nSn[        U 5      S:”  a  US-   nUS-   SR                  U5      -   $ )Nc              3   ó>   #   • U  H  n[        US    5      v •  M     g7f)r   N)r   )Ú.0Útups     r   Ú	<genexpr>Ú#format_witnesses.<locals>.<genexpr>  s   é € Ð'¢Q˜cŒc�#�a‘&�kˆk¢Qùs   ‚zat tab sizer   Úsr	   z, )r`   rF   )ÚwÚfirstsÚprefixs      r   Úformat_witnessesr•     s=   € Ù'¡QÓ'€FØ€FÜ
ˆ1ƒv�ƒzØ˜#‘ˆØ�C‰<˜$Ÿ)™) FÓ+Ñ+Ð+r   c                 ó–   •  [        U 5        g ! [         a0  n[        UR                  UR                  UR
                  5      eS nAff = fr&   )Ú_process_tokensÚTabErrorr   r'   r   Útext)ÚtokensÚes     r   r   r     s:   € ð0Ü˜ÕøÜó 0Ü�q—x‘x §¡¨¯©Ó/Ð/ûð0ús   ‚ Ž
A˜+AÁAc                 ó°  • [         R                  n[         R                  n[         R                  n[         R                  [         R
                  4n[        S5      /nSnU  Hò  u  pxpšnXs:X  a  SnM  Xq:X  aj  Sn[        U5      nUS   R                  U5      (       d1  US   R                  U5      nS[        U5      -   n[        U	S   Xë5      eUR                  U5        M  Xr:X  a  SnUS	 M‹  U(       d  M”  Xt;  d  M›  Sn[        U5      nUS   R                  U5      (       a  MÃ  US   R                  U5      nS[        U5      -   n[        U	S   Xë5      e   g )Nr   r   r   éÿÿÿÿzindent not greater e.g. zindent not equal e.g. )rH   ÚINDENTÚDEDENTÚNEWLINEÚCOMMENTÚNLrZ   r†   r‰   r•   r   r~   rz   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:   Ú__version__r@   r   rH   Ú__all__r   r   r   r"   Ú	Exceptionr   r   rZ   r•   r   r—   r6   r<   r   r   Ú<module>r°      sv   ðñ
ð$ €ã 	Û 
Û â
1€à
€Ø€òòô$ˆyô ò?5÷BDñ DòL,ò0ò44ðn ˆzÓÙ…Fð r   