bg|VdZddlZddlZddlmZdefdZdefdZdefdZdefdZ dS) aContains logic for retrieving special methods. This implementation does not rely on the dot attribute access logic, found in ``.getattr()``. The difference between these two is that the dunder methods are looked with the type slots (you can find more about these here http://lucumr.pocoo.org/2014/8/16/the-python-i-would-like-to-see/) As such, the lookup for the special methods is actually simpler than the dot attribute access. N)AttributeInferenceErrorreturnc&|jg}tjfd|dD}t tj||}|st||S)Nc3NK|]}|jgV dS)N)localsget).0ancestornames r/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/astroid/interpreter/dunder_lookup.py z!_lookup_in_mro..sF***2D"%%******T)recurs attributetarget)rr itertoolschain from_iterable ancestorslistr)noder attrsnodesvaluess ` r _lookup_in_mrors KOOD" % %E O ) )****6:nnDn6Q6Q***  E)/%// 0 0F C%TBBBB Mrczt|tjtjtjtjtjfrt||St|tjrt||St|tj rt||St||)zLookup the given special method name in the given *node*. If the special method was found, then a list of attributes will be returned. Otherwise, `astroid.AttributeInferenceError` is going to be raised. r) isinstanceastroidListTupleConstDictSet_builtin_lookupInstancerClassDef _class_lookupr)rr s r lookupr)"s w|W]GM7<U+tT***$())*dD)))$()))T4((( !D > > >>rcp|}|t||t||SNr) metaclassrr)rr r,s r r(r(5s:  I%TBBBB )T * **rcb|j|g}|st|||Sr+)rrr)rr rs r r%r%=s8 [__T2 & &F C%TBBBB Mr) __doc__rrastroid.exceptionsrrrr)r(r%rr r1s  666666 $    ?$????&+++++4r