ó DŃŐfc@sÖdZddlmZdddddgZiZdd„Zd „Zye Wne k ranXd „Z ee e e ƒd „Z dZ d„Zd„Zd„ZiZiZiZd„Zd„Zd„ZdS(sŹHelper to provide extensibility for pickle/cPickle. This is only useful to add pickle support for extension types defined in C, not for instances of user-defined classes. i˙˙˙˙(t ClassTypetpicklet constructort add_extensiontremove_extensiontclear_extension_cachecCsft|ƒtkr!tdƒ‚nt|dƒs?tdƒ‚n|t|<|dk rbt|ƒndS(Ns-copy_reg is not intended for use with classest__call__s$reduction functions must be callable(ttypet _ClassTypet TypeErrorthasattrtdispatch_tabletNoneR(tob_typetpickle_functiontconstructor_ob((s /usr/lib64/python2.7/copy_reg.pyRs  cCs"t|dƒstdƒ‚ndS(NRsconstructors must be callable(R R (tobject((s /usr/lib64/python2.7/copy_reg.pyRscCst|j|jffS(N(tcomplextrealtimag(tc((s /usr/lib64/python2.7/copy_reg.pytpickle_complex'scCsY|tkrtj|ƒ}n7|j||ƒ}|jtjkrU|j||ƒn|S(N(Rt__new__t__init__(tclstbasetstatetobj((s /usr/lib64/python2.7/copy_reg.pyt_reconstructor.s  ii cCs&x;|jjD]'}t|dƒr |jt@ r Pq q Wt}|tkrSd}n.||jkrutd|j‚n||ƒ}|j||f}y |j }WnYt k rűt |ddƒrŃtdƒ‚ny |j }Wqt k r÷d}qXn X|ƒ}|rt ||fSt |fSdS(Nt __flags__scan't pickle %s objectst __slots__sNa class that defines __slots__ without defining __getstate__ cannot be pickled(t __class__t__mro__R Rt _HEAPTYPERR R t__name__t __getstate__tAttributeErrortgetattrt__dict__R(tselftprotoRRtargstgetstatetdict((s /usr/lib64/python2.7/copy_reg.pyt _reduce_ex;s.         cGs|j||ŒS(N(R(RR)((s /usr/lib64/python2.7/copy_reg.pyt __newobj__\scCs|jjdƒ}|dk r"|Sg}t|dƒs:nşxˇ|jD]Ź}d|jkrD|jd}t|tƒr|f}nxl|D]a}|dkr qˆqˆ|jdƒrÜ|jdƒ rÜ|j d|j |fƒqˆ|j |ƒqˆWqDqDWy ||_ WnnX|S( s›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.) t __slotnames__RR&t __weakref__t__s_%s%sN(s__dict__s __weakref__( R&tgetR R R t isinstancet basestringt startswithtendswithtappendR"R.(RtnamesRtslotstname((s /usr/lib64/python2.7/copy_reg.pyt _slotnames_s,       cCsŘt|ƒ}d|ko#dkns4td‚n||f}tj|ƒ|krntj|ƒ|krndS|tkr—td|t|fƒ‚n|tkrŔtd|t|fƒ‚n|t|<|t|R<t_extension_cache(R?R9R@RA((s /usr/lib64/python2.7/copy_reg.pyRŻs  cCstjƒdS(N(RBtclear(((s /usr/lib64/python2.7/copy_reg.pyRťsNi(t__doc__ttypesRRt__all__R R RRRt NameErrorRRR!R,R-R:R=R>RBRRR(((s /usr/lib64/python2.7/copy_reg.pyts.     !  8