§
    (¶Õi#,  ã                   ó®   — d Z dZddlZddlZddlZg d¢Zdadad„ Zd„ Z	 G d„ de
¦  «        Zd	„ Z G d
„ d¦  «        Zd„ Zd„ Zedk    r e	¦   «          dS dS )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                  ó´   — d}| D ]3}t           j                             |t          |¦  «        z   ¦  «         d}Œ4t           j                             d¦  «         d S )NÚ ú ú
)ÚsysÚstderrÚwriteÚstr)ÚargsÚsepÚargs      ú/usr/lib/python3.11/tabnanny.pyÚerrprintr       sY   € Ø
€CØð ð ˆÝŒ
×Ò˜�s 3™xœx™Ñ(Ô(Ð(ØˆˆÝ„J×Ò�TÑÔÐÐÐó    c                  óx  — dd l } 	 |                       t          j        dd …         d¦  «        \  }}n'# | j        $ r}t	          |¦  «         Y d }~d S d }~ww xY w|D ]%\  }}|dk    r
t
          dz   a|dk    r
t          dz   aŒ&|s#t	          dt          j        d         d¦  «         d S |D ]}t          |¦  «         Œd S )Nr   é   Úqvz-qz-vzUsage:z[-v] file_or_directory ...)Úgetoptr   ÚargvÚerrorr   Úfilename_onlyÚverboser   )r   Úoptsr   ÚmsgÚoÚar   s          r   Úmainr!   '   só   € Ø€M€M€MðØ—]’]¥3¤8¨A¨B¨B¤<°Ñ6Ô6‰
ˆˆdˆdøØŒ<ð ð ð Ý�‰ŒˆØˆˆˆˆˆøøøøðøøøð ð "ð "‰ˆˆ1Ø�Š9ˆ9Ý)¨AÑ-ˆMØ�Š9ˆ9Ý ‘kˆGøØð Ý��3œ8 Aœ;Ð(DÑEÔEÐEØˆØð ð ˆÝˆc‰
Œ
ˆ
ˆ
ðð s   †+2 ²
A¼AÁAc                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )r   zk
    Raised by process_tokens() if detecting an ambiguous indent.
    Captured and handled in check().
    c                 ó2   — |||c| _         | _        | _        d S ©N)Úlinenor   Úline)Úselfr%   r   r&   s       r   Ú__init__zNannyNag.__init__@   s   € Ø+1°3¸Ð(ˆŒ�T”X˜tœy˜y˜yr   c                 ó   — | j         S r$   )r%   ©r'   s    r   Ú
get_linenozNannyNag.get_linenoB   s
   € ØŒ{Ðr   c                 ó   — | j         S r$   )r   r*   s    r   Úget_msgzNannyNag.get_msgD   s	   € ØŒxˆr   c                 ó   — | j         S r$   )r&   r*   s    r   Úget_linezNannyNag.get_lineF   s
   € ØŒyÐr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r+   r-   r/   © r   r   r   r   ;   sZ   € € € € € ðð ð=ð =ð =ðð ð ðð ð ðð ð ð ð r   r   c                 ó|  — t           j                             | ¦  «        rët           j                             | ¦  «        sÌt          rt          | ›d�¦  «         t          j        | ¦  «        }|D ]š}t           j                             | |¦  «        }t           j                             |¦  «        rt           j                             |¦  «        r+t           j                             |dd…         ¦  «        dk    rt          |¦  «         Œ›dS 	 t          j        | ¦  «        }n,# t          $ r}t          | ›d|›�¦  «         Y d}~dS d}~ww xY wt          dk    rt          d| z  ¦  «         	 t          t          j        |j        ¦  «        ¦  «         �n_# t          j        $ r3}t          | ›d|›�¦  «         Y d}~|                     ¦   «          dS d}~wt&          $ r3}t          | ›d	|›�¦  «         Y d}~|                     ¦   «          dS d}~wt(          $ r×}|                     ¦   «         }|                     ¦   «         }t          rHt          d
| |fz  ¦  «         t          d|›�¦  «         t          |                     ¦   «         ¦  «         nAd| v rd| z   dz   } t0          rt          | ¦  «         nt          | |t3          |¦  «        ¦  «         Y d}~|                     ¦   «          dS d}~ww xY w	 |                     ¦   «          n# |                     ¦   «          w xY wt          rt          | ›d�¦  «         dS dS )a~  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)%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ÚIndentationErrorr   r+   r/   r-   r   Úrepr)	ÚfileÚnamesÚnameÚfullnameÚfr   ÚnagÚbadliner&   s	            r   r   r   I   sU  € õ 
„w‡}‚}�TÑÔð 
¥2¤7§>¢>°$Ñ#7Ô#7ð 
Ýð 	5Ý¨T¨T¨TÐ3Ñ4Ô4Ð4Ý”
˜4Ñ Ô ˆØð 	 ð 	 ˆDÝ”w—|’| D¨$Ñ/Ô/ˆHÝ”—’˜hÑ'Ô'ð  Ý”G—N’N 8Ñ,Ô,ð å”× Ò   b c c¤Ñ+Ô+¨uÒ4Ð4Ý�h‘”�øØˆðÝŒM˜$ÑÔˆˆøÝð ð ð Ý¨¨¨¨c¨cÐ2Ñ3Ô3Ð3Øˆˆˆˆˆøøøøðøøøõ �‚{€{ÝÐ $Ñ&Ñ'Ô'Ð'ðÝ•xÔ/°´
Ñ;Ô;Ñ<Ô<Ð<Ñ<øåÔð ð ð Ý¨$¨$¨$°°Ð4Ñ5Ô5Ð5Øˆˆˆð( 	
�Š‰	Œ	ˆ	ˆ	ˆ	øøøøõ% ð ð ð Ý°°°°c°cÐ:Ñ;Ô;Ð;Øˆˆˆð  	
�Š‰	Œ	ˆ	ˆ	ˆ	øøøøõ ð ð ð Ø—.’.Ñ"Ô"ˆØ�|Š|‰~Œ~ˆÝð 	3ÝÐ=ÀÀwÀÑOÑPÔPÐPÝˆE¨$¨$Ð0Ñ1Ô1Ð1Ý�#—+’+‘-”-Ñ Ô Ð Ð à�dˆ{ˆ{ 3¨¡:°Ñ#3˜DÝð 3�e D™kœk˜k˜kÝ˜˜g¥t¨D¡z¤zÑ2Ô2Ð2Øˆˆˆð 	
�Š‰	Œ	ˆ	ˆ	ˆ	øøøøðøøøð 	=ð0 	
�Š‰	Œ	ˆ	ˆ	øˆ�Š‰	Œ	ˆ	ˆ	øøøåð 5Ý¨T¨T¨TÐ3Ñ4Ô4Ð4Ð4Ð4ð5ð 5sm   ÄD! Ä!
E
Ä+EÅE
Å+&F ÆL ÆK/Æ"GÆ6L ÇK/ÇHÇ1L ÈK/ÈB8K*ËL Ë*K/Ë/L ÌLc                   óB   — e Zd Zd\  ZZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	S )
Ú
Whitespacez 	c                 ó¢  — || _         t          j        t          j        }}g }dx}x}}| j         D ]c}||k    r|dz   }|dz   }Œ||k    rJ|dz   }|dz   }|t	          |¦  «        k    r|dg|t	          |¦  «        z
  dz   z  z   }||         dz   ||<   d}Œc || _        || _        t          |¦  «        |f| _        t	          |¦  «        dk    | _	        d S )Nr   r   )
ÚrawrQ   ÚSÚTÚlenÚnÚntÚtupleÚnormÚ	is_simple)	r'   ÚwsrT   rU   ÚcountÚbrW   rX   Úchs	            r   r(   zWhitespace.__init__�   sï   € ØˆŒÝŒ|�Zœ\ˆ1ˆØˆØˆˆˆˆA�Ø”(ð 	ð 	ˆBØ�QŠwˆwØ˜‘E�Ø˜‘E��Ø�q’�Ø˜‘E�Ø˜!‘V�Ø�˜E™
œ
’?�?Ø! Q C¨1­s°5©z¬z©>¸AÑ+=Ñ$>Ñ>�EØ  œ8 a™<��a‘Ø��àØˆŒØˆŒÝ˜%‘L”L !�OˆŒ	Ý˜U™œ qšˆŒˆˆr   c                 óV   — | j         \  }}t          t          |¦  «        dz
  |¦  «        S ©Nr   )rZ   ÚmaxrV   )r'   r]   Útrailings      r   Úlongest_run_of_spacesz Whitespace.longest_run_of_spaces¶   s'   € Øœ)‰ˆˆxÝ•3�u‘:”:˜a‘< Ñ*Ô*Ð*r   c                 óœ   — | j         \  }}d}t          |t          |¦  «        ¦  «        D ]}|||z  ||         z  z   }Œ|||| j        z   z  z   S )Nr   )rZ   ÚrangerV   rX   )r'   Útabsizer]   rc   ÚilÚis         r   Úindent_levelzWhitespace.indent_levelº   sb   € ð œ)‰ˆˆxØˆÝ�w¥ E¡
¤
Ñ+Ô+ð 	,ð 	,ˆAØ�a˜‘j 5¨¤8Ñ+Ñ+ˆBˆBØ˜' R¨$¬'¡\Ñ2Ñ2Ð2r   c                 ó"   — | j         |j         k    S r$   )rZ   )r'   Úothers     r   ÚequalzWhitespace.equalÑ   s   € ØŒy˜EœJÒ&Ð&r   c                 óx  — t          |                      ¦   «         |                     ¦   «         ¦  «        dz   }g }t          d|dz   ¦  «        D ]l}|                      |¦  «        |                     |¦  «        k    r>|                     ||                      |¦  «        |                     |¦  «        f¦  «         Œm|S ra   ©rb   rd   rf   rj   Úappend©r'   rl   rW   r    Útss        r   Únot_equal_witnesszWhitespace.not_equal_witnessØ   óÄ   € Ý�×*Ò*Ñ,Ô,Ø×+Ò+Ñ-Ô-ñ/ô /Ø12ñ3ˆàˆÝ˜˜1˜Q™3‘-”-ð 	5ð 	5ˆBØ× Ò  Ñ$Ô$¨×(:Ò(:¸2Ñ(>Ô(>Ò>Ð>Ø—’˜2Ø×,Ò,¨RÑ0Ô0Ø ×-Ò-¨bÑ1Ô1ð3ñ 5ô 5ð 5øð ˆr   c                 ó^  — | j         |j         k    rdS | j        r|j        r| j        |j        k    S t          |                      ¦   «         |                     ¦   «         ¦  «        dz   }t          d|dz   ¦  «        D ]1}|                      |¦  «        |                     |¦  «        k    r dS Œ2dS )NFr   é   T)rW   r[   rX   rb   rd   rf   rj   )r'   rl   rW   rr   s       r   ÚlesszWhitespace.lessð   sÁ   € ØŒ6�U”WÒÐØ�5ØŒ>ð 	'˜eœoð 	'Ø”7˜eœhÒ&Ð&Ý�×*Ò*Ñ,Ô,Ø×+Ò+Ñ-Ô-ñ/ô /Ø12ñ3ˆõ ˜˜1˜Q™3‘-”-ð 	ð 	ˆBØ× Ò  Ñ$Ô$¨×(:Ò(:¸2Ñ(>Ô(>Ò>Ð>Ø�u�uð ?àˆtr   c                 óx  — t          |                      ¦   «         |                     ¦   «         ¦  «        dz   }g }t          d|dz   ¦  «        D ]l}|                      |¦  «        |                     |¦  «        k    r>|                     ||                      |¦  «        |                     |¦  «        f¦  «         Œm|S ra   ro   rq   s        r   Únot_less_witnesszWhitespace.not_less_witness  rt   r   N)r0   r1   r2   rT   rU   r(   rd   rj   rm   rs   rw   ry   r4   r   r   rQ   rQ   †   s†   € € € € € à�D€A€qð*)ð )ð )ð2+ð +ð +ð3ð 3ð 3ð.'ð 'ð 'ð	ð 	ð 	ð0ð ð ð"	ð 	ð 	ð 	ð 	r   rQ   c                 ó„   — d„ | D ¦   «         }d}t          | ¦  «        dk    r|dz   }|dz   d                     |¦  «        z   S )Nc              3   ó@   K  — | ]}t          |d          ¦  «        V — ŒdS )r   N)r   )Ú.0Útups     r   ú	<genexpr>z#format_witnesses.<locals>.<genexpr>  s,   è è € Ð'Ð'˜c�c�#�a”&‰kŒkÐ'Ð'Ð'Ð'Ð'Ð'r   zat tab sizer   Úsr	   z, )rV   r>   )ÚwÚfirstsÚprefixs      r   Úformat_witnessesrƒ     sM   € Ø'Ð' QÐ'Ñ'Ô'€FØ€FÝ
ˆ1�v„v�‚z€zØ˜#‘ˆØ�C‰<˜$Ÿ)š) FÑ+Ô+Ñ+Ð+r   c                 óê  — t           j        }t           j        }t           j        }t           j        t           j        f}t          d¦  «        g}d}| D �] \  }}}	}
}||k    rd}Œ||k    r†d}t          |¦  «        }|d                              |¦  «        sD|d                              |¦  «        }dt          |¦  «        z   }t          |	d         ||¦  «        ‚|                     |¦  «         Œž||k    rd}|d= Œª|rt||vrpd}t          |¦  «        }|d                              |¦  «        sD|d                              |¦  «        }dt          |¦  «        z   }t          |	d         ||¦  «        ‚�Œ"d S )Nr   r   r   éÿÿÿÿzindent not greater e.g. zindent not equal e.g. )r@   ÚINDENTÚDEDENTÚNEWLINEÚCOMMENTÚNLrQ   rw   ry   rƒ   r   rp   rm   rs   )Útokensr†   r‡   rˆ   ÚJUNKÚindentsÚcheck_equalÚtypeÚtokenÚstartÚendr&   ÚthisguyÚwitnessr   s                  r   r   r     s•  € ÝŒ_€FÝŒ_€FÝÔ€GÝÔ�Xœ[Ð(€DÝ˜"‰~Œ~Ð€GØ€Kà+1ð ,4ñ ,4Ñ'ˆˆu�e˜S $Ø�7Š?ˆ?ð ˆKˆKà�VŠ^ˆ^ØˆKÝ  Ñ'Ô'ˆGØ˜2”;×#Ò# GÑ,Ô,ð 4Ø! "œ+×6Ò6°wÑ?Ô?�Ø0Õ3CÀGÑ3LÔ3LÑL�Ý˜u Qœx¨¨dÑ3Ô3Ð3Ø�NŠN˜7Ñ#Ô#Ð#Ð#à�VŠ^ˆ^ð ˆKà˜��àð 	4˜T¨Ð-Ð-ð ˆKÝ  Ñ&Ô&ˆGØ˜2”;×$Ò$ WÑ-Ô-ð 4Ø! "œ+×7Ò7¸Ñ@Ô@�Ø.Õ1AÀ'Ñ1JÔ1JÑJ�Ý˜u Qœx¨¨dÑ3Ô3Ð3ùðY,4ð ,4r   Ú__main__)r3   Ú__version__r8   r   r@   Ú__all__r   r   r   r!   Ú	Exceptionr   r   rQ   rƒ   r   r0   r4   r   r   ú<module>r™      s  ðð
ð 
ð$ €à 	€	€	€	Ø 
€
€
€
Ø €€€à
1Ð
1Ð
1€à
€Ø€ðð ð ðð ð ð(ð ð ð ð ˆyñ ô ð ð;5ð ;5ð ;5ðzDð Dð Dð Dð Dñ Dô Dð DðL,ð ,ð ,ð44ð 44ð 44ðn ˆzÒÐØ€D�F„F€F€F€Fð Ðr   