zfc@s}dZddlZddlmZdd dYZeeZdZdefdYZ d efd YZ dS( s3Abstract Base Classes (ABCs) according to PEP 3119.iN(tWeakSett_CcBseZRS((t__name__t __module__(((s/usr/lib64/python2.7/abc.pyR scCs t|_|S(sA decorator indicating abstract methods. Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract methods are overridden. The abstract methods can be called using any of the normal 'super' call mechanisms. Usage: class C: __metaclass__ = ABCMeta @abstractmethod def my_abstract_method(self, ...): ... (tTruet__isabstractmethod__(tfuncobj((s/usr/lib64/python2.7/abc.pytabstractmethods tabstractpropertycBseZdZeZRS(s/A decorator indicating abstract properties. Requires that the metaclass is ABCMeta or derived from it. A class that has a metaclass derived from ABCMeta cannot be instantiated unless all of its abstract properties are overridden. The abstract properties can be called using any of the normal 'super' call mechanisms. Usage: class C: __metaclass__ = ABCMeta @abstractproperty def my_abstract_property(self): ... This defines a read-only property; you can also define a read-write abstract property using the 'long' form of property declaration: class C: __metaclass__ = ABCMeta def getx(self): ... def setx(self, value): ... x = abstractproperty(getx, setx) (RRt__doc__RR(((s/usr/lib64/python2.7/abc.pyR$stABCMetacBsDeZdZdZdZdZddZdZdZ RS(siMetaclass for defining Abstract Base Classes (ABCs). Use this metaclass to create an ABC. An ABC can be subclassed directly, and then acts as a mix-in class. You can also register unrelated concrete classes (even built-in classes) and unrelated ABCs as 'virtual subclasses' -- these and their descendants will be considered subclasses of the registering ABC by the built-in issubclass() function, but the registering ABC won't show up in their MRO (Method Resolution Order) nor will method implementations defined by the registering ABC be callable (not even via super()). icCstt|j||||}td|jD}xb|D]Z}xQt|dtD]:}t||d}t|dtr`|j|q`q`WqDWt ||_ t |_ t |_ t |_tj|_|S(Ncss-|]#\}}t|dtr|VqdS(RN(tgetattrtFalse(t.0tnametvalue((s/usr/lib64/python2.7/abc.pys Ys t__abstractmethods__R(tsuperR t__new__tsettitemsR tNoneR taddt frozensetRRt _abc_registryt _abc_cachet_abc_negative_cachet_abc_invalidation_countert_abc_negative_cache_version(tmclsRtbasest namespacetclst abstractstbaseR((s/usr/lib64/python2.7/abc.pyRVs!      cCs{t|ttjfs'tdnt||r:dSt||rXtdn|jj|t j d7_ dS(s&Register a virtual subclass of an ABC.sCan only register classesNs'Refusing to create an inheritance cyclei( t isinstancettypettypest ClassTypet TypeErrort issubclasst RuntimeErrorRRR R(R tsubclass((s/usr/lib64/python2.7/abc.pytregisteriscCs|d|j|jfIJ|dtjIJxRt|jjD];}|jdrAt||}|d||fIJqAqAWdS(s'Debug helper to print the ABC registry.s Class: %s.%ssInv.counter: %st_abc_s%s: %rN( RRR Rtsortedt__dict__tkeyst startswithR (R tfileRR((s/usr/lib64/python2.7/abc.pyt_dump_registryws cCst|dd}|dk r1||jkr1tSt|}|tkrR|}n||ksj|dkr|jtjkr||j krt S|j |S|j |p|j |S(s'Override for isinstance(instance, cls).t __class__N( R RRRR$t _InstanceTypeRR RRR t__subclasscheck__(R tinstanceR*tsubtype((s/usr/lib64/python2.7/abc.pyt__instancecheck__s     cCsL||jkrtS|jtjkr@t|_tj|_n||jkrStS|j|}|t k r|r|jj |n|jj ||S|t |ddkr|jj |tSx4|j D])}t ||r|jj |tSqWx7|jD])}t ||r |jj |tSq W|jj |tS(s'Override for issubclass(subclass, cls).t__mro__((RRRR RRRR t__subclasshook__tNotImplementedRR RR(t__subclasses__(R R*toktrclstscls((s/usr/lib64/python2.7/abc.pyR5s4  N( RRR RRR+RR2R8R5(((s/usr/lib64/python2.7/abc.pyR As   (( R R%t _weakrefsetRRR$R4RtpropertyRR (((s/usr/lib64/python2.7/abc.pyts