�&ǐk�@'bJ�h�ۊL'}T� :��'2�Z#$��n�a��� �>a��`��_3d�Qpt�/�P -��#5�,�M��� �pA:©�q�����NW��ډ�A���� �9nʺج���� �TSM��{J6?7��r�@�\����D��� �׶���s�f�TJj?"��D��`?��̒� b�#�%�C*v�$�{�$����5Ծ�F�s��y�e/8��h-�f�̰&(����Gj�L:U� 2�� ����v�_k����Y��gp,�k�WF�R������_C�R��N@���R�@�ߔ?A�w9���F("iNa-S���Q�o�3tDMLh*�#4k�T/iQ��Y*�G��m����)��8�hBm/�I�,g�ﯖ���Z��}�Cz�q@´��d.����L�ŕ�,��1�Z�܌�: ̪���F+J-'��c�tvJ8��]Q-��b��y �6;*J`r_�d ��'�G ~p��)'�C,�%F��E(��2�k�����lР�z�!�=t ��_�0��f7��� ;�p�|�U �%sz_Object._addchildN)__name__ __module__ __qualname____doc__rrrrrrr 4sr c@seZdZdZdddZdS)rz7Information about a Python function, including methods.NcCst||||||dSr )r rrrrrrDszFunction.__init__)N)rrrrrrrrrrBscs*eZdZdZdfdd ZddZZS)rz!Information about a Python class.Ncs0t|||||||dkr gn||_i|_dSr )r rsupermethods)rr r rr rr __class__rrrJszClass.__init__cCs||j|<dSr )r)rr rrrr _addmethodOszClass._addmethod)N)rrrrrr __classcell__rrrrrHscCs:t|j||j||}|||t|tr6||||S)z*Return a Function after nesting within ob.)rr r r isinstancerr )ob func_namerZnewfuncrrr_nest_functionSs    r%cCs&t|j|||j||}||||S)z'Return a Class after nesting within ob.)rr r r)r# class_namerrZnewclassrrr _nest_class[s r'cCs6i}t||pgD]\}}t|tr|||<q|S)zReturn Class objects for the top-level classes in module. This is the original interface, before Functions were added. ) _readmoduleitemsr"r)r pathreskeyvaluerrrras   cCst||p gS)zReturn 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*rrrrmsc Cs|dk rd||f}n|}|tkr*t|Si}|tjkrL|dkrL|t|<|S|d}|dkr|d|}||dd}t|||}|dk rd||f}d|krtd|t||d|Sd} |dk r|} n |tj} tj || } | dkrt d||d |t|<| j dk r$| j |d<z| j |} Wnttfk rR|YSX| dkrb|S| j |} t||| | ||S) a.Do 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. Nz%s.%s.r__path__zNo package named {}zno module named )r )_modulessysbuiltin_module_namesrfindr( ImportErrorformatr* importlibutil_find_spec_from_pathModuleNotFoundErrorsubmodule_search_locationsloader get_sourceAttributeError get_filename _create_tree)r r* inpackage fullmoduletreeipackageZ submodulerfZ search_pathspecsourcefnamerrrr(vsJ            r(c! CsHt|}g}t|j}z|D]\} } } } } | tkr`| \}}|r^|dd|kr^|d=qBq"| dkr| \}}|r|dd|kr|d=qpt|dd\} }} | tkrq"d}|r|dd}t|||}nt ||||}|||<| ||fq"| dkr| \}}|r(|dd|kr(|d=qt|dd\} }} | tkrJq"t|dd\} } } d}| dkrg}d}g}t|dd\} } } | d kr|dkrd |}||kr||}nL| d }t |dkr|d }|d}|tkrt|}||kr||}| |g}| dkr0|d7}nZ| d krR|d8}|dkrqn8| dkrh|dkrhn"| ttfkrz|dkrz| | qz|}|r|dd}t||||}nt|||||}|||<| ||fq"| dkrh| ddkrht|}|D]d\}}zL|dkr t||n2zt|||Wn tk rPt|gYnXWn YnXqq"| dkr"| ddkr"t|\}} |r"| dkrq"t|}zt|||}WnYq"YnX|D]X\}} ||kr|||| p|<n0|dkr|D] }|ddkr||||<qqq"Wntk r:YnX||S)aReturn the tree for a particular module. fullmodule (full module name), inpackage+module, becomes o.module. path is passed to recursive calls of _readmodule. fname becomes o.file. source is tokenized. Imports cause recursive calls to _readmodule. tree is {} or {'__path__': }. inpackage, None or string, is passed to recursive calls of _readmodule. The effect of recursive calls is mutation of global _modules. r/defrNclass()),r.rOrPimportfrom*_)ioStringIOtokenizegenerate_tokensreadlinernextrr%rappendjoinsplitlenr1rr'r _getnamelistr(r5_getname StopIterationclose)!rBr*rIrHrCrArFstackg tokentypetokenstartZ_end_linerZ thisindentr$Zcur_funcZcur_objr&ZinheritnameslevelrncmdZ cur_classmodulesmodZ_mod2Zn2rrrr@s                             r@cCslg}t|\}}|sqh|dkr,t|\}}nd}|||f|dkr\d|kr\t|d}q>|dkrqhq|S)zReturn list of (dotted-name, as-name or None) tuples for token source g. An as-name is the name that follows 'as' in an as clause. asNrP r/)rbr]r\)rfrkr rhZname2rrrraEs racCsg}t|dd\}}|tkr0|dkr0d|fS||t|dd\}}|dkrXqt|dd\}}|tkrvq||q:d||fS)zBReturn (dotted-name or None, next-token) tuple for token source g.rrUNr.)r\rr]r^)rfpartsrgrhrrrrb[s  rbc CsXddl}ztjd}Wnt}YnX|j|rj|j|g}|j|}| drn|dd}ng}t ||}dd}t | |dd }d }|rT| }t|trqt|d sd|_t|trt |j |dd }|D]} |j|| _q||t|tr,td d |j|j|j|jqt|trtdd |j|j|jqdS)z?Print module output (default this file) for quick visual check.rNr/z.pycSs t|ddS)Nrr)getattr)arrr|z_main..T)r,reverseruindentz{}class {} {} {} z {}def {} {})osr2argv__file__r*existsdirnamebasenamelowerendswithrsortedvaluespopr"listhasattrr}r rextendrprintr6r rrr) rrrr*rCZ lineno_keyZobjsZ indent_levelrZnew_objsr#rrr_mainmsL           r__main__)N)N)N)N)rrWr2importlib.utilr7rYrhrrr__all__r1r rrr%r'rrr(r@rarbrrrrrrs,(    @&