grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026ó ŸT¦ýñclãóð•SrSSKrSSKrSSKr/SQr0r"SS5r"SS\5r"SS \5r SS jr SS jr SS jr SS jr SSjr"SS\R5rSrSr\S:Xa\"5 gg)aParse a Python module and describe its classes and functions. Parse enough of a Python file to recognize imports and class and function definitions, and to find out the superclasses of a class. The interface consists of a single function: readmodule_ex(module, path=None) where module is the name of a Python module, and path is an optional list of directories where the module is to be searched. If present, path is prepended to the system search path sys.path. The return value is a dictionary. The keys of the dictionary are the names of the classes and functions defined in the module (including classes that are defined via the from XXX import YYY construct). The values are instances of classes Class and Function. One special key/value pair is present for packages: the key '__path__' has a list as its value which contains the package search path. Classes and Functions have a common superclass: _Object. Every instance has the following attributes: module -- name of the module; name -- name of the object; file -- file in which the object is defined; lineno -- line in the file where the object's definition starts; end_lineno -- line in the file where the object's definition ends; parent -- parent of this object, if any; children -- nested objects contained in this object. The 'children' attribute is a dictionary mapping names to objects. Instances of Function describe functions with the attributes from _Object, plus the following: is_async -- if a function is defined with an 'async' prefix Instances of Class describe classes with the attributes from _Object, plus the following: super -- list of super classes (Class instances if possible); methods -- mapping of method names to beginning line numbers. If the name of a super class is not recognized, the corresponding entry in the list of super classes is not a class instance but a string giving the name of the super class. Since import statements are recognized and imported modules are scanned as well, this shouldn't happen often. éN)Ú readmoduleÚ readmodule_exÚClassÚFunctioncó•\rSrSrSrSrSrg)Ú_Objecté5z+Information about Python class or function.có~•XlX lX0lX@lXPlX`l0UlUbXR U'gg©N)ÚmoduleÚnameÚfileÚlinenoÚ end_linenoÚparentÚchildren)Úselfr r rrrrs Ú-/opt/alt/python313/lib64/python3.13/pyclbr.pyÚ__init__Ú_Object.__init__7s>€ØŒ ØŒ ØŒ ØŒ Ø$ŒØŒ ؈Œ Ø Ñ Ø$(�O‰O˜DÒ !ð ó)rrrrr r rN)Ú__name__Ú __module__Ú __qualname__Ú__firstlineno__Ú__doc__rÚ__static_attributes__©rrrr5s †Ù1õ )rrcó:^•\rSrSrSrSSS.U4SjjjrSrU=r$)réDz7Information about a Python function, including methods.N©rcó|>•[TU]XX4Xu5 X`l[U[5(aXER U'ggr )ÚsuperrÚis_asyncÚ isinstancerÚmethods) rr r rrrr$rÚ __class__s €rrÚFunction.__init__Fs7ø€ä ‰Ñ˜ t°ZÔHØ Œ Ü �fœe× $Ñ $Ø#)�N‰N˜4Ò ð %r©r$)NF©rrrrrrrÚ __classcell__©r's@rrrDsø†Ù=à',ð*Ø<@÷*÷*rrcó:^•\rSrSrSrSSS.U4SjjjrSrU=r$)réNz!Information about a Python class.Nr!cóV>•[TU]XXEXv5 U=(d /Ul0Ulgr )r#rr&) rr r Úsuper_rrrrr's €rrÚClass.__init__Ps&ø€ä ‰Ñ˜ t°ZÔHØ—\˜rˆŒ ؈� r)r&r#r r*r,s@rrrNsø†Ù'àðØ,0÷÷rrc óD•[URXRUXUS9$)z*Return a Function after nesting within ob.)rr$r)rr r)ÚobÚ func_namerrr$s rÚ_nest_functionr5Ys$€ä �B—I‘I˜y¯'©'°6ظZñ IðIrc óD•[URXURUXS9$)z'Return a Class after nesting within ob.©rr)rr r)r3Ú class_namerrr#s rÚ _nest_classr9^s"€ä �—‘˜J¨r¯w©w¸Øñ 3ð3rcó–•0n[X=(d /5R5H up4[U[5(dMXBU'M" U$)zxReturn Class objects for the top-level classes in module. This is the original interface, before Functions were added. )Ú _readmoduleÚitemsr%r)r ÚpathÚresÚkeyÚvalues rrrdsB€ð €CÜ! &¯*°"Ó5×;Ñ;Ö=‰ ˆÜ �eœU× #Ó #Ø�‹Hñ>ð €Jrcó*•[X=(d /5$)zÒReturn a dictionary with all functions and classes in module. Search for module in PATH + sys.path. If possible, include imported superclasses. Do this by reading source, without importing (and executing) it. )r;)r r=s rrrps€ô �vŸz rÓ *Ð*rcó•Ub U<SU<3nOUnU[;a [U$0nU[R;aUc U[U'U$URS5nUS:¼aSUSUnXS-Sn[ XaU5nUb U<SU<3nSU;a[ SR U55e[ XxSU5$Sn UbUn OU[R-n [RRX:5n U c[SU<3US9eU[U'U RbU RUS'U RRU5n U cU$U RR!U5n [#X1XÜXB5$![[ 4a Us$f=f) aDo the hard work for readmodule[_ex]. If inpackage is given, it must be the dotted name of the package in which we are searching for a submodule, and then PATH must be the package search path; otherwise, we are searching for a top-level module, and path is combined with sys.path. NÚ.réÚ__path__zNo package named {}zno module named )r )Ú_modulesÚsysÚbuiltin_module_namesÚrfindr;Ú ImportErrorÚformatr=Ú importlibÚutilÚ_find_spec_from_pathÚModuleNotFoundErrorÚsubmodule_search_locationsÚloaderÚ get_sourceÚAttributeErrorÚ get_filenameÚ _create_tree)r r=Ú inpackageÚ fullmoduleÚtreeÚiÚpackageÚ submodulerÚfÚ search_pathÚspecÚsourceÚfnames rr;r;zs²€ðÑÛ )ª6Ð2‰ àˆ ð”XÓܘ Ñ#Ð#ð €Dð”×)Ñ)Ó)¨iÑ.?ØŒ�ÑØˆ ð � ‰ �SÓ€A؈Aƒvؘ˜!�*ˆØ˜Q™3˜4�Lˆ ܘW¨IÓ6ˆØ Ñ Û!*ªGÐ4ˆGؘVÓ#ÜÐ3×:Ñ:¸7ÓCÓDÐ Dܘ9¨ZÑ&8¸'ÓBÐBð €AØÑ؉ àœSŸX™X‘oˆ Ü �>‰>× .Ñ .¨zÓ G€DØ �|Ü!Ð$4°Z±NÐ"CÈ*ÑUÐUØ„HˆZÑà ×&Ñ&Ñ2Ø×:Ñ:ˆˆZÑðØ—‘×'Ñ'¨ Ó3ˆð ‰>؈Kð ð �K‰K× $Ñ $ ZÓ 0€EÜ ˜ ¨%¸Ó IÐIøô œKÐ (óàŠ ðúsÄ"E+Å+FÅ?Fcó@•\rSrSrSrSrSS.SjrSrSrS r S r g ) Ú_ModuleBrowseréºcóN•X lX@lX0lXlXPl/Ulgr )r=rXrr rVÚstack)rr r=rrXrVs rrÚ_ModuleBrowser.__init__»s"€ØŒ ØŒ ØŒ ØŒ Ø"ŒØˆ� rc ó•/nURH³n[R"U5nX@R;a UR URU5 MH[ UR S5=n5S:”a:UGtpgnU[;a)UR [URX„55 M M¢UR U5 Mµ UR(aURSOSn [URURX RURX‘RS9nU cX€RUR'URR U5 UR!U5 URR#5 g)NrCrDéÿÿÿÿr7)ÚbasesÚastÚunparserXÚappendÚlenÚsplitrFÚgetrerr r rrrÚ generic_visitÚpop) rÚnoderiÚbaser ÚnamesÚ_r Úclass_rs rÚvisit_ClassDefÚ_ModuleBrowser.visit_ClassDefÃs"€ØˆØ—J”JˆDÜ—;’;˜tÓ$ˆDØ—y‘yÓ à— ‘ ˜TŸY™Y t™_Ö-ܘdŸj™j¨›oÐ-�UÓ.°Ó2ð&+Ñ"�˜FØœXÓ%Ø—L‘L¤¨&Ñ!1×!5Ñ!5°fÓ!CÖDñ&ð— ‘ ˜TÖ"ñð$(§:§:�—‘˜B’°4ˆÜ�t—{‘{ D§I¡I¨u·i±iÀÇÁØ$·±ñBˆà ‰>Ø#)�I‰I�d—i‘iÑ Ø � ‰ ×ј&Ô!Ø ×ј4Ô Ø � ‰ �‰ÕrFr)c óŠ•UR(aURSOSn[URURURUR X2UR S9nUcX@RUR'URRU5 URU5 URR5 g)Nrhr!) rerr r rrrrXrlrprq)rrrr$rÚfunctions rÚvisit_FunctionDefÚ _ModuleBrowser.visit_FunctionDefÜs†€Ø#'§:§:�—‘˜B’°4ˆÜ˜DŸK™K¨¯©°D·I±I¸t¿{¹{Ø"¸¿¹ñJˆà ‰>Ø#+�I‰I�d—i‘iÑ Ø � ‰ ×ј(Ô#Ø ×ј4Ô Ø � ‰ �‰Õrcó$•URUSS9 g)NTr))r{)rrrs rÚvisit_AsyncFunctionDefÚ%_ModuleBrowser.visit_AsyncFunctionDefæs€Ø ×јt¨dÐÒ3rcó"•URS:wagURH0n[URURUR 5 M2 g![ a [UR/5 MXf=f![ [4a Mof=f)Nr)Ú col_offsetrtr;r r=rVrJÚ SyntaxError)rrrr s rÚ visit_ImportÚ_ModuleBrowser.visit_Importésx€Ø �?‰?˜aÓ Ø à—j”jˆFð ð1Ü § ¡ ¨T¯Y©Y¸¿¹ÖGò!øô#ó1Ü § ¡ ¨R×0ð1ûä¤Ð-ó òð ús)£+AÁ A7Á3A:Á6A7Á7A:Á:B BcóL•URS:wagSUR-nUR(aX!R- n[X RUR 5nURHžnURU;a:X#RURUR=(d UR'MMURS:XdM_UR5H+upEURS5(aMXPRU'M- M  g![ [4a gf=f)NrrCÚ*ru)r�Úlevelr r;r=rVrJr‚rtr rXÚasnamer<Ú startswith)rrrr r Ú import_nameÚ import_values rÚvisit_ImportFromÚ_ModuleBrowser.visit_ImportFromøsâ€Ø �?‰?˜aÓ Ø ð Ø˜4Ÿ:™:Ñ%ˆFØ�{�{ØŸ+™+Ñ%�Ü  ¯©°D·N±NÓCˆFð—J”JˆDØ�y‰y˜FÓ"Ø6<¿Y¹YÑ6G�— ‘ ˜$Ÿ+™+×2¨¯©Ó3Ø—‘˜cÕ!Ø17·±¶Ñ-�KØ"×-Ñ-¨c×2Ñ2Ù Ø-9—I‘I˜kÓ*ó2@ò øôœ[Ð)ó Ù ð ús“ADÄD#Ä"D#)rrVr r=rerXN) rrrrrrwr{r~rƒrŒrrrrrbrbºs%†òòð238õò4ò õ:rrbcó~•[XX$U5nUR[R"U55 UR$r )rbÚvisitrjÚparserX)rWr=r`r_rXrVÚmbrowsers rrUrU s/€Ü˜j°¸YÓG€HØ ‡N�N”3—9’9˜VÓ$Ô%Ø �=‰=Ðrcóx•SSKn[RSnURR U5(aaURR U5/nURRU5nUR5RS5(aUSSnO/n[X5nSn[UR5USS9nS nU(Ga`UR5n[U[5(aM/[!US 5(dSUl[U[$5(aQ[UR&R5USS9nUHn UR"U-U lM UR)U5 [U[*5(aI[-S R/S UR"-UR0UR2UR455 OR[U[65(a=[-S R/S UR"-UR0UR455 U(aGM_gg! [nGN =f)z?Print module output (default this file) for quick visual check.rNrDz.pyéýÿÿÿcó•[USS5$)Nrr)Úgetattr)Úas rÚÚ_main.."s €œ7 1 h°Ô2rT)r?ÚreverseéÚindentz{}class {} {} {}Ú z {}def {} {})ÚosrGÚargvÚ__file__r=ÚexistsÚdirnameÚbasenameÚlowerÚendswithrÚsortedÚvaluesrqr%ÚlistÚhasattrr›rrÚextendrÚprintrKr r#rr) r�Úmodr=rXÚ lineno_keyÚobjsÚ indent_levelÚobjÚnew_objsr3s rÚ_mainr±s®€ã ðÜ�h‰h�q‰kˆð ‡w�w‡~�~�c×ÑØ—‘—‘ Ó$Ð%ˆØ�g‰g×јsÓ#ˆØ �9‰9‹;× Ñ  × &Ñ &Ø�c�r�(ˆCøàˆÜ ˜Ó #€DÙ2€JÜ �$—+‘+“- Z¸Ñ >€DØ€Lß Ø�h‰h‹jˆÜ �cœ4× Ñ á Ü�s˜H×%Ñ%؈CŒJä �cœ7× #Ñ #ܘcŸl™l×1Ñ1Ó3Ø",°dñ<ˆHã�ØŸJ™J¨Ñ5�– ñà �K‰K˜Ô !Ü �cœ5× !Ñ !Ü Ð$ß‘6˜# § ¡ Ñ*¨C¯H©H°c·i±iÀÇÁÓLõ Nä ˜œX× &Ñ &Ü �-×&Ñ& s¨S¯Z©ZÑ'7¸¿¹À3Ç:Á:ÓNÔ O÷% ‹$øðÜ‹ús †H.È.H9Ú__main__)Fr )rrjrGÚimportlib.utilrLÚ__all__rFrrrr5r9rrr;Ú NodeVisitorrbrUr±rrrrÚr¶s‘ðñ)óV Û Ûâ >€à €÷ )ñ )ô*ˆwô*ôˆGôôIô 3ô ô+ô=Jô@P:�S—_‘_ôP:òfò $PðL ˆzÓÙ …Gðr