grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B ei¸Ç�peã@s®dZdddddgZiZddd„Zdd„ZyeWnek rDYnXd d „Zeeeeƒd d „Zd Z dd„Z dd„Z dd„Z dd„Z iZiZiZdd„Zdd„Zdd„ZdS)z¤Helper 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_extensionÚremove_extensionÚclear_extension_cacheNcCs,t|ƒstdƒ‚|t|<|dk r(t|ƒdS)Nz$reduction functions must be callable)ÚcallableÚ TypeErrorÚdispatch_tabler)Úob_typeÚpickle_functionÚconstructor_ob©r ú,/opt/alt/python37/lib64/python3.7/copyreg.pyr s cCst|ƒstdƒ‚dS)Nzconstructors must be callable)rr)Úobjectr r r rscCst|j|jffS)N)ÚcomplexÚrealÚimag)Úcr r r Úpickle_complex"srcCs<|tkrt |¡}n$| ||¡}|jtjkr8| ||¡|S)N)rÚ__new__Ú__init__)ÚclsÚbaseÚstateÚobjr r r Ú_reconstructor)s     ric Csì|dks t‚x*|jjD]}t|dƒr|jt@sPqWt}|tkrFd}n ||jkr^td|jƒ‚||ƒ}|j||f}y |j }WnNt k rÊt |ddƒr¢tdƒd‚y |j }Wnt k rÄd}YnXYnX|ƒ}|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__ÚAttributeErrorÚgetattrÚ__dict__r)ÚselfÚprotorrÚargsÚgetstateÚdictr r r Ú _reduce_ex6s2       r-cGs|j|f|žŽS)N)r)rr*r r r Ú __newobj__Wsr.cCs|j|f|ž|Ž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__Zsr0cCsà|j d¡}|dk r|Sg}t|dƒs(nœxš|jD]�}d|jkr0|jd}t|tƒrX|f}xf|D]^}|dkrnq^q^| d¡r²| d¡s²|j  d¡}|r¦|  d||f¡q¼|  |¡q^|  |¡q^Wq0Wy ||_ Wn YnX|S)a›Return 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__Nr)r'Ú __weakref__Ú__Ú_z_%s%s) r'Úgetr!r Ú isinstanceÚstrÚ startswithÚendswithr#ÚlstripÚappendr1)rÚnamesrÚslotsÚnameÚstrippedr r r Ú _slotnames`s2          r@cCsšt|ƒ}d|krdks&ntdƒ‚||f}t |¡|krNt |¡|krNdS|tkrjtd|t|fƒ‚|tkr†td|t|fƒ‚|t|<|t|<dS)zRegister an extension code.éiÿÿÿzcode out of rangeNz)key %s is already registered with code %sz$code %s is already in use for key %s)ÚintÚ ValueErrorÚ_extension_registryr5Ú_inverted_registry)Úmoduler>ÚcodeÚkeyr r r r¢scCsR||f}t |¡|ks$t |¡|kr4td||fƒ‚t|=t|=|tkrNt|=dS)z0Unregister an extension code. For testing only.z%key %s is not registered with code %sN)rDr5rErCÚ_extension_cache)rFr>rGrHr r r r´s cCs t ¡dS)N)rIÚclearr r r r rÀs)N)Ú__doc__Ú__all__rrrrÚ NameErrorrrr"r-r.r0r@rDrErIrrrr r r r Ús.    !<