Yf @sdZdddddgZiZdddZddZyeWnek rXYnXd d Zeeeed d ZdZ ddZ ddZ ddZ ddZ iZiZiZddZddZddZdS)zHelper to provide extensibility for pickle. This is only useful to add pickle support for extension types defined in C, not for instances of user-defined classes. pickle constructor add_extensionremove_extensionclear_extension_cacheNcCs<t|std|t|<|dk r8t|dS)Nz$reduction functions must be callable)callable TypeErrordispatch_tabler)ob_typepickle_functionconstructor_obr ,/opt/alt/python35/lib64/python3.5/copyreg.pyr s     cCst|stddS)Nzconstructors must be callable)rr)objectr r r rs cCst|j|jffS)N)complexrealimag)cr r r pickle_complex"srcCsV|tkrtj|}n4|j||}|jtjkrR|j|||S)N)r__new____init__)clsbasestateobjr r r _reconstructor)s  r cCs4|dkstx8|jjD]$}t|dr|jt@ rPqWt}|tkrbd}n.||jkrtd|j||}|j||f}y |j }WnXt k r t |ddrtdy |j }Wnt k rd}YnXYn X|}|r&t ||fSt |fSdS)N __flags__zcan't pickle %s objects __slots__zNa class that defines __slots__ without defining __getstate__ cannot be pickled)AssertionError __class____mro__hasattrr _HEAPTYPErr__name__ __getstate__AttributeErrorgetattr__dict__r)selfprotorrargsgetstatedictr r r _reduce_ex6s0          r/cGs|j||S)N)r)rr,r r r __newobj__Wsr0cCs|j|||S)zUsed by pickle protocol 4, instead of __newobj__ to allow classes with keyword-only arguments to be pickled correctly. )r)rr,kwargsr r r __newobj_ex__Zsr2c Cs |jjd}|dk r"|Sg}t|ds:nx|jD]}d|jkrD|jd}t|tr~|f}xi|D]a}|dkrqq|jdr|jd r|jd|j |fq|j|qWqDWy ||_ WnYnX|S) aReturn a list of slot names for a given class. This needs to find slots defined by the class and its bases, so we can't simply return the __slots__ attribute. We must walk down the Method Resolution Order and concatenate the __slots__ of each class found there. (This assumes classes don't modify their __slots__ attribute to misrepresent their slots after the class is defined.) __slotnames__Nrr) __weakref____z_%s%s)r)r4) r)getr#r" isinstancestr startswithendswithappendr%r3)rnamesrslotsnamer r r _slotnames`s,       r?cCst|}d|ko#dkns4td||f}tj||krntj||krndS|tkrtd|t|f|tkrtd|t|f|t|<|t|codekeyr r r rs      cCsq||f}tj||ks6tj||krLtd||ft|=t|=|tkrmt|=dS)z0Unregister an extension code. For testing only.z%key %s is not registered with code %sN)rBr6rCrA_extension_cache)rDr>rErFr r r rs  cCstjdS)N)rGclearr r r r rsi)__doc____all__rrrr NameErrorrrr$r/r0r2r?rBrCrGrrrr r r r s.     !   8