grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026ó |…!©ÁƒKãóž•SrSrSSKrSSKrSSKr/SQrSqSqSrSr "SS\ 5r S r "S S 5r S rS rSr\S:Xa\ "5 gg)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óÞ•SnUH0n[RRU[U5-5 SnM2 [RRS5 [R"S5 g)NÚÚ Ú é)ÚsysÚstderrÚwriteÚstrÚexit)ÚargsÚsepÚargs Ú//opt/alt/python313/lib64/python3.13/tabnanny.pyÚerrprintr sO€Ø €CÛˆÜ � ‰ ×јœs 3›x™Ô(ØŠñô‡J�J×Ñ�TÔ܇H‚HˆQ…Kócóp•SSKnUR[RSSS5upWH%upEUS:Xa [ S-qUS:XdM[ S-qM' W(d[ S[RSS5 UHn[U5 M g!URan[ U5 SnAN…SnAff=f)Nrr Úqvz-qz-vzUsage:z[-v] file_or_directory ...)Úgetoptr ÚargvÚerrorrÚ filename_onlyÚverboser)rÚoptsrÚmsgÚoÚars 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Â0B5có0•\rSrSrSrSrSrSrSrSr g) ré:z_ Raised by process_tokens() if detecting an ambiguous indent. Captured and handled in check(). có.•XUsUlUlUlg©N)ÚlinenorÚline)Úselfr'rr(s rÚ__init__ÚNannyNag.__init__?s€Ø+1¸Ð(ˆŒ �T”X˜t�yrcó•UR$r&)r'©r)s rÚ get_linenoÚNannyNag.get_linenoAs €Ø�{‰{Ðrcó•UR$r&)rr-s rÚget_msgÚNannyNag.get_msgCs €Ø�x‰xˆrcó•UR$r&)r(r-s rÚget_lineÚNannyNag.get_lineEs €Ø�y‰yÐr)r(r'rN) Ú__name__Ú __module__Ú __qualname__Ú__firstlineno__Ú__doc__r*r.r1r4Ú__static_attributes__©rrrr:s†ñò=òòõrrcó–•[RRU5(aø[RRU5(dÔ[(a[ U<S35 [R "U5nUH�n[RRX5n[RRU5(a$[RRU5(a([RRUSS5S:XdM’[U5 MŸ g[R"U5n[S:”a[ SU-5 [[R"UR 55 UR%5 [(a[ U<S35 gg![an[U<SU<35 SnAgSnAff=f![R"a,n[U<SU<35 SnAUR%5 gSnAf[&a,n[U<S U<35 SnAUR%5 gSnAf[(a,n[U<S U<35 SnAUR%5 gSnAf[*a·nUR-5nUR/5n[(a8[ S X4-5 [ S U<35 [ UR155 O:S U;aSU-S-n[2(a [ U5 O[ X[5U55 SnAUR%5 gSnAff=f!UR%5 f=f)afcheck(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 zchecking %r ...z: Token Error: z: Indentation Error: z: Syntax Error: z)%r: *** Line %d: trouble in tab city! ***zoffending line: r Ú"z: Clean bill of health.)ÚosÚpathÚisdirÚislinkrÚprintÚlistdirÚjoinÚnormcaserÚtokenizeÚopenÚOSErrorrrÚgenerate_tokensÚreadlineÚ TokenErrorÚcloseÚIndentationErrorÚ SyntaxErrorrr.r4r1rÚrepr) ÚfileÚnamesÚnameÚfullnameÚfrÚnagÚbadliner(s rrrHsP€ô ‡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Ç2L6È L3ÈH;È&L6È; L3ÉI/ÉL6É/ L3ÉUS-nUS-nU[ U5:¼aUS/U[ U5- S---nXES-XE'SnMW O X`lXpl[U5U4Ul[ U5S:*Ul g)Nrr ) ÚrawrZÚSÚTÚlenÚnÚntÚtupleÚnormÚ is_simple) r)Úwsr^r_ÚcountÚbrarbÚchs rr*Ú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™ˆ�rcóN•URup[[U5S- U5$©Nr )rdÚmaxr`)r)rgÚtrailings rÚlongest_run_of_spacesÚ Whitespace.longest_run_of_spaces¹s"€ØŸ)™)‰ˆÜ”3�u“:˜a‘< Ó*Ð*rcó˜•URup#Sn[U[U55HnXEU-X%--nM X1X@R---$)Nr)rdÚranger`rb)r)ÚtabsizergrnÚilÚis rÚ indent_levelÚWhitespace.indent_level½sP€ðŸ)™)‰ˆØ ˆÜ�w¤ E£ Ö+ˆAؘ‘j 5¡8Ñ+Ñ+ŠBñ,à R¯'©'¡\Ñ2Ñ2Ð2rcó4•URUR:H$r&)rd)r)Úothers rÚequalÚWhitespace.equalÔs€Ø�y‰y˜EŸJ™JÑ&Ð&rcó<•[UR5UR55S-n/n[SUS-5H[nURU5URU5:wdM)UR UURU5URU545 M] U$rl©rmrorrrvÚappend©r)ryrar!Útss rÚnot_equal_witnessÚWhitespace.not_equal_witnessÛó˜€Ü �×*Ñ*Ó,Ø×+Ñ+Ó-ó /Ø12ñ 3ˆà ˆÜ˜˜1˜Q™3–-ˆBØ× Ñ  Ó$¨×(:Ñ(:¸2Ó(>Õ>Ø—‘˜2Ø×,Ñ,¨RÓ0Ø ×-Ñ-¨bÓ1ð3ö5ñ ð ˆrcó~•URUR:¼agUR(a*UR(aURUR:*$[UR 5UR 55S-n[ SUS-5H)nUR U5UR U5:¼dM) g g)NFr éT)rarerbrmrorrrv)r)ryrar€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Ó(>Õ>Ùñ ðrcó<•[UR5UR55S-n/n[SUS-5H[nURU5URU5:¼dM)UR UURU5URU545 M] U$rlr}rs rÚnot_less_witnessÚWhitespace.not_less_witnessrƒr)rerardrbr]N)r6r7r8r9r^r_r*rorvrzr�r†r‰r;r<rrrZrZ‰s.†à �D€A€qò*)ò2+ò3ò.'ò ò0 õ" rrZcón•SU5nSn[U5S:”aUS-nUS-SRU5-$)Nc3ó># •UHn[US5v• M g7f)rN)r)Ú.0Útups rÚ Ú#format_witnesses..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Ó+Ñ +Ð+rcó–•[U5 g![a0n[URURUR 5eSnAff=fr&)Ú_process_tokensÚTabErrorrr'rÚtext)ÚtokensÚes rrrs:€ð0Ü˜ÕøÜ ó0Ü�q—x‘x §¡¨¯©Ó/Ð/ûð0ús‚ Ž A˜+AÁAcó°•[Rn[Rn[Rn[R[R 4n[ S5/nSnUHòupxpšn Xs:XaSnMXq:XajSn[ U5n USRU 5(d1USRU 5n S[U 5-n[U SXë5eURU 5 MXr:XaSnUS M‹U(dM”Xt;dM›Sn[ U 5n USRU 5(aMÃUSRU 5n S[U 5-n[U SXë5e g)Nrrr éÿÿÿÿzindent not greater e.g. zindent not equal e.g. )rHÚINDENTÚDEDENTÚNEWLINEÚCOMMENTÚNLrZr†r‰r•rr~rzr�)ršržrŸr ÚJUNKÚindentsÚ check_equalÚtypeÚtokenÚstartÚendr(ÚthisguyÚwitnessrs rr—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__rrrr"Ú ExceptionrrrZr•rr—r6r<rrÚr°svðñ ð$€ ã Û Ûâ 1€à €Ø€ òòô$ ˆyô ò?5÷BDñDòL,ò0ò 44ðn ˆzÓÙ…Fðr